

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Premiers pas avec AWS App Mesh Kubernetes
<a name="getting-started-kubernetes"></a>

**Important**  
Avis de fin de support : le 30 septembre 2026, AWS le support de. AWS App Mesh Après le 30 septembre 2026, vous ne pourrez plus accéder à la AWS App Mesh console ni aux AWS App Mesh ressources. Pour plus d'informations, consultez ce billet de blog [intitulé Migration from AWS App Mesh to Amazon ECS Service Connect](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-amazon-ecs-service-connect). 

Lorsque vous intégrez AWS App Mesh Kubernetes à l'aide du contrôleur App Mesh pour Kubernetes, vous gérez les ressources App Mesh, telles que les maillages, les services virtuels, les nœuds virtuels, les routeurs virtuels et les itinéraires via Kubernetes. Vous ajoutez également automatiquement les images du conteneur App Mesh aux spécifications du pod Kubernetes. Ce didacticiel vous guide tout au long de l'installation du contrôleur App Mesh pour Kubernetes afin de permettre cette intégration.

Le contrôleur est accompagné par le déploiement des définitions de ressources personnalisées Kubernetes suivantes : `meshes`, `virtual services`, `virtual nodes` et `virtual routers`. Le contrôleur surveille la création, la modification et la suppression des ressources personnalisées et apporte des modifications aux ressources App Mesh[Maillages de service](meshes.md),[Services virtuels](virtual_services.md),[Nœuds virtuels](virtual_nodes.md), [Passerelles virtuelles](virtual_gateways.md)[Routes de passerelle](gateway-routes.md), [Routeurs virtuels](virtual_routers.md) (y compris[Routes](routes.md)) correspondantes via l'API App Mesh. Pour en savoir plus ou contribuer au contrôleur, consultez le [GitHubprojet](https://github.com/aws/aws-app-mesh-controller-for-k8s).

Le contrôleur installe également un webhook qui injecte les conteneurs suivants dans les pods Kubernetes étiquetés avec un nom que vous spécifiez.
+ **Proxy App Mesh Envoy** — Envoy utilise la configuration définie dans le plan de contrôle App Mesh pour déterminer où envoyer le trafic de votre application. 
+ **Gestionnaire de routes proxy App Mesh** : met à jour `iptables` les règles de l'espace de noms réseau d'un pod qui acheminent le trafic entrant et sortant via Envoy. Ce conteneur fonctionne comme un conteneur init Kubernetes à l'intérieur du pod.

## Conditions préalables
<a name="mesh-k8s-integration-prerequisites"></a>
+ Compréhension existante des concepts de l'App Mesh. Pour de plus amples informations, veuillez consulter [Qu'est-ce que c'est AWS App Mesh ?](what-is-app-mesh.md).
+ Connaissances des concepts Kubernetes. Pour plus d'informations, consultez [Qu'est-ce que Kubernetes dans la documentation de Kubernetes](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/).
+ Un cluster Kubernetes existant. Si vous n'avez pas de cluster existant, consultez [Getting Started with Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) dans le *guide de l'utilisateur Amazon EKS*. Si vous utilisez votre propre cluster Kubernetes sur Amazon EC2, assurez-vous que Docker est authentifié auprès du référentiel Amazon ECR dans lequel se trouve l'image Envoy. Pour plus d'informations, consultez [l'image d'Envoy, l'](https://docs.aws.amazon.com/app-mesh/latest/userguide/envoy.html)[authentification du registre](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth) dans le guide de l'utilisateur d'Amazon Elastic Container Registry [et l'extraction d'une image d'un registre privé](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/) dans la documentation de Kubernetes.
+ App Mesh prend en charge les services Linux enregistrés auprès du DNS AWS Cloud Map, ou des deux. Pour utiliser ce guide de démarrage, nous vous recommandons d'avoir trois services existants enregistrés avec DNS. Les procédures décrites dans cette rubrique supposent que les services existants sont nommés `serviceA` `serviceBv2` et que tous les services sont détectables via un espace de noms nommé. `serviceB` `apps.local`

  Vous pouvez créer un maillage de service et ses ressources même si les services n'existent pas, mais vous ne pouvez pas utiliser le maillage tant que vous n'avez pas déployé des services réels.
+ La AWS CLI version 1.18.116 ou ultérieure ou 2.0.38 ou ultérieure est installée. Pour installer ou mettre à niveau le AWS CLI, reportez-vous à la section [Installation du AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html). 
+ Un client `kubectl` configuré pour communiquer avec votre cluster Kubernetes. Si vous utilisez Amazon Elastic Kubernetes Service, vous pouvez suivre les instructions d'installation et de configuration d'un fichier. `[kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)` `[kubeconfig](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html)`
+ Helm version 3.0 ou ultérieure installée. Si Helm n'est pas installé, consultez la section [Utilisation de Helm avec Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) dans le *guide de l'utilisateur Amazon EKS*.
+ Amazon EKS ne prend actuellement en charge `IPv6_ONLY` que `IPv4_ONLY` les préférences IP, car Amazon EKS ne prend actuellement en charge que les pods capables de traiter uniquement du `IPv4` trafic ou uniquement `IPv6` du trafic. 

Les étapes restantes supposent que les services réels sont nommés `serviceA`, `serviceB` et `serviceBv2`, et que tous les services peuvent être détectés via un espace de noms nommé `apps.local`.

## Étape 1 : Installer les composants d'intégration
<a name="install-controller"></a>

Installez les composants d'intégration une fois sur chaque cluster hébergeant les pods que vous souhaitez utiliser avec App Mesh.

**Pour installer les composants d'intégration**

1. Les étapes restantes de cette procédure nécessitent un cluster sans qu'une version préalable du contrôleur soit installée. Si vous avez installé une version préliminaire, ou si vous n'êtes pas certain de l'avoir fait, vous pouvez télécharger et exécuter un script qui vérifie si une version préliminaire est installée sur votre cluster.

   ```
   curl -o pre_upgrade_check.sh https://raw.githubusercontent.com/aws/eks-charts/master/stable/appmesh-controller/upgrade/pre_upgrade_check.sh
   sh ./pre_upgrade_check.sh
   ```

   Si le script retourne `Your cluster is ready for upgrade. Please proceed to the installation instructions`, vous pouvez passer à l'étape suivante. Si un autre message est renvoyé, vous devrez effectuer les étapes de mise à niveau avant de continuer. Pour plus d'informations sur la mise à niveau d'une version préliminaire, consultez la section [Mise à niveau](https://github.com/aws/eks-charts/blob/master/stable/appmesh-controller/README.md#upgrade) sur GitHub.

1. Ajoutez le référentiel `eks-charts` à Helm.

   ```
   helm repo add eks https://aws.github.io/eks-charts
   ```

