Comment résoudre les problèmes liés aux échecs de vérification de l'état du Network Load Balancer pour les tâches Amazon ECS sur Fargate ?

Lecture de 8 minute(s)
0

Je souhaite résoudre les problèmes de vérification de l'état du Network Load Balancer que je reçois lors de l'exécution de tâches Amazon Elastic Container Service (Amazon ECS) sur AWS Fargate.

Brève description

Lorsque les vérifications de l’état sont configurées, votre Network Load Balancer envoie régulièrement des demandes de vérification de l'état à chaque cible enregistrée. Pour les vérifications de l’état TCP, une vérification de l'état tente simplement d'ouvrir une connexion TCP sur le port spécifié. Le fait de ne pas ouvrir une connexion sur le port spécifié dans le délai configuré est considéré comme défectueux. Pour un service UDP, la disponibilité cible est testée à l'aide de vérifications de l’état non UDP sur votre groupe cible. Pour les vérifications de l'état HTTP et HTTPS, consultez Comment résoudre les échecs de vérification de l'état de Application Load Balancer pour les tâches Amazon ECS sur Fargate ?

Lorsque vos tâches Amazon ECS échouent à une vérification de l'état du Network Load Balancer, les erreurs suivantes peuvent apparaître dans le message d'événement de votre service Amazon ECS :

  • Erreur d'échec des vérifications de l’état - (service AWS-Service) (port 80) n'est pas sain dans (target-group arn:aws:elasticloadbalancing:us-east- 1:111111111111:targetgroup/aws-targetgroup/123456789) en raison de (raison pour laquelle les vérifications de l’état ont échoué)
  • Target se trouve dans une zone de disponibilité qui n'est pas activée en raison de l'erreur d'équilibrage de charge : ** (service AWS-Service) (port 80) ne fonctionne pas correctement dans (target-group arn:aws:elasticloadbalancing:us-east- 1:111111111111:targetgroup/aws-targetgroup/123456789) pour (raison pour laquelle Target se trouve dans une zone de disponibilité qui n'est pas activée pour l'équilibreur de charge)**

Exemple de message d'erreur provenant de votre console de tâches Amazon ECS :

Échec des vérifications de l'état ELB de la tâche (target-group arn:aws:elasticloadbalancing:us-east- 1:111111111111:targetgroup/aws-targetgroup/123456789)

Si vous recevez des échecs de vérification de l'état des conteneurs, consultez la sectionComment résoudre les problèmes liés aux échecs de vérification de l'état des conteneurs pour les tâches Amazon ECS ?

Si vos tâches Amazon ECS se sont arrêtées, consultez la section Vérification des erreurs dans les tâches interrompues.

**Remarque :**Les tâches Amazon ECS peuvent renvoyer un état défectueux pour plusieurs raisons. Si la résolution suivante ne permet pas de résoudre vos erreurs, consultez la section Résolution des problèmes liés aux équilibreurs de charge de service.

Résolution

**Important :**Passez en revue toutes les commandes de l'interface de la ligne de commande AWS (AWS CLI) et remplacez toutes les instances des exemples de chaînes par vos valeurs spécifiques. Par exemple, remplacez example-task-private-ip par l'adresse IP privée de votre tâche spécifique.

Remarque : Si vous recevez des erreurs lors de l'exécution des commandes de l'interface de ligne de commande AWS, vérifiez que vous exécutez une version récente de l'interface de ligne de commande AWS.

Échec des vérifications de l’état

Pour dépanner les échecs des vérifications de l’état de l'équilibreur de charge sur vos tâches Amazon ECS Fargate, suivez les étapes suivantes :

  • Vérifiez la connectivité entre votre équilibreur de charge et la tâche Amazon ECS
  • Assurez-vous que vos tâches répondent correctement aux contrôles manuels dans votre Amazon Virtual Private Cloud (Amazon VPC)
  • Vérifiez l'état et la configuration de l'application dans votre conteneur Amazon ECS

Vérifiez la connectivité entre votre équilibreur de charge et la tâche Amazon ECS

Assurez-vous que votre équilibreur de charge est autorisé à effectuer des vérifications de l’état sur vos tâches Amazon ECS :

  • Si votre conteneur est mappé sur le port 80, assurez-vous que le groupe de sécurité de votre conteneur autorise le trafic entrant sur le port 80.
  • Assurez-vous que le groupe de sécurité Amazon ECS Fargate ENI autorise le trafic sur la plage d'adresses CIDR Amazon VPC. Cela permet aux nœuds du Network Load Balancer d'accéder aux tâches Amazon ECS pour effectuer des vérifications de l’état. Pour plus d'informations, consultez la section Groupes de sécurité cibles.
  • Vérifiez que les listes de contrôle d'accès réseau (ACL) associées aux sous-réseaux de l'interface réseau élastique pour votre tâche Fargate autorisent le trafic entrant. Le trafic entrant doit être autorisé sur le port de vérification de l’état. Veuillez également confirmer que l'ACL du réseau autorise le trafic de sortie sur les ports éphémères.

Vérifiez que vos tâches répondent correctement aux vérifications manuelles au sein de votre Amazon VPC

