La résolution des erreurs HTTP 504 dans Amazon EKS ?

Lecture de 4 minute(s)
0

J'obtiens des erreurs HTTP 504 (délai d'expiration de la passerelle) lorsque je me connecte à un service Kubernetes s'exécutant dans mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Des erreurs HTTP 504 s'affichent lors de votre connexion à un pod Kubernetes Service situé dans un cluster Amazon EKS configuré pour un équilibreur de charge.

Afin de résoudre les erreurs HTTP 503, consultez Comment résoudre les erreurs HTTP 503 (service indisponible) lorsque j'accède à un Kubernetes Service dans un cluster Amazon EKS ?

Afin de résoudre les erreurs HTTP 504, suivez les étapes de résolution des problèmes suivantes.

Solution

Vérifier que le délai d'inactivité de votre équilibreur de charge est correctement défini

L'équilibreur de charge a établi une connexion à la cible, toutefois, elle n'a pas répondu avant l'expiration du délai d'inactivité. Le délai d'inactivité par défaut pour Classic Load Balancer et Application Load Balancer est de 60 secondes.

1.    Consultez les métriques Amazon CloudWatch pour votre Classic Load Balancer ou votre Application Load Balancer.

Remarque : Au moins une demande a expiré lorsque :

  • Les points de données de latence sont égaux à la valeur de délai d'expiration de votre équilibreur de charge actuellement configurée.
  • La métrique HttpCode_ELB_5xx contient des points de données.

2.    Modification du délai d'inactivité de votre équilibreur de charge afin que la requête HTTP puisse se terminer au cours de celle-ci. Ou configurez votre application pour qu'elle réponde plus rapidement.

Afin de modifier le délai d'inactivité de votre Classic Load Balancer, mettez à jour la définition du service notamment en y incluant l'annotation service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout.

Pour modifier le délai d'inactivité de votre Application Load Balancer, mettez à jour la définition d'entrée pour inclure l'annotation alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds.

Vérifiez que vos instances de backend n'ont pas d'erreurs de connexion au backend

Si une instance principale ferme une connexion TCP avant qu'elle n'atteigne la valeur du délai d'inactivité, l'équilibreur de charge ne répond pas aux exigences.

1.    Consultez les métriques CloudWatch BackendConnectionErrors pour votre Classic Load Balancer et la paramètre TargetConnectionErrorCount du groupe cible pour votre Application Load Balancer.

2.    Activez les paramètres keep-alive sur vos composants master backend ou pods et définissez le délai d'expiration keep-alive sur une valeur supérieure au délai d'inactivité de l'équilibreur de charge.

Afin de voir si la durée d'activité (keep-alive) est inférieure au délai d'inactivité, vérifiez la valeur keep-alive de vos pods ou composant master. Consultez l'exemple suivant pour les pods et les nœuds.

Pour les pods :

$ kubectl exec your-pod-name -- sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes

Pour les nœuds :

$ sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes

Sortie :

net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9

Vérifiez que vos cibles backend sont susceptibles de recevoir le trafic de l'équilibreur de charge sur la plage de ports éphémères

La liste de contrôle d'accès réseau (ACL) du sous-réseau n'autorise pas le trafic des cibles vers les nœuds d'équilibreur de charge sur les ports éphémères (1024-65535).

Configurez des groupes de sécurité et des listes ACL réseau afin de permettre aux données de se déplacer entre l'équilibreur de charge et les cibles backend. Par exemple, en fonction du type d'équilibreur de charge, ces cibles peuvent être des adresses IP ou des instances.

Configurez les groupes de sécurité pour l'accès éphémère aux ports. Pour ce faire, connectez la règle de sortie du groupe de sécurité de vos nœuds et pods au groupe de sécurité de votre équilibreur de charge. Pour plus d'informations, consultez les sections Groupes de sécurité pour votre Amazon Virtual Private Cloud (Amazon VPC) et Ajouter et supprimer des règles.


Informations connexes

Des erreurs HTTP 5xx s'affichent lorsque je me connecte à des serveurs web qui s'exécutent sur des instances EC2 configurées pour utiliser Classic Load Balancing. Comment résoudre ces erreurs ?

HTTP 504 : délai de passerelle expiré

Contrôler votre Classic Load Balancer

Surveillance de vos équilibreurs Application Load Balancer

Résolution des problèmes d'un Classic Load Balancer : erreurs HTTP

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