Résolution des problèmes liés à la configuration d'App Mesh - AWS App Mesh

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.

Résolution des problèmes liés à la configuration d'App Mesh

Cette rubrique décrit les problèmes courants que vous pouvez rencontrer lors de la configuration d'App Mesh.

Impossible d'extraire l'image du conteneur Envoy

Symptômes

Vous recevez le message d'erreur suivant dans une tâche Amazon ECS. L'ID du compte Amazon ECR et la région indiqués dans le message suivant peuvent être différents, selon le référentiel Amazon ECR d'où vous avez extrait l'image du conteneur.

CannotPullContainerError: Error response from daemon: pull access denied for 840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy, repository does not exist or may require 'docker login'

Résolution

Cette erreur indique que le rôle d'exécution de tâche utilisé n'est pas autorisé à communiquer avec Amazon ECR et ne peut pas extraire l'image du conteneur Envoy du référentiel. Le rôle d'exécution de tâche attribué à votre tâche Amazon ECS nécessite une politique IAM comportant les déclarations suivantes :

{ "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:us-west-2:111122223333:repository/aws-appmesh-envoy", "Effect": "Allow" }, { "Action": "ecr:GetAuthorizationToken", "Resource": "*", "Effect": "Allow" }

Si votre problème n'est toujours pas résolu, pensez à en ouvrir un GitHub ou à contacter le AWSSupport.

Impossible de se connecter au service de gestion App Mesh Envoy

Symptômes

Votre proxy Envoy ne parvient pas à se connecter au service de gestion App Mesh Envoy. Vous êtes en train de voir :

  • Erreurs de connexion refusées

  • Délais de connexion

  • Erreurs lors de la résolution du point de terminaison du service de gestion App Mesh Envoy

  • Erreurs gRPC

Résolution

Assurez-vous que votre proxy Envoy a accès à Internet ou à un point de terminaison VPC privé et que vos groupes de sécurité autorisent le trafic sortant sur le port 443. Les points de terminaison du service de gestion Envoy public d'App Mesh suivent le format du nom de domaine complet (FQDN).

# App Mesh Production Endpoint appmesh-envoy-management.Region-code.amazonaws.com # App Mesh Preview Endpoint appmesh-preview-envoy-management.Region-code.amazonaws.com

Vous pouvez déboguer votre connexion à EMS à l'aide de la commande ci-dessous. Cela envoie une demande gRPC valide mais vide au service de gestion Envoy.

curl -v -k -H 'Content-Type: application/grpc' -X POST https://appmesh-envoy-management.Region-code.amazonaws.com:443/envoy.service.discovery.v3.AggregatedDiscoveryService/StreamAggregatedResources

Si vous recevez ces messages en retour, votre connexion à Envoy Management Service est fonctionnelle. Pour le débogage des erreurs liées au gRPC, consultez les erreurs dans Envoy déconnecté du service de gestion App Mesh Envoy avec un texte d'erreur.

grpc-status: 16 grpc-message: Missing Authentication Token

Si votre problème n'est toujours pas résolu, pensez à en ouvrir un GitHub ou à contacter le AWSSupport.

Envoy s'est déconnecté du service de gestion App Mesh Envoy avec un texte d'erreur

Symptômes

Votre proxy Envoy ne parvient pas à se connecter au service de gestion App Mesh Envoy et à recevoir sa configuration. Les journaux de votre proxy Envoy contiennent une entrée de journal comme celle-ci.

gRPC config stream closed: gRPC status code, message

Résolution

Dans la plupart des cas, le message du journal doit indiquer le problème. Le tableau suivant répertorie les codes d'état gRPC les plus courants que vous pouvez voir, leurs causes et leurs résolutions.

Code d'état gRPC Cause Résolution
0 Déconnectez-vous gracieusement du service de gestion Envoy. Il n'y a aucun problème. App Mesh déconnecte parfois les proxys Envoy avec ce code d'état. Envoy se reconnectera et continuera à recevoir des mises à jour.
3 Le point de terminaison du maillage (nœud virtuel ou passerelle virtuelle), ou l'une de ses ressources associées, est introuvable. Vérifiez votre configuration Envoy pour vous assurer qu'elle porte le nom approprié de la ressource App Mesh qu'elle représente. Si votre ressource App Mesh est intégrée à d'autres AWS ressources, telles que des AWS Cloud Map espaces de noms ou des certificats ACM, assurez-vous que ces ressources existent.
7 Le proxy Envoy n'est pas autorisé à effectuer une action, telle que se connecter au service de gestion Envoy ou récupérer les ressources associées. Assurez-vous de créer une politique IAM contenant les déclarations de politique appropriées pour App Mesh et les autres services et d'associer cette politique à l'utilisateur ou au rôle IAM que votre proxy Envoy utilise pour se connecter au service de gestion Envoy.
8 Le nombre de proxys Envoy pour une ressource App Mesh donnée dépasse le quota de service au niveau du compte. Consultez App Mesh pour plus d'informations sur les quotas de compte par défaut et sur la procédure à suivre pour demander une augmentation de quota.
16 Le proxy Envoy ne dispose pas d'informations d'authentification valides pourAWS. Assurez-vous que l'Envoy dispose des informations d'identification appropriées pour se connecter aux AWS services via un utilisateur ou un rôle IAM. Un problème connu, #24136, dans Envoy pour les versions v1.24 précédentes ne parvient pas à récupérer les informations d'identification si le processus Envoy utilise des descripteurs de 1024 fichiers supplémentaires. Cela se produit lorsque Envoy dessert un volume de trafic élevé. Vous pouvez confirmer ce problème en vérifiant la présence du texte « A libcurl function was given a bad argument » dans les journaux Envoy au niveau du débogage. Pour atténuer ce problème, passez à la version Envoy v1.25.1.0-prod ou à une version ultérieure.