1. Installez les définitions de ressources personnalisées (CRD) App Mesh Kubernetes.

   ```
   kubectl apply -k "https://github.com/aws/eks-charts/stable/appmesh-controller/crds?ref=master"
   ```

1. Créez un espace de noms Kubernetes pour le contrôleur.

   ```
   kubectl create ns appmesh-system
   ```

1. Définissez les variables suivantes à utiliser pour les étapes ultérieures. Remplacez `{{cluster-name}}` et `{{Region-code}}` par les valeurs de votre cluster existant.

   ```
   export CLUSTER_NAME={{cluster-name}}
   export AWS_REGION={{Region-code}}
   ```

1. (Facultatif) Si vous souhaitez exécuter le contrôleur sur Fargate, vous devez créer un profil Fargate. Si ce n'est pas le cas, consultez la section [Installation ou mise à niveau `eksctl`](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html#installing-eksctl) dans le *guide de l'utilisateur Amazon EKS*. `eksctl` Si vous préférez créer le profil à l'aide de la console, consultez la section [Création d'un profil Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html#create-fargate-profile) dans le guide de l'utilisateur *Amazon EKS*.

   ```
   eksctl create fargateprofile --cluster $CLUSTER_NAME --name {{appmesh-system}} --namespace {{appmesh-system}}
   ```

1. Créez un fournisseur d'identité OpenID Connect (OIDC) pour votre cluster. Si ce n'est pas le cas, vous pouvez l'installer en suivant les instructions de la section [Installation ou mise `eksctl` à niveau](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html#installing-eksctl) du *guide de l'utilisateur Amazon EKS*. `eksctl` Si vous préférez créer le fournisseur à l'aide de la console, consultez la section [Activation des rôles IAM pour les comptes de service de votre cluster](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) dans le *guide de l'utilisateur Amazon EKS*.

   ```
   eksctl utils associate-iam-oidc-provider \
       --region=$AWS_REGION \
       --cluster $CLUSTER_NAME \
       --approve
   ```

