IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)

Vous �tes nouveau sur Developpez.com ? Cr�ez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et �tre connect� pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Cr�ez-en un en quelques instants, c'est enti�rement gratuit !

Si vous disposez d�j� d'un compte et qu'il est bien activ�, connectez-vous � l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oubli� ?
Cr�er un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft Tye : d�velopper, tester et d�ployer ses microservices .NET Core avec simplicit�,
Un billet d'Hinault Romaric

Le , par Hinault Romaric

0PARTAGES

Dans ce billet de blog, j�aimerais vous pr�senter Microsoft Tye. Il s�agit d�un projet open source encore au stade exp�rimental qui promet de simplifier le d�veloppement, les tests en local et les d�ploiements des microservices, notamment sur des clusters kubernetes.

Concr�tement, il s�agit en quelque sorte d�un orchestrateur local qui va faciliter le d�veloppement des microservices et des applications distribu�es, qui pourront �tre d�ploy�s avec le minimum de configuration sur des clusters Kubernetes.

Selon la page du projet, Tye permet :

- Simplifier le d�veloppement des microservices en facilitant :
� l�ex�cution de nombreux services avec une seule commande;
� l�utilisation des d�pendances dans des conteneurs;
� la d�couverte des adresses d�autres services en utilisant des conventions simples.

- D�ployer des applications .NET sur Kubernetes en :
� automatisant la conteneurisation des applications .NET;
� g�n�rant les manifestes kubernetes;
� utilisant les m�mes concepts qu�en d�veloppement pour maintenir une certaine coh�rence.

Il s�agit d�un projet exp�rimental, donc avant la sortie d�une version stable, les fonctionnalit�s que je vais pr�senter ici pourraient radicalement changer ou m�me �tre supprim�es.

Lorsque j�ai d�couvert le projet Tye, le premier candidat sur lequel je pouvais tester et tirer avantage de l�outil est le code d�exemple que j�ai mis en place pour IdentityServer.

En effet, dans cet exemple, j�ai trois applications .NET :

- AspNetCoreIdentityServer qui est une application ASP.NET Core 3.1 qui joue le r�le de service de gestion s�curis� de jetons (STS) et est utilis�e par les autres applications pour s�authentifier et acc�der aux ressources s�curis�es;

- TestAPI : qui est une Web API ASP.NET Core, dont l�acc�s est s�curis� par le STS;

- MvcAppClient : qui est une application ASP.NET Core MVC qui utilise le STS et la WebAPI. Lorsque vous acc�dez � une page s�curis�e de cette application, vous �tes redirig� vers le STS pour vous authentifier avant d�acc�der � la page. Lorsque l�application consomme l�API, vos jetons d�authentification sont transmis � cette derni�re qui utilise le STS pour les valider avant de retourner les informations auxquelles vous voulez acc�der.

Vous comprenez que pour tester l�application MvcAppClient, les deux autres applications doivent �tre en cours d�ex�cution. En environnement de d�veloppement, j��tais oblig� d�ouvrir trois fen�tres de l�invite de commande dans le r�pertoire racine de chaque service et ex�cuter la commande dotnet run. Ou d�boguer une application dans Visual Studio et ex�cuter les autres avec dotnet run.

Tye vient me simplifier la vie en permettant l�ex�cution de tous mes services en une seule commande.

Voyons un peu comment.

1. Installation de Tye

Tye est disponible comme un outil .NET Core. Avant de l�installer vous devez disposer de .NET Core 3.1.

Pour installer l�outil, vous devez ex�cuter la commande suivante :

Code : S�lectionner tout
dotnet tool install -g Microsoft.Tye --version "0.4.0-alpha.20371.1"

Il faut noter que de nouvelles versions sont publi�es toutes les quatre semaines.

2. Cloner le projet d�exemple

Vous devez cloner le projet d�exemple en utilisant la commande suivante :

Code : S�lectionner tout
git clone https://github.com/hinault/identityserver.git
Puis vous positionner sur le dossier IdentityServer :

Code : S�lectionner tout
cd IdentityServer




3. Ex�cuter les services

Pour ex�cuter les services, il suffit juste d�utiliser la commande tye run

Code : S�lectionner tout
Tye run
Tye va analyser le fichier de solution (.sln), ensuite g�n�rer et ex�cuter les projets dans la solution, comme vous pouvez le consulter dans la capture ci-dessous :



Le tableau de bord de Tye est accessible via l�adresse 127.0.0.1:8000. Vous pouvez visualiser les projets en cours d�ex�cution avec leur adresse.



Il est possible de voir les logs de chaque application en cours d�utilisation. Ce qui est utile pour le d�bogage de ces derniers.


Faites Ctrl+ C en invite de commande pour arr�ter Tye.

4. Configuration de Tye

Pour que la communication passe entre les diff�rents services, l�application IdentityServer doit s�ex�cuter sur le port 5000 en HTTP et 5001 en HTTPS. L�application MVC sur le port 5004 en HTTP et 5005 en HTTPS. La Web API utilise le port 5002 en HTTP et 5003 en HTTPS. Par d�faut Tye ex�cute nos applications sur des ports de fa�on al�atoire, ce qui rend la communication impossible entre les diff�rents services.

Pour rem�dier � cela, nous allons utiliser le fichier de configuration tye.yaml pour configurer nos applications.

Pour g�n�rer ce fichier, vous devez ex�cuter la commande

Code : S�lectionner tout
Tye init
Cette commande va g�n�rer un fichier tye.yaml � la racine de votre solution, avec le contenu suivant :