Vous pouvez consulter les codes d'état et les messages de votre proxy Envoy avec Amazon CloudWatch Insights à l'aide de la requête suivante :

filter @message like /gRPC config stream closed/ | parse @message "gRPC config stream closed: *, *" as StatusCode, Message

Si le message d'erreur fourni ne vous a pas aidé ou si votre problème n'est toujours pas résolu, envisagez d'ouvrir un GitHub problème.

Échec de la vérification de l'état du conteneur Envoy, de la sonde de disponibilité ou de la sonde de vivacité

Symptômes

Votre proxy Envoy échoue aux contrôles de santé d'une tâche Amazon ECS, d'une instance Amazon EC2 ou d'un pod Kubernetes. Par exemple, vous interrogez l'interface d'administration d'Envoy à l'aide de la commande suivante et vous recevez un statut autre queLIVE.

curl -s http://my-app.default.svc.cluster.local:9901/server_info | jq '.state'

Résolution

Voici une liste des étapes de correction en fonction de l'état renvoyé par le proxy Envoy.

  • PRE_INITIALIZINGou INITIALIZING — Le proxy Envoy n'a pas encore reçu de configuration ou ne peut pas se connecter et récupérer la configuration depuis le service de gestion App Mesh Envoy. L'Envoy reçoit peut-être une erreur du service de gestion Envoy lorsqu'il tente de se connecter. Pour plus d'informations, consultez les erreurs dansEnvoy s'est déconnecté du service de gestion App Mesh Envoy avec un texte d'erreur.

  • DRAINING— Le proxy Envoy a commencé à épuiser les connexions en réponse à une /drain_listeners demande /healthcheck/fail ou sur l'interface d'administration d'Envoy. Nous vous déconseillons d'invoquer ces chemins sur l'interface d'administration, sauf si vous êtes sur le point de mettre fin à votre tâche Amazon ECS, à votre instance Amazon EC2 ou à votre pod Kubernetes.

Si votre problème n'est toujours pas résolu, pensez à en ouvrir un GitHub ou à contacter le AWSSupport.

Health : le contrôle de santé entre l'équilibreur de charge et le point de terminaison du maillage échoue

Symptômes

Votre point de terminaison de maillage est considéré comme sain par le contrôle de l'état du conteneur ou la sonde de disponibilité, mais le contrôle de santé entre l'équilibreur de charge et le point de terminaison du maillage échoue.

Résolution

Pour résoudre le problème, effectuez les tâches suivantes.

  • Assurez-vous que le groupe de sécurité associé à votre point de terminaison maillé accepte le trafic entrant sur le port que vous avez configuré pour votre bilan de santé.

  • Assurez-vous que le contrôle de santé aboutit systématiquement lorsqu'il est demandé manuellement, par exemple, depuis un hôte bastion au sein de votre VPC.

  • Si vous configurez un contrôle de santé pour un nœud virtuel, nous vous recommandons d'implémenter un point de terminaison de contrôle de santé dans votre application, par exemple, /ping pour HTTP. Cela garantit que le proxy Envoy et votre application sont routables depuis l'équilibreur de charge.

  • Vous pouvez utiliser n'importe quel type d'équilibreur de charge élastique pour le nœud virtuel, en fonction des fonctionnalités dont vous avez besoin. Pour plus d'informations, consultez la section Fonctionnalités d'Elastic Load Balancing.

  • Si vous configurez un contrôle de santé pour une passerelle virtuelle, nous vous recommandons d'utiliser un équilibreur de charge réseau avec un contrôle de santé TCP ou TLS sur le port d'écoute de la passerelle virtuelle. Cela garantit que l'écouteur de passerelle virtuelle est amorcé et prêt à accepter les connexions.

Si votre problème n'est toujours pas résolu, pensez à en ouvrir un GitHub ou à contacter le AWSSupport.

La passerelle virtuelle n'accepte pas le trafic sur les ports 1024 ou moins

Symptômes

Votre passerelle virtuelle n'accepte pas le trafic sur le port 1024 ou moins, mais accepte le trafic sur un numéro de port supérieur à 1024. Par exemple, vous interrogez les statistiques d'Envoy à l'aide de la commande suivante et vous recevez une valeur autre que zéro.

curl -s http://my-app.default.svc.cluster.local:9901/stats | grep "update_rejected"

Vous pouvez voir un texte similaire au texte suivant dans vos journaux décrivant un échec de liaison à un port privilégié :

gRPC config for type.googleapis.com/envoy.api.v2.Listener rejected: Error adding/updating listener(s) lds_ingress_0.0.0.0_port_<port num>: cannot bind '0.0.0.0:<port num>': Permission denied

Résolution

Pour résoudre le problème, l'utilisateur spécifié pour la passerelle doit disposer de la fonctionnalité LinuxCAP_NET_BIND_SERVICE. Pour plus d'informations, consultez les sections Fonctionnalités dans le manuel du programmeur Linux, Paramètres Linux dans les paramètres de définition des tâches ECS et Définir les capacités d'un conteneur dans la documentation de Kubernetes.

Important

Fargate doit utiliser une valeur de port supérieure à 1024.

Si votre problème n'est toujours pas résolu, pensez à en ouvrir un GitHub ou à contacter le AWSSupport.