1. Créez un rôle IAM, associez-y les politiques [https://console.aws.amazon.com/iam/home?#policies/arn:aws:iam::aws:policy/AWSCloudMapFullAccess$jsonEditor](https://console.aws.amazon.com/iam/home?#policies/arn:aws:iam::aws:policy/AWSCloudMapFullAccess$jsonEditor) AWS gérées [https://console.aws.amazon.com/iam/home?#policies/arn:aws:iam::aws:policy/AWSAppMeshFullAccess$jsonEditor](https://console.aws.amazon.com/iam/home?#policies/arn:aws:iam::aws:policy/AWSAppMeshFullAccess$jsonEditor)et liez-le au compte de service `appmesh-controller` Kubernetes. Le rôle permet au contrôleur d'ajouter, de supprimer et de modifier des ressources App Mesh.
**Note**  
La commande crée un rôle AWS IAM avec un nom généré automatiquement. Vous ne pouvez pas spécifier le nom de rôle IAM créé.

   ```
   eksctl create iamserviceaccount \
       --cluster $CLUSTER_NAME \
       --namespace appmesh-system \
       --name appmesh-controller \
       --attach-policy-arn  arn:aws:iam::aws:policy/AWSCloudMapFullAccess,arn:aws:iam::aws:policy/AWSAppMeshFullAccess \
       --override-existing-serviceaccounts \
       --approve
   ```

   Si vous préférez créer le compte de service à l'aide du AWS Management Console ou AWS CLI, consultez la section [Création d'un rôle et d'une politique IAM pour votre compte de service](https://docs.aws.amazon.com/eks/latest/userguide/create-service-account-iam-policy-and-role.html#create-service-account-iam-role) dans le *guide de l'utilisateur Amazon EKS*. Si vous utilisez le AWS Management Console ou AWS CLI pour créer le compte, vous devez également associer le rôle à un compte de service Kubernetes. Pour plus d'informations, consultez la section [Spécification d'un rôle IAM pour votre compte de service](https://docs.aws.amazon.com/eks/latest/userguide/specify-service-account-role.html) dans le *guide de l'utilisateur Amazon EKS*. 

1. 

**Déployez le contrôleur App Mesh. Pour obtenir la liste de toutes les options de configuration, voir [Configuration](https://github.com/aws/eks-charts/blob/master/stable/appmesh-controller/README.md#configuration) activée GitHub.**

   1. Pour déployer le contrôleur App Mesh pour un cluster privé, vous devez d'abord activer les points de terminaison Amazon VPC App Mesh et Service Discovery sur le sous-réseau privé lié. Vous devez également définir le`accountId`.

      ```
      --set accountId=$AWS_ACCOUNT_ID
      ```

      Pour activer le suivi X-Ray dans un cluster privé, activez les points de terminaison Amazon VPC X-Ray et Amazon ECR. Le contrôleur l'utilise `public.ecr.aws/xray/aws-xray-daemon:latest` par défaut, alors extrayez cette image en local et [insérez-la dans votre référentiel ECR personnel](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html).
**Note**  
Les [points de terminaison Amazon VPC](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html) ne sont actuellement pas compatibles avec les référentiels publics Amazon ECR.

      L'exemple suivant montre le déploiement du contrôleur avec des configurations pour X-Ray.

      ```
      helm upgrade -i appmesh-controller eks/appmesh-controller \
          --namespace appmesh-system \
          --set region={{$AWS_REGION}} \
          --set serviceAccount.create=false \
          --set serviceAccount.name=appmesh-controller \
          --set accountId={{$AWS_ACCOUNT_ID}} \
          --set log.level=debug \
          --set tracing.enabled=true \
          --set tracing.provider=x-ray \
          --set xray.image.repository={{your-account-id}}.dkr.ecr.{{your-region}}.amazonaws.com/{{your-repository}} \
          --set xray.image.tag={{your-xray-daemon-image-tag}}
      ```

      Vérifiez si le daemon X-Ray est correctement injecté lorsque vous liez le déploiement de l'application à votre nœud virtuel ou à votre passerelle.

      Pour plus d'informations, consultez la section [Clusters privés](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html) dans le *guide de l'utilisateur Amazon EKS*.

   1. Déployez le contrôleur App Mesh pour d'autres clusters. Pour obtenir la liste de toutes les options de configuration, voir [Configuration](https://github.com/aws/eks-charts/blob/master/stable/appmesh-controller/README.md#configuration) activée GitHub.

      ```
      helm upgrade -i appmesh-controller eks/appmesh-controller \
          --namespace appmesh-system \
          --set region=$AWS_REGION \
          --set serviceAccount.create=false \
          --set serviceAccount.name=appmesh-controller
      ```
**Note**  
Si votre famille de clusters Amazon EKS l'est`IPv6`, veuillez définir le nom du cluster lors du déploiement du contrôleur App Mesh en ajoutant l'option suivante à la commande précédente`--set clusterName=$CLUSTER_NAME`.
**Important**  
Si votre cluster se trouve dans les `af-south-1` régions`me-south-1`,,,,,,,`ap-east-1`,,`ap-southeast-3`,,`eu-south-1`,,`il-central-1`,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,  
Remplacez {{account-id}} et {{Region-code}} par l'un des ensembles de valeurs appropriés.  

       ```
        --set image.repository={{account-id}}.dkr.ecr.{{Region-code}}.amazonaws.com/amazon/appmesh-controller
       ```
772975370895.dkr. ecr.me-south-1.amazonaws.com /:v1.34.13.0-prod aws-appmesh-envoy
856666278305.dkr. ecr.ap-east-1.amazonaws.com /:v1.34.13.0-prod aws-appmesh-envoy
909464085924.dkr. ecr.ap-southeast-3.amazonaws.com /:v1.34.13.0-prod aws-appmesh-envoy
422531588944.dkr. ecr.eu-south-1.amazonaws.com /:v1.34.13.0-prod aws-appmesh-envoy
564877687649.dkr. ecr.il-central-1.amazonaws.com /:v1.34.13.0-prod aws-appmesh-envoy
924023996002.dkr. ecr.af-south-1.amazonaws.com /:v1.34.13.0-prod aws-appmesh-envoy
L'ancienne image URIs se trouve dans le [journal des modifications](https://github.com/aws/aws-app-mesh-controller-for-k8s/releases) GitHub. Les AWS comptes sur lesquels les images sont présentes ont changé de version`v1.5.0`. Les anciennes versions des images sont hébergées sur des AWS comptes figurant dans les registres d'images de conteneurs Amazon Elastic Kubernetes [Service](https://docs.aws.amazon.com/eks/latest/userguide/add-ons-images.html) Amazon.

       ```
       --set sidecar.image.repository={{account-id}}.dkr.ecr.{{Region-code}}.amazonaws.com/aws-appmesh-envoy
       ```
772975370895.dkr.ecr.me-south-1.amazonaws. com/amazon/appmesh-contrôleur : v1.13.1
856666278305 .dkr.ecr.ap-east-1.amazonaws. com/amazon/appmesh-contrôleur : v1.13.1
909464085924.dkr.ecr.ap-southeast-3.amazonaws. com/amazon/appmesh-contrôleur : v1.13.1
422531588944.dkr.ecr.eu-south-1.amazonaws. com/amazon/appmesh-contrôleur : v1.13.1
564877687649.dkr.ecr.il-central-1.amazonaws. com/amazon/appmesh-contrôleur : v1.13.1
924023996002.dkr.ecr.af-south-1.amazonaws. com/amazon/appmesh-contrôleur : v1.13.1

       ```
       --set sidecar.image.repository={{account-id}}.dkr.ecr.{{Region-code}}.amazonaws.com/aws-appmesh-envoy
       ```
772975370895.dkr. ecr.me-south-1.amazonaws.com/-manager:v7-prod aws-appmesh-proxy-route
856666278305.dkr. ecr.ap-east-1.amazonaws.com/-manager:v7-prod aws-appmesh-proxy-route
909464085924.dkr. ecr.ap-southeast-3.amazonaws.com/-manager:v7-prod aws-appmesh-proxy-route
422531588944.dkr. ecr.eu-south-1.amazonaws.com/-manager:v7-prod aws-appmesh-proxy-route
564877687649.dkr. ecr.il-central-1.amazonaws.com/-manager:v7-prod aws-appmesh-proxy-route
924023996002.dkr. ecr.af-south-1.amazonaws.com/-manager:v7-prod aws-appmesh-proxy-route
**Important**  
Seule la version v1.9.0.0-prod ou ultérieure est prise en charge pour une utilisation avec App Mesh.

1. Vérifiez que la version du contrôleur est `v1.4.0` ou une version ultérieure. Vous pouvez consulter le [journal des modifications](https://github.com/aws/aws-app-mesh-controller-for-k8s/releases) GitHub.

   ```
   kubectl get deployment appmesh-controller \
       -n appmesh-system \
       -o json  | jq -r ".spec.template.spec.containers[].image" | cut -f2 -d ':'
   ```
**Note**  
Si vous affichez le journal du conteneur en cours d'exécution, une ligne contenant le texte suivant peut s'afficher. Vous pouvez l'ignorer en toute sécurité.  

   ```
   Neither -kubeconfig nor -master was specified. Using the inClusterConfig. This might not work.
   ```

## Étape 2 : Déployer les ressources App Mesh
<a name="configure-app-mesh"></a>

Lorsque vous déployez une application dans Kubernetes, vous créez également les ressources personnalisées Kubernetes afin que le contrôleur puisse créer les ressources App Mesh correspondantes. La procédure suivante vous aide à déployer des ressources App Mesh avec certaines de leurs fonctionnalités. Vous pouvez trouver des exemples de manifestes pour le déploiement d'autres fonctionnalités des ressources App Mesh dans les `v1beta2` sous-dossiers de nombreux dossiers de fonctionnalités répertoriés dans les procédures pas à pas d'[App Mesh sur.](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs) GitHub

**Important**  
Une fois que le contrôleur a créé une ressource App Mesh, nous vous recommandons de ne modifier ou de supprimer la ressource App Mesh qu'à l'aide du contrôleur. Si vous modifiez ou supprimez la ressource à l'aide d'App Mesh, le contrôleur ne modifiera ni ne recréera la ressource App Mesh modifiée ou supprimée pendant dix heures, par défaut. Vous pouvez configurer cette durée afin qu'elle soit inférieure. Pour plus d'informations, consultez [la section Configuration](https://github.com/aws/eks-charts/blob/master/stable/appmesh-controller/README.md#configuration) sur GitHub.

**Pour déployer des ressources App Mesh**

1. Créez un espace de noms Kubernetes dans lequel déployer les ressources App Mesh. 

   1. Enregistrez le contenu suivant dans un fichier nommé `namespace.yaml` sur votre ordinateur.

      ```
      apiVersion: v1
      kind: Namespace
      metadata:
        name: {{my-apps
      }}  labels:
          mesh: {{my-mesh}}
          appmesh.k8s.aws/sidecarInjectorWebhook: enabled
      ```

   1. Créez l'espace de noms.

      ```
      kubectl apply -f namespace.yaml
      ```

1. Créez un maillage de service App Mesh.

   1. Enregistrez le contenu suivant dans un fichier nommé `mesh.yaml` sur votre ordinateur. Le fichier est utilisé pour créer une ressource de maillage nommée`{{my-mesh}}`. Un maillage de service est une limite logique pour le trafic réseau entre les services qui résident dans celui-ci.

      ```
      apiVersion: appmesh.k8s.aws/v1beta2
      kind: Mesh
      metadata:
        name: {{my-mesh}}
      spec:
        namespaceSelector:
          matchLabels:
            mesh: {{my-mesh}}
      ```

   1. Créez le maillage.

      ```
      kubectl apply -f mesh.yaml
      ```

   1. Affichez les détails de la ressource de maillage Kubernetes créée.

      ```
      kubectl describe mesh {{my-mesh}}
      ```

      Output

      ```
      Name:         my-mesh
      Namespace:
      Labels:       <none>
      Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                      {"apiVersion":"appmesh.k8s.aws/v1beta2","kind":"Mesh","metadata":{"annotations":{},"name":"my-mesh"},"spec":{"namespaceSelector":{"matchLa...
      API Version:  appmesh.k8s.aws/v1beta2
      Kind:         Mesh
      Metadata:
        Creation Timestamp:  2020-06-17T14:51:37Z
        Finalizers:
          finalizers.appmesh.k8s.aws/mesh-members
          finalizers.appmesh.k8s.aws/aws-appmesh-resources
        Generation:        1
        Resource Version:  6295
        Self Link:         /apis/appmesh.k8s.aws/v1beta2/meshes/my-mesh
        UID:               111a11b1-c11d-1e1f-gh1i-j11k1l111m711
      Spec:
        Aws Name:  my-mesh
        Namespace Selector:
          Match Labels:
            Mesh:  my-mesh
      Status:
        Conditions:
          Last Transition Time:  2020-06-17T14:51:37Z
          Status:                True
          Type:                  MeshActive
        Mesh ARN:                arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh
        Observed Generation:     1
      Events:                    <none>
      ```

   1. Consultez les détails du maillage de service App Mesh créé par le contrôleur.

      ```
      aws appmesh describe-mesh --mesh-name {{my-mesh}}
      ```

      Output

      ```
      {
          "mesh": {
              "meshName": "my-mesh",
              "metadata": {
                  "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh",
                  "createdAt": "2020-06-17T09:51:37.920000-05:00",
                  "lastUpdatedAt": "2020-06-17T09:51:37.920000-05:00",
                  "meshOwner": "111122223333",
                  "resourceOwner": "111122223333",
                  "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711",
                  "version": 1
              },
              "spec": {},
              "status": {
                  "status": "ACTIVE"
              }
          }
      }
      ```

1. Créez un nœud virtuel App Mesh. Un nœud virtuel agit comme un pointeur logique vers un déploiement Kubernetes.

   1. Enregistrez le contenu suivant dans un fichier nommé `virtual-node.yaml` sur votre ordinateur. Le fichier est utilisé pour créer un nœud virtuel App Mesh nommé `{{my-service-a}}` dans l'espace de {{`my-apps`}} noms. Le nœud virtuel représente un service Kubernetes créé dans une étape ultérieure. La valeur de `hostname` est le nom d'hôte DNS complet du service réel que ce nœud virtuel représente.

      ```
      apiVersion: appmesh.k8s.aws/v1beta2
      kind: VirtualNode
      metadata:
        name: {{my-service-a}}
        namespace: {{my-apps}}
      spec:
        podSelector:
          matchLabels:
            app: {{my-app-1}}
        listeners:
          - portMapping:
              port: {{80}}
              protocol: {{http}}
        serviceDiscovery:
          dns:
            hostname: {{my-service-a.my-apps.svc.cluster.local}}
      ```

      Les nœuds virtuels possèdent des fonctionnalités, telles que le end-to-end chiffrement et les contrôles de santé, qui ne sont pas abordées dans ce didacticiel. Pour de plus amples informations, veuillez consulter [Nœuds virtuels](virtual_nodes.md). Pour afficher tous les paramètres disponibles pour un nœud virtuel que vous pouvez définir dans la spécification précédente, exécutez la commande suivante.

      ```
      aws appmesh create-virtual-node --generate-cli-skeleton yaml-input
      ```

   1. Déployez le nœud virtuel.

      ```
      kubectl apply -f virtual-node.yaml
      ```

   1. Affichez les détails de la ressource de nœud virtuel Kubernetes créée.

      ```
      kubectl describe virtualnode {{my-service-a}} -n {{my-apps}}
      ```

      Output

      ```
      Name:         my-service-a
      Namespace:    my-apps
      Labels:       <none>
      Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                      {"apiVersion":"appmesh.k8s.aws/v1beta2","kind":"VirtualNode","metadata":{"annotations":{},"name":"my-service-a","namespace":"my-apps"},"s...
      API Version:  appmesh.k8s.aws/v1beta2
      Kind:         VirtualNode
      Metadata:
        Creation Timestamp:  2020-06-17T14:57:29Z
        Finalizers:
          finalizers.appmesh.k8s.aws/aws-appmesh-resources
        Generation:        2
        Resource Version:  22545
        Self Link:         /apis/appmesh.k8s.aws/v1beta2/namespaces/my-apps/virtualnodes/my-service-a
        UID:               111a11b1-c11d-1e1f-gh1i-j11k1l111m711
      Spec:
        Aws Name:  my-service-a_my-apps
        Listeners:
          Port Mapping:
            Port:      80
            Protocol:  http
        Mesh Ref:
          Name:  my-mesh
          UID:   111a11b1-c11d-1e1f-gh1i-j11k1l111m711
        Pod Selector:
          Match Labels:
            App:  nginx
        Service Discovery:
          Dns:
            Hostname:  my-service-a.my-apps.svc.cluster.local
      Status:
        Conditions:
          Last Transition Time:  2020-06-17T14:57:29Z
          Status:                True
          Type:                  VirtualNodeActive
        Observed Generation:     2
        Virtual Node ARN:        arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualNode/my-service-a_my-apps
      Events:                    <none>
      ```

   1. Affichez les détails du nœud virtuel créé par le contrôleur dans App Mesh.
**Note**  
Même si le nom du nœud virtuel créé dans Kubernetes est `{{my-service-a}}`, le nom du nœud virtuel créé dans App Mesh est `{{my-service-a_my-apps}}`. Le contrôleur ajoute le nom de l'espace de noms Kubernetes au nom du nœud virtuel App Mesh lorsqu'il crée la ressource App Mesh. Le nom de l'espace de noms est ajouté car dans Kubernetes, vous pouvez créer des nœuds virtuels portant le même nom dans différents espaces de noms, mais dans App Mesh, le nom d'un nœud virtuel doit être unique au sein d'un maillage.

      ```
      aws appmesh describe-virtual-node --mesh-name {{my-mesh}} --virtual-node-name {{my-service-a_my-apps}}
      ```

      Output

      ```
      {
          "virtualNode": {
              "meshName": "my-mesh",
              "metadata": {
                  "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualNode/my-service-a_my-apps",
                  "createdAt": "2020-06-17T09:57:29.840000-05:00",
                  "lastUpdatedAt": "2020-06-17T09:57:29.840000-05:00",
                  "meshOwner": "111122223333",
                  "resourceOwner": "111122223333",
                  "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711",
                  "version": 1
              },
              "spec": {
                  "backends": [],
                  "listeners": [
                      {
                          "portMapping": {
                              "port": 80,
                              "protocol": "http"
                          }
                      }
                  ],
                  "serviceDiscovery": {
                      "dns": {
                          "hostname": "my-service-a.my-apps.svc.cluster.local"
                      }
                  }
              },
              "status": {
                  "status": "ACTIVE"
              },
              "virtualNodeName": "my-service-a_my-apps"
          }
      }
      ```

1. Créez un routeur virtuel App Mesh. Les routeurs virtuels gèrent le trafic d'un ou de plusieurs services virtuels au sein de votre mesh.

   1. Enregistrez le contenu suivant dans un fichier nommé `virtual-router.yaml` sur votre ordinateur. Le fichier est utilisé pour créer un routeur virtuel afin d'acheminer le trafic vers le nœud virtuel nommé `my-service-a` qui a été créé à l'étape précédente. Le contrôleur crée le routeur virtuel App Mesh et achemine les ressources. Vous pouvez spécifier beaucoup d'autres fonctionnalités pour vos routages et utiliser des protocoles autres que `http`. Pour plus d’informations, consultez [Routeurs virtuels](virtual_routers.md) et [Routes](routes.md). Notez que le nom du nœud virtuel référencé est le nom du nœud virtuel Kubernetes, et non le nom du nœud virtuel App Mesh créé dans App Mesh par le contrôleur.

      ```
      apiVersion: appmesh.k8s.aws/v1beta2
      kind: VirtualRouter
      metadata:
        namespace: {{my-apps}}
        name: {{my-service-a-virtual-router}}
      spec:
        listeners:
          - portMapping:
              port: {{80
      }}        protocol: {{http}}
        routes:
          - name: {{my-service-a-route}}
            httpRoute:
              match:
                prefix: {{/}}
              action:
                weightedTargets:
                  - virtualNodeRef:
                      name: {{my-service-a}}
                    weight: {{1}}
      ```

      (Facultatif) Pour voir tous les paramètres disponibles pour un routeur virtuel que vous pouvez définir dans la spécification précédente, exécutez la commande suivante.

      ```
      aws appmesh create-virtual-router --generate-cli-skeleton yaml-input
      ```

      Pour voir tous les paramètres disponibles pour un itinéraire que vous pouvez définir dans la spécification précédente, exécutez la commande suivante.

      ```
      aws appmesh create-route --generate-cli-skeleton yaml-input
      ```

   1. Déployez le routeur virtuel.

      ```
      kubectl apply -f virtual-router.yaml
      ```

   1. Affichez la ressource de routeur virtuel Kubernetes qui a été créée.

      ```
      kubectl describe virtualrouter {{my-service-a-virtual-router}} -n {{my-apps}}
      ```

      Sortie abrégée

      ```
      Name:         my-service-a-virtual-router
      Namespace:    my-apps
      Labels:       <none>
      Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                      {"apiVersion":"appmesh.k8s.aws/v1beta2","kind":"VirtualRouter","metadata":{"annotations":{},"name":"my-service-a-virtual-router","namespac...
      API Version:  appmesh.k8s.aws/v1beta2
      Kind:         VirtualRouter
      ...
      Spec:
        Aws Name:  my-service-a-virtual-router_my-apps
        Listeners:
          Port Mapping:
            Port:      80
            Protocol:  http
        Mesh Ref:
          Name:  my-mesh
          UID:   111a11b1-c11d-1e1f-gh1i-j11k1l111m711
        Routes:
          Http Route:
            Action:
              Weighted Targets:
                Virtual Node Ref:
                  Name:  my-service-a
                Weight:  1
            Match:
              Prefix:  /
          Name:        my-service-a-route
      Status:
        Conditions:
          Last Transition Time:  2020-06-17T15:14:01Z
          Status:                True
          Type:                  VirtualRouterActive
        Observed Generation:     1
        Route AR Ns:
          My - Service - A - Route:  arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualRouter/my-service-a-virtual-router_my-apps/route/my-service-a-route
        Virtual Router ARN:          arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualRouter/my-service-a-virtual-router_my-apps
      Events:                        <none>
      ```

   1. Affichez la ressource de routeur virtuel créée par le contrôleur dans App Mesh. Vous spécifiez `my-service-a-virtual-router_my-apps` pour`name`, car lorsque le contrôleur a créé le routeur virtuel dans App Mesh, il a ajouté le nom de l'espace de noms Kubernetes au nom du routeur virtuel.

      ```
      aws appmesh describe-virtual-router --virtual-router-name {{my-service-a-virtual-router_my-apps}} --mesh-name {{my-mesh}}
      ```

      Output

      ```
      {
          "virtualRouter": {
              "meshName": "my-mesh",
              "metadata": {
                  "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualRouter/my-service-a-virtual-router_my-apps",
                  "createdAt": "2020-06-17T10:14:01.547000-05:00",
                  "lastUpdatedAt": "2020-06-17T10:14:01.547000-05:00",
                  "meshOwner": "111122223333",
                  "resourceOwner": "111122223333",
                  "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711",
                  "version": 1
              },
              "spec": {
                  "listeners": [
                      {
                          "portMapping": {
                              "port": 80,
                              "protocol": "http"
                          }
                      }
                  ]
              },
              "status": {
                  "status": "ACTIVE"
              },
              "virtualRouterName": "my-service-a-virtual-router_my-apps"
          }
      }
      ```

   1. Affichez la ressource d'itinéraire créée par le contrôleur dans App Mesh. Une ressource de route n'a pas été créée dans Kubernetes car la route fait partie de la configuration du routeur virtuel dans Kubernetes. Les informations de route ont été affichées dans le détail de la ressource Kubernetes dans la sous-étape `c`. Le contrôleur n'a pas ajouté le nom de l'espace de noms Kubernetes au nom de l'itinéraire App Mesh lorsqu'il a créé l'itinéraire dans App Mesh, car les noms des itinéraires sont uniques à un routeur virtuel.

      ```
      aws appmesh {{describe-route}} \
          --route-name {{my-service-a-route}} \
          --virtual-router-name {{my-service-a-virtual-router_my-apps}} \
          --mesh-name {{my-mesh}}
      ```

      Output

      ```
      {
          "route": {
              "meshName": "my-mesh",
              "metadata": {
                  "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualRouter/my-service-a-virtual-router_my-apps/route/my-service-a-route",
                  "createdAt": "2020-06-17T10:14:01.577000-05:00",
                  "lastUpdatedAt": "2020-06-17T10:14:01.577000-05:00",
                  "meshOwner": "111122223333",
                  "resourceOwner": "111122223333",
                  "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711",
                  "version": 1
              },
              "routeName": "my-service-a-route",
              "spec": {
                  "httpRoute": {
                      "action": {
                          "weightedTargets": [
                              {
                                  "virtualNode": "my-service-a_my-apps",
                                  "weight": 1
                              }
                          ]
                      },
                      "match": {
                          "prefix": "/"
                      }
                  }
              },
              "status": {
                  "status": "ACTIVE"
              },
              "virtualRouterName": "my-service-a-virtual-router_my-apps"
          }
      }
      ```

1. Créez un service virtuel App Mesh. Un service virtuel est une abstraction d'un service réel qui est fournie directement ou indirectement par un nœud virtuel, via un routeur virtuel. Les services dépendants appellent votre service virtuel par son nom. Bien que le nom n'ait pas d'importance pour App Mesh, nous recommandons de nommer le service virtuel comme le nom de domaine complet du service réel que le service virtuel représente. En nommant vos services virtuels de cette façon, vous n'avez pas besoin de modifier votre code d'application pour référencer un autre nom. Ces demandes sont acheminées vers le nœud virtuel ou le routeur virtuel qui est spécifié en tant que fournisseur pour le service virtuel.

   1. Enregistrez le contenu suivant dans un fichier nommé `virtual-service.yaml` sur votre ordinateur. Le fichier est utilisé pour créer un service virtuel qui utilise un fournisseur de routeur virtuel pour acheminer le trafic vers le nœud virtuel nommé `my-service-a` qui a été créé à l'étape précédente. La valeur de `awsName` dans le `spec` correspond au nom de domaine complet (FQDN) du service Kubernetes réel que ce service virtuel résume. Le service Kubernetes est créé dans [Étape 3 : Créer ou mettre à jour des services](#create-update-services). Pour de plus amples informations, veuillez consulter [Services virtuels](virtual_services.md).

      ```
      apiVersion: appmesh.k8s.aws/v1beta2
      kind: VirtualService
      metadata:
        name: {{my-service-a}}
        namespace: {{my-apps}}
      spec:
        awsName: {{my-service-a.my-apps.svc.cluster.local}}
        provider:
          virtualRouter:
            virtualRouterRef:
              name: {{my-service-a-virtual-router}}
      ```

      Pour afficher tous les paramètres disponibles pour un nœud virtuel que vous pouvez définir dans la spécification précédente, exécutez la commande suivante.

      ```
      aws appmesh create-virtual-service --generate-cli-skeleton yaml-input
      ```

   1. Créez le service virtuel.

      ```
      kubectl apply -f virtual-service.yaml
      ```

   1. Affichez les détails de la ressource de service virtuel Kubernetes créée.

      ```
      kubectl describe virtualservice {{my-service-a}} -n {{my-apps}}
      ```

      Output

      ```
      Name:         my-service-a
      Namespace:    my-apps
      Labels:       <none>
      Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                      {"apiVersion":"appmesh.k8s.aws/v1beta2","kind":"VirtualService","metadata":{"annotations":{},"name":"my-service-a","namespace":"my-apps"}...
      API Version:  appmesh.k8s.aws/v1beta2
      Kind:         VirtualService
      Metadata:
        Creation Timestamp:  2020-06-17T15:48:40Z
        Finalizers:
          finalizers.appmesh.k8s.aws/aws-appmesh-resources
        Generation:        1
        Resource Version:  13598
        Self Link:         /apis/appmesh.k8s.aws/v1beta2/namespaces/my-apps/virtualservices/my-service-a
        UID:               111a11b1-c11d-1e1f-gh1i-j11k1l111m711
      Spec:
        Aws Name:  my-service-a.my-apps.svc.cluster.local
        Mesh Ref:
          Name:  my-mesh
          UID:   111a11b1-c11d-1e1f-gh1i-j11k1l111m711
        Provider:
          Virtual Router:
            Virtual Router Ref:
              Name:  my-service-a-virtual-router
      Status:
        Conditions:
          Last Transition Time:  2020-06-17T15:48:40Z
          Status:                True
          Type:                  VirtualServiceActive
        Observed Generation:     1
        Virtual Service ARN:     arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualService/my-service-a.my-apps.svc.cluster.local
      Events:                    <none>
      ```

   1. Affichez les détails de la ressource de service virtuel créée par le contrôleur dans App Mesh. Le contrôleur Kubernetes n'a pas ajouté le nom de l'espace de noms Kubernetes au nom du service virtuel App Mesh lorsqu'il a créé le service virtuel dans App Mesh, car le nom du service virtuel est un FQDN unique.

      ```
      aws appmesh describe-virtual-service --virtual-service-name {{my-service-a.my-apps.svc.cluster.local}} --mesh-name {{my-mesh}}
      ```

      Output

      ```
      {
          "virtualService": {
              "meshName": "my-mesh",
              "metadata": {
                  "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualService/my-service-a.my-apps.svc.cluster.local",
                  "createdAt": "2020-06-17T10:48:40.182000-05:00",
                  "lastUpdatedAt": "2020-06-17T10:48:40.182000-05:00",
                  "meshOwner": "111122223333",
                  "resourceOwner": "111122223333",
                  "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711",
                  "version": 1
              },
              "spec": {
                  "provider": {
                      "virtualRouter": {
                          "virtualRouterName": "my-service-a-virtual-router_my-apps"
                      }
                  }
              },
              "status": {
                  "status": "ACTIVE"
              },
              "virtualServiceName": "my-service-a.my-apps.svc.cluster.local"
          }
      }
      ```

Bien que cela ne soit pas abordé dans ce didacticiel, le contrôleur peut également déployer App Mesh [Passerelles virtuelles](virtual_gateways.md) et[Routes de passerelle](gateway-routes.md). Pour une présentation détaillée du déploiement de ces ressources avec le contrôleur, voir [Configuration de la passerelle entrante](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-ingress-gateway) ou un [exemple de manifeste](https://github.com/aws/aws-app-mesh-examples/blob/main/walkthroughs/howto-k8s-ingress-gateway/v1beta2/manifest.yaml.template) incluant les ressources sur. GitHub

## Étape 3 : Créer ou mettre à jour des services
<a name="create-update-services"></a>

Les conteneurs annexes App Mesh doivent être ajoutés à tous les pods que vous souhaitez utiliser avec App Mesh. L'injecteur ajoute automatiquement les conteneurs sidecar à n'importe quel pod déployé dans un espace de noms avec l'étiquette que vous spécifiez.

1. Activez l'autorisation proxy. Nous vous recommandons d'activer chaque déploiement Kubernetes pour diffuser uniquement la configuration de son propre nœud virtuel App Mesh.

   1. Enregistrez le contenu suivant dans un fichier nommé `proxy-auth.json` sur votre ordinateur. Assurez-vous de le remplacer {{alternate-colored values}} par le vôtre.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "appmesh:StreamAggregatedResources",
                  "Resource": [
                      "arn:aws:appmesh:{{us-east-1}}:{{111122223333}}:mesh/my-mesh/virtualNode/my-service-a_my-apps"
                  ]
              }
          ]
      }
      ```

------

   1. Créez la politique.

      ```
      aws iam create-policy --policy-name {{my-policy}} --policy-document file://proxy-auth.json
      ```

   1. Créez un rôle IAM, associez-y la politique que vous avez créée à l'étape précédente, créez un compte de service Kubernetes et liez la politique au compte de service Kubernetes. Le rôle permet au contrôleur d'ajouter, de supprimer et de modifier des ressources App Mesh.

      ```
      eksctl create iamserviceaccount \
          --cluster $CLUSTER_NAME \
          --namespace {{my-apps}} \
          --name {{my-service-a}} \
          --attach-policy-arn  arn:aws:iam::{{111122223333}}:policy/{{my-policy}} \
          --override-existing-serviceaccounts \
          --approve
      ```

      Si vous préférez créer le compte de service à l'aide du AWS Management Console ou AWS CLI, consultez la section [Création d'un rôle et d'une politique IAM pour votre compte de service](https://docs.aws.amazon.com/eks/latest/userguide/create-service-account-iam-policy-and-role.html#create-service-account-iam-role) dans le *guide de l'utilisateur Amazon EKS*. Si vous utilisez le AWS Management Console ou AWS CLI pour créer le compte, vous devez également associer le rôle à un compte de service Kubernetes. Pour plus d'informations, consultez la section [Spécification d'un rôle IAM pour votre compte de service](https://docs.aws.amazon.com/eks/latest/userguide/specify-service-account-role.html) dans le *guide de l'utilisateur Amazon EKS*.

1. (Facultatif) Si vous souhaitez déployer votre déploiement sur des pods Fargate, vous devez créer un profil Fargate. Si ce n'est pas le cas, vous pouvez l'installer en suivant les instructions de la section [Installation ou mise `eksctl` à niveau](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html#installing-eksctl) du *guide de l'utilisateur Amazon EKS*. `eksctl` Si vous préférez créer le profil à l'aide de la console, consultez la section [Création d'un profil Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html#create-fargate-profile) dans le guide de l'utilisateur *Amazon EKS*.

   ```
   eksctl create fargateprofile --cluster {{my-cluster}} --region {{Region-code}} --name {{my-service-a}} --namespace {{my-apps}}
   ```

1. Créez un service et un déploiement Kubernetes. Si vous avez un déploiement existant que vous souhaitez utiliser avec App Mesh, vous devez déployer un nœud virtuel, comme vous l'avez fait à la sous-étape `3` de[Étape 2 : Déployer les ressources App Mesh](#configure-app-mesh). Mettez à jour votre déploiement pour vous assurer que son étiquette correspond à celle que vous avez définie sur le nœud virtuel, afin que les conteneurs annexes soient automatiquement ajoutés aux pods et que les pods soient redéployés.

   1. Enregistrez le contenu suivant dans un fichier nommé `example-service.yaml` sur votre ordinateur. Si vous modifiez le nom de l'espace de noms et que vous utilisez des pods Fargate, assurez-vous que le nom de l'espace de noms correspond à celui défini dans votre profil Fargate.

      ```
      apiVersion: v1
      kind: Service
      metadata:
        name: {{my-service-a}}
        namespace: {{my-apps}}
        labels:
          app: {{my-app-1}}
      spec:
        selector:
          app: {{my-app-1}}
        ports:
          - protocol: {{TCP}}
            port: {{80}}
            targetPort: {{80}}
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: {{my-service-a}}
        namespace: {{my-apps}}
        labels:
          app: {{my-app-1}}
      spec:
        replicas: {{3}}
        selector:
          matchLabels:
            app: {{my-app-1}}
        template:
          metadata:
            labels:
              app: {{my-app-1}}
          spec:
            serviceAccountName: {{my-service-a}}
            containers:
            - name: {{nginx}}
              image: {{nginx:1.19.0}}
              ports:
              - containerPort: {{80}}
      ```
**Important**  
La valeur de la spécification `app` `matchLabels` `selector` dans la spécification doit correspondre à la valeur que vous avez spécifiée lors de la création du nœud virtuel dans la sous-étape `3` de [Étape 2 : Déployer les ressources App Mesh](#configure-app-mesh), sinon les conteneurs sidecar ne seront pas injectés dans le conteneur. Dans l'exemple précédent, la valeur de l'étiquette est `my-app-1`. Si vous déployez une passerelle virtuelle plutôt qu'un nœud virtuel, le `Deployment` manifeste ne doit inclure que le conteneur Envoy. Pour plus d'informations sur l'image à utiliser, consultez[Image de l'envoyé](envoy.md). Pour un exemple de manifeste, consultez l'[exemple de déploiement](https://github.com/aws/aws-app-mesh-examples/blob/main/walkthroughs/howto-k8s-ingress-gateway/v1beta2/manifest.yaml.template#L585) sur GitHub.

   1. Déployez le service.

      ```
      kubectl apply -f {{example-service.yaml}}
      ```

   1. Consultez le service et le déploiement.

      ```
      kubectl -n {{my-apps}} get pods
      ```

      Output

      ```
      NAME                            READY   STATUS    RESTARTS   AGE
      my-service-a-54776556f6-2cxd9   2/2     Running   0          10s
      my-service-a-54776556f6-w26kf   2/2     Running   0          18s
      my-service-a-54776556f6-zw5kt   2/2     Running   0          26s
      ```

   1. Consultez les détails de l'un des pods qui a été déployé.

      ```
      kubectl -n {{my-apps}} describe pod {{my-service-a-54776556f6-2cxd9}}
      ```

      Sortie abrégée

      ```
      Name:         my-service-a-54776556f6-2cxd9
      Namespace:    my-app-1
      Priority:     0
      Node:         ip-192-168-44-157.us-west-2.compute.internal/192.168.44.157
      Start Time:   Wed, 17 Jun 2020 11:08:59 -0500
      Labels:       app=nginx
                    pod-template-hash=54776556f6
      Annotations:  kubernetes.io/psp: eks.privileged
      Status:       Running
      IP:           192.168.57.134
      IPs:
        IP:           192.168.57.134
      Controlled By:  ReplicaSet/my-service-a-54776556f6
      Init Containers:
        proxyinit:
          Container ID:   docker://e0c4810d584c21ae0cb6e40f6119d2508f029094d0e01c9411c6cf2a32d77a59
          Image:          111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-proxy-route-manager:v2
          Image ID:       docker-pullable://111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-proxy-route-manager
          Port:           <none>
          Host Port:      <none>
          State:          Terminated
            Reason:       Completed
            Exit Code:    0
            Started:      Fri, 26 Jun 2020 08:36:22 -0500
            Finished:     Fri, 26 Jun 2020 08:36:22 -0500
          Ready:          True
          Restart Count:  0
          Requests:
            cpu:     10m
            memory:  32Mi
          Environment:
            APPMESH_START_ENABLED:         1
            APPMESH_IGNORE_UID:            1337
            APPMESH_ENVOY_INGRESS_PORT:    15000
            APPMESH_ENVOY_EGRESS_PORT:     15001
            APPMESH_APP_PORTS:             80
            APPMESH_EGRESS_IGNORED_IP:     169.254.169.254
            APPMESH_EGRESS_IGNORED_PORTS:  22
            AWS_ROLE_ARN:                  arn:aws:iam::111122223333:role/eksctl-app-mesh-addon-iamserviceaccount-my-a-Role1-NMNCVWB6PL0N
            AWS_WEB_IDENTITY_TOKEN_FILE:   /var/run/secrets/eks.amazonaws.com/serviceaccount/token
          ...
      Containers:
        nginx:
          Container ID:   docker://be6359dc6ecd3f18a1c87df7b57c2093e1f9db17d5b3a77f22585ce3bcab137a
          Image:          nginx:1.19.0
          Image ID:       docker-pullable://nginx
          Port:           80/TCP
          Host Port:      0/TCP
          State:          Running
            Started:      Fri, 26 Jun 2020 08:36:28 -0500
          Ready:          True
          Restart Count:  0
          Environment:
            AWS_ROLE_ARN:                 arn:aws:iam::111122223333:role/eksctl-app-mesh-addon-iamserviceaccount-my-a-Role1-NMNCVWB6PL0N
            AWS_WEB_IDENTITY_TOKEN_FILE:  /var/run/secrets/eks.amazonaws.com/serviceaccount/token
          ...
        envoy:
          Container ID:   docker://905b55cbf33ef3b3debc51cb448401d24e2e7c2dbfc6a9754a2c49dd55a216b6
          Image:          840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.12.4.0-prod
          Image ID:       docker-pullable://840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy
          Port:           9901/TCP
          Host Port:      0/TCP
          State:          Running
            Started:      Fri, 26 Jun 2020 08:36:36 -0500
          Ready:          True
          Restart Count:  0
          Requests:
            cpu:     10m
            memory:  32Mi
          Environment:
            APPMESH_RESOURCE_ARN:         arn:aws:iam::111122223333:mesh/my-mesh/virtualNode/my-service-a_my-apps
            APPMESH_PREVIEW:              0
            ENVOY_LOG_LEVEL:              info
            AWS_REGION:                   us-west-2
            AWS_ROLE_ARN:                 arn:aws:iam::111122223333:role/eksctl-app-mesh-addon-iamserviceaccount-my-a-Role1-NMNCVWB6PL0N
            AWS_WEB_IDENTITY_TOKEN_FILE:  /var/run/secrets/eks.amazonaws.com/serviceaccount/token
      ...
      Events:
        Type    Reason     Age   From                                                   Message
        ----    ------     ----  ----                                                   -------
        Normal  Pulling    30s   kubelet, ip-192-168-44-157.us-west-2.compute.internal  Pulling image "111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-proxy-route-manager:v2"
        Normal  Pulled     23s   kubelet, ip-192-168-44-157.us-west-2.compute.internal  Successfully pulled image "111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-proxy-route-manager:v2"
        Normal  Created    21s   kubelet, ip-192-168-44-157.us-west-2.compute.internal  Created container proxyinit
        Normal  Started    21s   kubelet, ip-192-168-44-157.us-west-2.compute.internal  Started container proxyinit
        Normal  Pulling    20s   kubelet, ip-192-168-44-157.us-west-2.compute.internal  Pulling image "nginx:1.19.0"
        Normal  Pulled     16s   kubelet, ip-192-168-44-157.us-west-2.compute.internal  Successfully pulled image "nginx:1.19.0"
        Normal  Created    15s   kubelet, ip-192-168-44-157.us-west-2.compute.internal  Created container nginx
        Normal  Started    15s   kubelet, ip-192-168-44-157.us-west-2.compute.internal  Started container nginx
        Normal  Pulling    15s   kubelet, ip-192-168-44-157.us-west-2.compute.internal  Pulling image "840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.12.4.0-prod"
        Normal  Pulled     8s    kubelet, ip-192-168-44-157.us-west-2.compute.internal  Successfully pulled image "840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.12.4.0-prod"
        Normal  Created    7s    kubelet, ip-192-168-44-157.us-west-2.compute.internal  Created container envoy
        Normal  Started    7s    kubelet, ip-192-168-44-157.us-west-2.compute.internal  Started container envoy
      ```

      Dans la sortie précédente, vous pouvez voir que les conteneurs `proxyinit` et `envoy` ont été ajoutés au pod. Si vous avez déployé l'exemple de service sur Fargate, `envoy` le conteneur a été ajouté au pod par le contrôleur, mais pas `proxyinit` le conteneur.

1. (Facultatif) Installez des modules complémentaires tels que Prometheus, Grafana, Jaeger et AWS X-Ray Datadog. Pour plus d'informations, consultez les [modules complémentaires App Mesh](https://github.com/aws/eks-charts#app-mesh-add-ons) GitHub et la section [Observabilité](https://docs.aws.amazon.com/app-mesh/latest/userguide/observability.html) du guide de l'utilisateur d'App Mesh. 

**Note**  
Pour plus d'exemples et de procédures pas à pas pour App Mesh, consultez le référentiel d'[exemples d'App Mesh](https://github.com/aws/aws-app-mesh-examples).

## Étape 4 : nettoyer
<a name="remove-integration"></a>

Supprimez toutes les ressources d'exemple créées dans ce didacticiel. Le contrôleur supprime également les ressources créées dans le maillage du service `my-mesh` App Mesh.

```
kubectl delete namespace {{my-apps}}
```

Si vous avez créé un profil Fargate pour le service d'exemple, supprimez-le.

```
eksctl delete fargateprofile --name {{my-service-a}} --cluster {{my-cluster}} --region {{Region-code}}
```

Supprimez le maillage.

```
kubectl delete mesh {{my-mesh}}
```

(Facultatif) Vous pouvez supprimer les composants d'intégration Kubernetes.

```
helm delete appmesh-controller -n appmesh-system
```

(Facultatif) Si vous avez déployé les composants d'intégration Kubernetes sur Fargate, supprimez le profil Fargate.

```
eksctl delete fargateprofile --name {{appmesh-system}} --cluster {{my-cluster}} --region {{Region-code}}
```