Comment résoudre les erreurs HTTP 504 dans Amazon EKS ?

Dernière mise à jour : 03/12/2021

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

Brève description

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

Pour 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 ?

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

Résolution

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

L'équilibreur de charge a établi une connexion avec la cible, mais la cible 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 : si les points de données de latence sont égaux à la valeur de délai d'inactivité de votre équilibreur de charge actuellement configuré et qu'il existe des points de données dans la métrique HTTPCode_ELB_5XX, cela signifie qu'au moins une demande a expiré.

2.    Modifiez le délai d'inactivité de votre équilibreur de charge afin que la demande HTTP puisse être terminée pendant le délai d'inactivité ou configurez votre application pour qu'elle réponde plus rapidement.

Pour 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 backend ferme une connexion TCP à l'équilibreur de charge avant que celui-ci n'ait atteint sa valeur de délai d'inactivité, l'équilibreur de charge peut ne pas répondre à la demande.

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 nœuds de travail backend 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.

Pour 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 \

Sortie :

net.ipv4.tcp_keepalive_time \
    net.ipv4.tcp_keepalive_intvl \
    net.ipv4.tcp_keepalive_probes

Pour les nœuds :

$ sysctl \

Sortie :

net.ipv4.tcp_keepalive_time \
    net.ipv4.tcp_keepalive_intvl \
    net.ipv4.tcp_keepalive_probes

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

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

Vous devez configurer des groupes de sécurité et des listes ACL réseau pour 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.

Pour configurer les groupes de sécurité pour l'accès aux ports éphémères, vous devez connecter 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 Groupes de sécurité pour votre VPCet Ajouter et supprimer des règles.