Code yaml : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# tye application configuration file 
# read all about it at https://github.com/dotnet/tye 
# 
# when you've given us a try, we'd love to know what you think: 
#    https://aka.ms/AA7q20u 
# 
name: identityservertuto 
services: 
- name: aspnetcoreidentityserver 
  project: AspNetCoreIdentityServer/AspNetCoreIdentityServer.csproj 
- name: testapi 
  project: TestApi/TestApi.csproj 
- name: mvcappclient 
  project: MvcAppClient/MvcAppClient.csproj

Nous allons �diter le fichier pour sp�cifier le port pour chaque application :

Code yaml : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# tye application configuration file 
# read all about it at https://github.com/dotnet/tye 
# 
# when you've given us a try, we'd love to know what you think: 
#    https://aka.ms/AA7q20u 
# 
name: identityservertuto 
services: 
- name: aspnetcoreidentityserver 
  project: AspNetCoreIdentityServer/AspNetCoreIdentityServer.csproj 
  bindings: 
  - name: http  
    port: 5000 
    protocol: http 
  - name: https  
    port: 5001 
    protocol: https 
- name: testapi 
  project: TestApi/TestApi.csproj 
    bindings: 
  - name: http  
    port: 5002 
    protocol: http 
  - name: https  
    port: 5003 
    protocol: https 
- name: mvcappclient 
  project: MvcAppClient/MvcAppClient.csproj 
    bindings: 
  - name: http  
    port: 5004 
    protocol: http 
  - name: https  
    port: 5005 
    protocol: https

Il ne reste plus qu�� ex�cuter Tye avec la commande tye run :


Maintenant nos applications s�ex�cutent sur les bons ports.

5. Utilisation du service discovery

J�ai choisi volontairement de ne pas traduire le terme � service discovery �. Ce terme d�crit le processus par lequel un service d�termine l�adresse d�un autre service. Il existe diff�rentes fa�ons d�impl�menter le � service discovery � en environnement microservices. Chacune apporte couramment son lot de complexit�.

L�approche de Tye pour supporter le � service discovery � c�est d�offrir un m�canisme qui va :

- fonctionner de la m�me mani�re en environnement de d�veloppement local, de production ou Cloud;
- �tre bas� sur des primitives simples;
- �viter le besoin d�une infrastructure externe.

Dans mon application d�exemple, j�ai sp�cifi� les URL de mes services en dur dans le code. La cons�quence directe est le fait que je dois toujours utiliser les m�mes ports pour faire tourner mes applications. Si les URL changent, je dois modifier le code de chaque application pour changer les URL.

J�aurais �galement pu utiliser les fichiers de configuration (appsettings.json). Mais � chaque changement d�URL pour un service, je dois aussi modifier le fichier de configuration des autres services.

La meilleure approche � ce stade est d�utiliser le service discovery de Tye et laisser l�attribution des ports al�atoires lors de l�ex�cution de mes applications. Ainsi, je n�ai pas � me soucier si un port est utilis� ou pas. Par ailleurs, les tests et les d�ploiements de mes services dans les diff�rents environnements sont simplifi�s.

Le service discovery de Tye repose sur des variables d�environnement du runtime .NET Core. Les URI des services et les chaines de connexion sont donc stock�es dans des variables d�environnement.

Pour simplifier l�utilisation dans nos applications, nous pouvons utiliser le package Microsoft.Tye.Extensions.Configuration qui apporte des m�thodes d�extensions suppl�mentaires au syst�me de Configuration de ASP.NET Core.

Mon code dans lequel je r�f�ren�ais en dur l�adresse de mon service :

Code c# : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
services.AddAuthentication(options => 
            { 
                options.DefaultScheme = "Cookies"; 
                options.DefaultChallengeScheme = "oidc"; 
            }) 
                .AddCookie("Cookies") 
                .AddOpenIdConnect("oidc", options => 
                { 
  
                    options.Authority = "https://localhost:5001"; 
                    options.RequireHttpsMetadata = false; 
                    options.ClientSecret = "secret"; 
                    options.ResponseType = "code"; 
                    options.ClientId = "mvcappclient"; 
                    options.SaveTokens = true; 
                });

Devient donc :

Code c# : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
services.AddAuthentication(options => 
            { 
                options.DefaultScheme = "Cookies"; 
                options.DefaultChallengeScheme = "oidc"; 
            }) 
                .AddCookie("Cookies") 
                .AddOpenIdConnect("oidc", options => 
                { 
  
                    options.Authority = Configuration.GetServiceUri("AspNetCoreIdentityServer").AbsoluteUri 
                    options.RequireHttpsMetadata = false; 
                    options.ClientSecret = "secret"; 
                    options.ResponseType = "code"; 
                    options.ClientId = "mvcappclient"; 
                    options.SaveTokens = true; 
                });

6. Conclusion

Comme vous avez pu le constater Microsoft Tye est un outil assez promoteur qui nous sera d�une grande utilit� pour la mise en place de nos microservices. Je vais continuer � suivre l��volution de l�outil et vous reviendrais avec les fonctionnalit�s que je trouve int�ressantes.

Pour en savoir plus :

Le repository de Tye sur GitHub : https://github.com/dotnet/tye

Le repsitory du projet d�exemple : https://github.com/hinault/identityserver

Mon article sur IdentityServer : https://rdonfack.developpez.com/tuto...entityserver4/
Vous avez lu gratuitement 5 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer � vous proposer des publications.

Une erreur dans cette actualit� ? Signalez-nous-la !