
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
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
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
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 :



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.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer � vous proposer des publications.