2.8. Déploiement d'applications sur Service Mesh
You are viewing documentation for a Red Hat OpenShift Service Mesh release that is no longer supported.
Les plans de contrôle Service Mesh version 1.0 et 1.1 ne sont plus pris en charge. Pour plus d'informations sur la mise à niveau de votre plan de contrôle Service Mesh, voir Mise à niveau de Service Mesh.
Pour plus d'informations sur l'état de l'assistance d'une version particulière de Red Hat OpenShift Service Mesh, consultez la page Cycle de vie du produit.
Lorsque vous déployez une application dans le Service Mesh, il existe plusieurs différences entre le comportement des applications dans la version communautaire en amont d'Istio et le comportement des applications dans une installation Red Hat OpenShift Service Mesh.
2.8.1. Conditions préalables
2.8.2. Création de modèles de plan de contrôle
Vous pouvez créer des configurations réutilisables avec les modèles ServiceMeshControlPlane
. Les utilisateurs individuels peuvent étendre les modèles qu'ils créent avec leurs propres configurations. Les modèles peuvent également hériter des informations de configuration d'autres modèles. Par exemple, vous pouvez créer un plan de contrôle comptable pour l'équipe comptable et un plan de contrôle marketing pour l'équipe marketing. Si vous créez un modèle de développement et un modèle de production, les membres de l'équipe marketing et de l'équipe comptable peuvent étendre les modèles de développement et de production en les personnalisant en fonction de leur équipe.
Lorsque vous configurez des modèles de plan de contrôle, qui suivent la même syntaxe que ServiceMeshControlPlane
, les utilisateurs héritent des paramètres de manière hiérarchique. L'Opérateur est livré avec un modèle default
avec des paramètres par défaut pour Red Hat OpenShift Service Mesh. Pour ajouter des modèles personnalisés, vous devez créer un ConfigMap nommé smcp-templates
dans le projet openshift-operators
et monter le ConfigMap dans le conteneur Operator à /usr/local/share/istio-operator/templates
.
2.8.2.1. Création du ConfigMap
Suivez cette procédure pour créer le ConfigMap.
Conditions préalables
- Un opérateur de maillage de services installé et vérifié.
-
Un compte avec le rôle
cluster-admin
. - Emplacement du déploiement de l'opérateur.
-
Accès à la CLI OpenShift (
oc
).
Procédure
- Connectez-vous au CLI de OpenShift Container Platform en tant qu'administrateur de cluster.
À partir de l'interface de programmation, exécutez cette commande pour créer le ConfigMap nommé
smcp-templates
dans le projetopenshift-operators
et remplacez<templates-directory>
par l'emplacement des fichiersServiceMeshControlPlane
sur votre disque local :oc create configmap --from-file=<templates-directory> smcp-templates -n openshift-operators
Localisez le nom de l'opérateur ClusterServiceVersion.
$ oc get clusterserviceversion -n openshift-operators | grep 'Service Mesh'
Exemple de sortie
maistra.v1.0.0 Red Hat OpenShift Service Mesh 1.0.0 Succeeded
Modifiez la version du service de cluster de l'opérateur pour indiquer à l'opérateur d'utiliser le ConfigMap
smcp-templates
.$ oc edit clusterserviceversion -n openshift-operators maistra.v1.0.0
Ajoutez un montage de volume et un volume au déploiement de l'opérateur.
deployments: - name: istio-operator spec: template: spec: containers: volumeMounts: - name: discovery-cache mountPath: /home/istio-operator/.kube/cache/discovery - name: smcp-templates mountPath: /usr/local/share/istio-operator/templates/ volumes: - name: discovery-cache emptyDir: medium: Memory - name: smcp-templates configMap: name: smcp-templates ...
- Enregistrez vos modifications et quittez l'éditeur.
Vous pouvez désormais utiliser le paramètre
template
dans le formulaireServiceMeshControlPlane
pour spécifier un modèle.apiVersion: maistra.io/v1 kind: ServiceMeshControlPlane metadata: name: minimal-install spec: template: default
2.8.3. Activation de l'injection automatique du side-car
Lors du déploiement d'une application, vous devez opter pour l'injection en configurant l'annotation sidecar.istio.io/inject
dans spec.template.metadata.annotations
vers true
dans l'objet deployment
. L'opt-in garantit que l'injection de sidecar n'interfère pas avec d'autres fonctionnalités d'OpenShift Container Platform telles que les builder pods utilisés par de nombreux frameworks au sein de l'écosystème d'OpenShift Container Platform.
Conditions préalables
- Identifiez les espaces de noms qui font partie de votre maillage de services et les déploiements qui ont besoin d'une injection automatique de sidecar.
Procédure
Pour trouver vos déploiements, utilisez la commande
oc get
.$ oc get deployment -n <namespace>
Par exemple, pour afficher le fichier de déploiement du microservice "ratings-v1" dans l'espace de noms
info
, utilisez la commande suivante pour afficher la ressource au format YAML.oc get deployment -n info ratings-v1 -o yaml
- Ouvrez le fichier YAML de configuration du déploiement de l'application dans un éditeur.
Ajoutez
spec.template.metadata.annotations.sidecar.istio/inject
à votre Deployment YAML et définissezsidecar.istio.io/inject
àtrue
comme indiqué dans l'exemple suivant.Exemple d'extrait de info deployment-ratings-v1.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: ratings-v1 namespace: info labels: app: ratings version: v1 spec: template: metadata: annotations: sidecar.istio.io/inject: 'true'
- Enregistrer le fichier de configuration du déploiement.
Ajoutez le fichier au projet qui contient votre application.
oc apply -n <namespace> -f deployment.yaml
Dans cet exemple,
info
est le nom du projet qui contient l'applicationratings-v1
etdeployment-ratings-v1.yaml
est le fichier que vous avez modifié.$ oc apply -n info -f deployment-ratings-v1.yaml
Pour vérifier que la ressource a été téléchargée avec succès, exécutez la commande suivante.
$ oc get deployment -n <namespace> <deploymentName> -o yaml
Par exemple,
$ oc get deployment -n info ratings-v1 -o yaml
2.8.4. Définition de variables d'environnement de proxy par le biais d'annotations
La configuration des mandataires Envoy sidecar est gérée par le site ServiceMeshControlPlane
.
Vous pouvez définir des variables d'environnement pour le proxy sidecar des applications en ajoutant des annotations pod au déploiement dans le fichier injection-template.yaml
. Les variables d'environnement sont injectées dans le sidecar.
Exemple injection-template.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: resource spec: replicas: 7 selector: matchLabels: app: resource template: metadata: annotations: sidecar.maistra.io/proxyEnv: "{ \"maistra_test_env\": \"env_value\", \"maistra_test_env_2\": \"env_value_2\" }"
Vous ne devez jamais inclure les étiquettes et les annotations de maistra.io/
lorsque vous créez vos propres ressources personnalisées. Ces étiquettes et annotations indiquent que les ressources sont générées et gérées par l'opérateur. Si vous copiez le contenu d'une ressource générée par l'opérateur lorsque vous créez vos propres ressources, n'incluez pas d'étiquettes ou d'annotations commençant par maistra.io/
. Les ressources qui incluent ces étiquettes ou annotations seront écrasées ou supprimées par l'opérateur lors de la prochaine réconciliation.
2.8.5. Mise à jour de l'application de la politique Mixer
Dans les versions précédentes de Red Hat OpenShift Service Mesh, l'application des politiques de Mixer était activée par défaut. L'application des politiques de Mixer est désormais désactivée par défaut. Vous devez l'activer avant d'exécuter des tâches de politique.
Conditions préalables
-
Accès à la CLI OpenShift (
oc
).
Les exemples utilisent <istio-system>
comme espace de noms du plan de contrôle. Remplacez cette valeur par l'espace de noms dans lequel vous avez déployé le plan de contrôle Service Mesh (SMCP).
Procédure
- Connectez-vous au CLI de OpenShift Container Platform.
Exécutez cette commande pour vérifier l'état actuel de l'application de la politique de mixage :
$ oc get cm -n <istio-system> istio -o jsonpath='{.data.mesh}' | grep disablePolicyChecks
Si
disablePolicyChecks: true
, modifiez le ConfigMap du Service Mesh :$ oc edit cm -n <istio-system> istio
-
Localisez
disablePolicyChecks: true
dans le ConfigMap et changez la valeur enfalse
. - Enregistrez la configuration et quittez l'éditeur.
-
Vérifiez à nouveau l'état d'application de la politique de mixage pour vous assurer qu'il est défini sur
false
.
2.8.5.1. Définir la bonne politique de réseau
Service Mesh crée des stratégies réseau dans le plan de contrôle Service Mesh et les espaces de noms membres pour autoriser le trafic entre eux. Avant de procéder au déploiement, tenez compte des conditions suivantes pour vous assurer que les services de votre maillage de services qui étaient auparavant exposés par l'intermédiaire d'une route OpenShift Container Platform.
- Le trafic dans le maillage de services doit toujours passer par la passerelle d'entrée (ingress-gateway) pour qu'Istio fonctionne correctement.
- Déployer des services externes au maillage de services dans des espaces de noms distincts qui ne font partie d'aucun maillage de services.
-
Les services non maillés qui doivent être déployés dans un espace de noms enlisé de maillage de services doivent étiqueter leurs déploiements
maistra.io/expose-route: "true"
, ce qui garantit que les routes d'OpenShift Container Platform vers ces services fonctionnent toujours.
2.8.6. Exemple d'application Bookinfo
L'application d'exemple Bookinfo vous permet de tester votre installation Red Hat OpenShift Service Mesh 2.3.3 sur OpenShift Container Platform.
L'application Bookinfo affiche des informations sur un livre, à l'instar d'une entrée de catalogue d'une librairie en ligne. L'application affiche une page décrivant le livre, des détails sur le livre (ISBN, nombre de pages et autres informations) et des critiques du livre.
L'application Bookinfo se compose de ces microservices :
-
Le microservice
productpage
appelle les microservicesdetails
etreviews
pour remplir la page. -
Le microservice
details
contient des informations sur les livres. -
Le microservice
reviews
contient des critiques de livres. Il appelle également le microserviceratings
. -
Le microservice
ratings
contient des informations sur le classement des livres qui accompagnent une critique de livre.
Il existe trois versions du microservice de révision :
-
La version v1 ne fait pas appel au service
ratings
. -
La version v2 appelle le service
ratings
et affiche chaque évaluation sous la forme d'une à cinq étoiles noires. -
La version v3 appelle le service
ratings
et affiche chaque évaluation sous la forme d'une à cinq étoiles rouges.
2.8.6.1. Installation de l'application Bookinfo
Ce tutoriel vous explique comment créer un exemple d'application en créant un projet, en déployant l'application Bookinfo dans ce projet et en visualisant l'application en cours d'exécution dans Service Mesh.
Prérequis :
- OpenShift Container Platform 4.1 ou supérieur installé.
- Red Hat OpenShift Service Mesh 2.3.3 installé.
-
Accès à la CLI OpenShift (
oc
). -
Un compte avec le rôle
cluster-admin
.
L'application d'exemple Bookinfo ne peut pas être installée sur IBM zSystems et IBM Power.
Les commandes de cette section supposent que le projet de plan de contrôle Service Mesh est istio-system
. Si vous avez installé le plan de contrôle dans un autre espace de noms, modifiez chaque commande avant de l'exécuter.
Procédure
-
Connectez-vous à la console web de OpenShift Container Platform en tant qu'utilisateur disposant des droits cluster-admin. Si vous utilisez Red Hat OpenShift Dedicated, vous devez avoir un compte avec le rôle
dedicated-admin
. -
Cliquez sur Home
Projects. - Cliquez sur Create Project.
Saisissez
info
comme Project Name, saisissez Display Name, et saisissez Description, puis cliquez sur Create.Vous pouvez également exécuter cette commande à partir de l'interface de gestion pour créer le projet
info
.$ oc new-project info
-
Cliquez sur Operators
Installed Operators. -
Cliquez sur le menu Project et utilisez l'espace de noms du plan de contrôle Service Mesh. Dans cet exemple, utilisez
istio-system
. - Cliquez sur l'opérateur Red Hat OpenShift Service Mesh.
Cliquez sur l'onglet Istio Service Mesh Member Roll.
- Si vous avez déjà créé un rouleau Istio Service Mesh Member, cliquez sur son nom, puis sur l'onglet YAML pour ouvrir l'éditeur YAML.
-
Si vous n'avez pas créé de site
ServiceMeshMemberRoll
, cliquez sur Create ServiceMeshMemberRoll.
- Cliquez sur Members, puis saisissez le nom de votre projet dans le champ Value.
Cliquez sur Create pour enregistrer la liste actualisée des membres du Service Mesh.
Vous pouvez également enregistrer l'exemple suivant dans un fichier YAML.
Bookinfo ServiceMeshMemberRoll exemple servicemeshmemberroll-default.yaml
apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default spec: members: - info
Exécutez la commande suivante pour télécharger ce fichier et créer la ressource
ServiceMeshMemberRoll
dans l'espace de nomsistio-system
. Dans cet exemple,istio-system
est le nom du projet de plan de contrôle Service Mesh.$ oc create -n istio-system -f servicemeshmemberroll-default.yaml
Exécutez la commande suivante pour vérifier que le site
ServiceMeshMemberRoll
a été créé avec succès.$ oc get smmr -n istio-system -o wide
L'installation est terminée avec succès lorsque la colonne
STATUS
estConfigured
.NAME READY STATUS AGE MEMBERS default 1/1 Configured 70s ["info"]
Depuis le CLI, déployez l'application Bookinfo dans le projet `info` en appliquant le fichier
bookinfo.yaml
:$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.3/samples/bookinfo/platform/kube/bookinfo.yaml
Vous devriez obtenir un résultat similaire à celui qui suit :
service/details created serviceaccount/info-details created deployment.apps/details-v1 created service/ratings created serviceaccount/info-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/info-reviews created deployment.apps/reviews-v1 created deployment.apps/reviews-v2 created deployment.apps/reviews-v3 created service/productpage created serviceaccount/info-productpage created deployment.apps/productpage-v1 created
Créez la passerelle d'entrée en appliquant le fichier
info-gateway.yaml
:$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.3/samples/bookinfo/networking/bookinfo-gateway.yaml
Vous devriez obtenir un résultat similaire à celui qui suit :
gateway.networking.istio.io/info-gateway created virtualservice.networking.istio.io/info created
Définir la valeur du paramètre
GATEWAY_URL
:$ export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')
2.8.6.2. Ajout de règles de destination par défaut
Avant de pouvoir utiliser l'application Bookinfo, vous devez d'abord ajouter des règles de destination par défaut. Il existe deux fichiers YAML préconfigurés, selon que vous avez activé ou non l'authentification mutuelle de la couche transport (TLS).
Procédure
Pour ajouter des règles de destination, exécutez l'une des commandes suivantes :
Si vous n'avez pas activé TLS mutuel :
$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.3/samples/bookinfo/networking/destination-rule-all.yaml
Si vous avez activé TLS mutuel :
$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.3/samples/bookinfo/networking/destination-rule-all-mtls.yaml
Vous devriez obtenir un résultat similaire à celui qui suit :
destinationrule.networking.istio.io/productpage created destinationrule.networking.istio.io/reviews created destinationrule.networking.istio.io/ratings created destinationrule.networking.istio.io/details created
2.8.6.3. Vérification de l'installation de Bookinfo
Pour confirmer que l'exemple d'application Bookinfo a été déployé avec succès, effectuez les étapes suivantes.
Conditions préalables
- Red Hat OpenShift Service Mesh installé.
- Suivez les étapes d'installation de l'application d'exemple Bookinfo.
Procédure à partir de l'interface de programmation
- Connectez-vous au CLI de OpenShift Container Platform.
Vérifiez que tous les pods sont prêts à l'aide de cette commande :
$ oc get pods -n info
Tous les pods devraient avoir un statut de
Running
. Vous devriez voir une sortie similaire à la suivante :NAME READY STATUS RESTARTS AGE details-v1-55b869668-jh7hb 2/2 Running 0 12m productpage-v1-6fc77ff794-nsl8r 2/2 Running 0 12m ratings-v1-7d7d8d8b56-55scn 2/2 Running 0 12m reviews-v1-868597db96-bdxgq 2/2 Running 0 12m reviews-v2-5b64f47978-cvssp 2/2 Running 0 12m reviews-v3-6dfd49b55b-vcwpf 2/2 Running 0 12m
Exécutez la commande suivante pour récupérer l'URL de la page produit :
echo "http://$GATEWAY_URL/productpage"
- Copiez et collez le résultat dans un navigateur web pour vérifier que la page du produit Bookinfo est déployée.
Procédure à partir de la console web Kiali
Obtenir l'adresse de la console web de Kiali.
-
Connectez-vous à la console web de OpenShift Container Platform en tant qu'utilisateur avec les droits
cluster-admin
. Si vous utilisez Red Hat OpenShift Dedicated, vous devez avoir un compte avec le rôlededicated-admin
. -
Naviguez jusqu'à Networking
Routes. Sur la page Routes, sélectionnez le projet de plan de contrôle Service Mesh, par exemple
istio-system
, dans le menu Namespace.La colonne Location affiche l'adresse liée à chaque itinéraire.
- Cliquez sur le lien dans la colonne Location pour Kiali.
- Cliquez sur Log In With OpenShift. L'écran Kiali Overview présente des tuiles pour chaque espace de noms de projets.
-
Connectez-vous à la console web de OpenShift Container Platform en tant qu'utilisateur avec les droits
- Dans Kiali, cliquez sur Graph.
- Sélectionnez info dans la liste Namespace et App graph dans la liste Graph Type.
Cliquez sur Display idle nodes dans le menu Display.
Cette fonction affiche les nœuds qui sont définis mais qui n'ont pas reçu ou envoyé de demandes. Elle permet de confirmer qu'une application est correctement définie, mais qu'aucun trafic de demande n'a été signalé.
- Utilisez le menu Duration pour augmenter la période de temps afin de vous assurer que le trafic plus ancien est capturé.
- Utilisez le menu Refresh Rate pour actualiser le trafic plus ou moins souvent, ou pas du tout.
- Cliquez sur Services, Workloads ou Istio Config pour afficher la liste des composants d'information et confirmer qu'ils sont sains.
2.8.6.4. Suppression de l'application Bookinfo
Suivez les étapes suivantes pour supprimer l'application Bookinfo.
Conditions préalables
- OpenShift Container Platform 4.1 ou supérieur installé.
- Red Hat OpenShift Service Mesh 2.3.3 installé.
-
Accès à la CLI OpenShift (
oc
).
2.8.6.4.1. Supprimer le projet Bookinfo
Procédure
- Connectez-vous à la console web de OpenShift Container Platform.
-
Cliquez sur Home
Projects. -
Cliquez sur le menu
info
puis cliquez sur Delete Project. Tapez
info
dans la boîte de dialogue de confirmation, puis cliquez sur Delete.Vous pouvez également exécuter cette commande à l'aide du CLI pour créer le projet
info
.$ oc delete project info
2.8.6.4.2. Retirer le projet Bookinfo de la liste des membres du Service Mesh
Procédure
- Connectez-vous à la console web de OpenShift Container Platform.
-
Cliquez sur Operators
Installed Operators. -
Cliquez sur le menu Project et choisissez
istio-system
dans la liste. - Cliquez sur le lien Istio Service Mesh Member Roll sous Provided APIS pour l'opérateur Red Hat OpenShift Service Mesh.
-
Cliquez sur le menu
ServiceMeshMemberRoll
et sélectionnez Edit Service Mesh Member Roll. Modifiez le Service Mesh Member Roll YAML par défaut et supprimez
info
de la liste members.Vous pouvez également exécuter cette commande à l'aide du CLI pour supprimer le projet
info
du projetServiceMeshMemberRoll
. Dans cet exemple,istio-system
est le nom du projet de plan de contrôle Service Mesh.$ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"info"'"]}]'
- Cliquez sur Save pour mettre à jour la liste des membres de Service Mesh.
2.8.7. Génération d'exemples de traces et analyse des données de traces
Jaeger est un système de traçage distribué open source. Avec Jaeger, vous pouvez effectuer une trace qui suit le chemin d'une requête à travers les différents microservices qui composent une application. Jaeger est installé par défaut dans le cadre du Service Mesh.
Ce tutoriel utilise Service Mesh et l'exemple d'application Bookinfo pour démontrer comment vous pouvez utiliser Jaeger pour effectuer un traçage distribué.
Prérequis :
- OpenShift Container Platform 4.1 ou supérieur installé.
- Red Hat OpenShift Service Mesh 2.3.3 installé.
- Jaeger activé lors de l'installation.
- L'application d'exemple Bookinfo est installée.
Procédure
Après avoir installé l'application d'exemple Bookinfo, envoyez du trafic au réseau. Saisissez plusieurs fois la commande suivante.
$ curl "http://$GATEWAY_URL/productpage"
Cette commande simule un utilisateur visitant le microservice
productpage
de l'application.Dans la console OpenShift Container Platform, naviguez vers Networking
Routes et recherchez la route Jaeger, qui est l'URL répertoriée sous Location. Il est également possible d'utiliser l'interface de commande pour obtenir des détails sur l'itinéraire. Dans cet exemple,
istio-system
est l'espace de noms du plan de contrôle Service Mesh :$ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
Entrez la commande suivante pour afficher l'URL de la console Jaeger. Collez le résultat dans un navigateur et naviguez jusqu'à cette URL.
echo $JAEGER_URL
- Connectez-vous en utilisant le même nom d'utilisateur et le même mot de passe que ceux que vous utilisez pour accéder à la console OpenShift Container Platform.
- Dans le volet gauche du tableau de bord Jaeger, dans le menu Service, sélectionnez productpage.info et cliquez sur Find Traces au bas du volet. Une liste de traces s'affiche.
-
Cliquez sur l'une des traces de la liste pour ouvrir une vue détaillée de cette trace. Si vous cliquez sur la première trace de la liste, qui est la plus récente, les détails correspondant à la dernière actualisation du site
/productpage
s'affichent.