2.8. Déploiement d'applications sur Service Mesh


Avertissement

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

  1. Connectez-vous au CLI de OpenShift Container Platform en tant qu'administrateur de cluster.
  2. À partir de l'interface de programmation, exécutez cette commande pour créer le ConfigMap nommé smcp-templates dans le projet openshift-operators et remplacez <templates-directory> par l'emplacement des fichiers ServiceMeshControlPlane sur votre disque local :

    oc create configmap --from-file=<templates-directory> smcp-templates -n openshift-operators
  3. 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

  4. 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
  5. 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
    ...
  6. Enregistrez vos modifications et quittez l'éditeur.
  7. Vous pouvez désormais utiliser le paramètre template dans le formulaire ServiceMeshControlPlane 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

  1. 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
  2. Ouvrez le fichier YAML de configuration du déploiement de l'application dans un éditeur.
  3. Ajoutez spec.template.metadata.annotations.sidecar.istio/inject à votre Deployment YAML et définissez sidecar.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'

  4. Enregistrer le fichier de configuration du déploiement.
  5. 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'application ratings-v1 et deployment-ratings-v1.yaml est le fichier que vous avez modifié.

    $ oc apply -n info -f deployment-ratings-v1.yaml
  6. 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\" }"

Avertissement

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).
Note

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

  1. Connectez-vous au CLI de OpenShift Container Platform.
  2. 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
  3. Si disablePolicyChecks: true, modifiez le ConfigMap du Service Mesh :

    $ oc edit cm -n <istio-system> istio
  4. Localisez disablePolicyChecks: true dans le ConfigMap et changez la valeur en false.
  5. Enregistrez la configuration et quittez l'éditeur.
  6. 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 microservices details et reviews 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 microservice ratings.
  • 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.
Note

L'application d'exemple Bookinfo ne peut pas être installée sur IBM zSystems et IBM Power.

Note

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

  1. 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.
  2. Cliquez sur Home Projects.
  3. Cliquez sur Create Project.
  4. 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
  5. Cliquez sur Operators Installed Operators.
  6. Cliquez sur le menu Project et utilisez l'espace de noms du plan de contrôle Service Mesh. Dans cet exemple, utilisez istio-system.
  7. Cliquez sur l'opérateur Red Hat OpenShift Service Mesh.
  8. Cliquez sur l'onglet Istio Service Mesh Member Roll.

    1. 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.
    2. Si vous n'avez pas créé de site ServiceMeshMemberRoll, cliquez sur Create ServiceMeshMemberRoll.
  9. Cliquez sur Members, puis saisissez le nom de votre projet dans le champ Value.
  10. Cliquez sur Create pour enregistrer la liste actualisée des membres du Service Mesh.

    1. 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

    2. Exécutez la commande suivante pour télécharger ce fichier et créer la ressource ServiceMeshMemberRoll dans l'espace de noms istio-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
  11. 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 est Configured.

    NAME      READY   STATUS       AGE   MEMBERS
    default   1/1     Configured   70s   ["info"]
  12. 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
  13. 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
  14. 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

  1. 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

  1. Connectez-vous au CLI de OpenShift Container Platform.
  2. 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
  3. Exécutez la commande suivante pour récupérer l'URL de la page produit :

    echo "http://$GATEWAY_URL/productpage"
  4. 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

  1. Obtenir l'adresse de la console web de Kiali.

    1. 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ôle dedicated-admin.
    2. Naviguez jusqu'à Networking Routes.
    3. 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.

    4. Cliquez sur le lien dans la colonne Location pour Kiali.
    5. Cliquez sur Log In With OpenShift. L'écran Kiali Overview présente des tuiles pour chaque espace de noms de projets.
  2. Dans Kiali, cliquez sur Graph.
  3. Sélectionnez info dans la liste Namespace et App graph dans la liste Graph Type.
  4. 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é.

    Kiali displaying info application
    • 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.
  5. 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

  1. Connectez-vous à la console web de OpenShift Container Platform.
  2. Cliquez sur Home Projects.
  3. Cliquez sur le menu info kebab puis cliquez sur Delete Project.
  4. 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

  1. Connectez-vous à la console web de OpenShift Container Platform.
  2. Cliquez sur Operators Installed Operators.
  3. Cliquez sur le menu Project et choisissez istio-system dans la liste.
  4. Cliquez sur le lien Istio Service Mesh Member Roll sous Provided APIS pour l'opérateur Red Hat OpenShift Service Mesh.
  5. Cliquez sur le menu ServiceMeshMemberRoll kebab et sélectionnez Edit Service Mesh Member Roll.
  6. 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 projet ServiceMeshMemberRoll. 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"'"]}]'
  7. 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

  1. 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.

  2. 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}')
      1. 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
  3. 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.
  4. 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.
  5. 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.
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.