Vérifiez que les tâches de votre instance Amazon Elastic Compute Cloud (Amazon EC2) au sein de votre Amazon VPC répondent correctement aux vérifications manuelles :

Remarque : Vous pouvez créer un cluster pour le type de lancement Amazon EC2 ou lancer la nouvelle instance Amazon EC2. Si vous ne souhaitez pas lancer d'instance Amazon EC2, vous pouvez utiliser la fonctionnalité ECS exec. Pour ce faire, lancez une tâche autonome dans le même VPC avec \ --enable-execute-command.

(Option 1) Pour les vérifications de l'état du protocole HTTP :

$ curl -Iv http://<example-task-private-ip>:<example-port>/<healthcheck_path>

Exemple de sortie :

HTTP/1.1 200 OK

**Remarque :**Vous pouvez recevoir des codes d'état réussis compris entre 200 et 399 pour les configurations définies pour les vérifications de l’état HTTP sur le groupe cible.

(Option 2) Pour les contrôles de santé TCP qui n'utilisent pas le protocole SSL avec les cibles :

$ nc -z -v -w10 example-task-private-ip example-port

Exemple de sortie :

nc -z -v -w10 10.x.x.x 80
Connection to 10.x.x.x port 80 [tcp/http] succeeded!

(Option 3) Pour les vérifications de l’état TCP qui nécessitent le protocole SSL pour les vérifications de l’état du backend :

$ nc -z -v -w10 --ssl example-task-private-ip example-port

Exemple de sortie :

nc -z -v -w10 10.x.x.x 443
Connection to 10.x.x.x port 443 [tcp/https] succeeded!

Vérifiez l'état et la configuration de l'application dans votre conteneur ECS

  • Vérifiez que le port ping et le chemin de vérification de l'état de votre groupe cible sont correctement configurés.
  • Surveillez les mesures d'utilisation du processeur et de la mémoire pour votre service Amazon ECS.
  • Si votre tâche Amazon ECS nécessite un délai de grâce de vérification de l’état plus long pour l'enregistrement auprès du Network Load Balancer, augmentez le délai HealthCheckGracePeriodSeconds.  Pour mettre à jour la période de grâce de vérification de l’état, exécutez la commande suivante :
$ aws ecs update-service --cluster example-cluster --service example-service --region <example-region> --health-check-grace-period-seconds <example-value-in-seconds>
  • Vérifiez les journaux de vos applications pour détecter les erreurs d'application. Pour plus d'informations, consultez la section Affichage des journaux de conteneurs awslogs dans CloudWatch Logs.
  • Confirmez le code de réponse envoyé par votre application sur le HealthCheckPath. Si la journalisation des accès est configurée dans votre application, vérifiez la réponse enregistrée à l'aide du mot clé ELB-HealthChecker/2.0. Si vous utilisez CloudWatch Logs, utilisez Log Insights et exécutez la requête suivante :
fields @timestamp, @message
| sort @timestamp desc
| filter @message like /ELB-HealthChecker/

Target se trouve dans une zone de disponibilité qui n'est pas activée pour l'équilibreur de charge

Lorsque vous activez une zone de disponibilité (AZ) pour votre équilibreur de charge, l'équilibrage de charge crée un nœud d'équilibreur de charge dans la zone de disponibilité. Si vous enregistrez des cibles dans une Zone de disponibilité, vous devez activer la Zone de disponibilité pour que les cibles enregistrées reçoivent du trafic. Pour plus d'informations, consultez la section Zones de disponibilité et nœuds d'équilibrage de charge.

Pour identifier les zones de disponibilité pour lesquelles votre équilibreur de charge est configuré, exécutez la commande suivante :

$ aws elbv2 describe-load-balancers --load-balancer-arn <example-arn-load-balancer> --region <example-region> --query "LoadBalancers[].AvailabilityZones[].ZoneName"

**Remarque :**Vous ne pouvez pas désactiver les zones de disponibilité d'un équilibreur de charge réseau après l'avoir créé, mais vous pouvez activer des zones de disponibilité supplémentaires.

Pour identifier les zones de disponibilité pour lesquelles votre tâche Amazon ECS Fargate est configurée, exécutez la commande suivante :

Remarque : La commande suivante renvoie les sous-réseaux pour lesquels votre service est configuré.

$ aws ecs describe-services —cluster <example-cluster-name> —services <example-service-name> --region <example-region> --query "services[].networkConfiguration.awsvpcConfiguration.subnets"

Pour identifier les zones de disponibilité des sous-réseaux précédents, utilisez les ID de sous-réseau précédents dans la commande suivante :

Remarque : La commande suivante renvoie les zones de disponibilité pour lesquelles votre service est configuré.

$ aws ec2 describe-subnets --subnet-ids <example-subnet-ids> --region <example-region> --query "Subnets[].AvailabilityZone"

Remarque : Vous pouvez modifier la configuration du sous-réseau d'un service Amazon ECS à l'aide de la commande AWS CLI update-service

Informations connexes

Résolution des problèmes des équilibreurs de charge de service

Vérification de l’état pour vos groupes cibles

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an