¿Cómo puedo resolver los errores HTTP 504 en Amazon EKS?

4 minutos de lectura
0

Recibo errores HTTP 504 (tiempo de espera de puerta de enlace) cuando me conecto a un servicio de Kubernetes que se ejecuta en mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descripción

Recibe errores HTTP 504 cuando se conecta a un pod de Kubernetes Service que se encuentra en un clúster de Amazon EKS configurado para un equilibrador de carga.

Para resolver los errores de HTTP 503, consulte ¿Cómo se resuelven los errores HTTP 503 (Servicio no disponible) al acceder a un servicio de Kubernetes en un clúster de Amazon EKS?

Para resolver los errores HTTP 504, complete los siguientes pasos de solución de problemas.

Resolución

Verificar que el tiempo de espera de inactividad del equilibrador de cargas esté configurado correctamente

El equilibrador de carga estableció una conexión con el destino, pero el destino no respondió antes de que transcurriera el tiempo de espera. De forma predeterminada, el tiempo de espera de inactividad para el equilibrador de carga clásico y para el equilibrador de carga de aplicación es de 60 segundos.

1.    Revise las métricas de Amazon CloudWatch para su equilibrador de carga clásico o equilibrador de carga de aplicación.

Nota: Se ha agotado el tiempo de espera de al menos una solicitud cuando:

  • Los puntos de datos de latencia son iguales al valor de tiempo de espera del equilibrador de carga actualmente configurado.
  • Hay puntos de datos en la métrica HTTPCode_ELB_5XX.

2.    Modifique el tiempo de espera de inactividad del equilibrador de carga para que la solicitud HTTP pueda completarse dentro del período de tiempo de espera de inactividad. También puede configurar la aplicación para que responda más rápido.

Para modificar el tiempo de espera de inactividad de su equilibrador de carga clásico, actualice la definición del servicio para incluir la anotación service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout.

Para modificar el tiempo de espera de inactividad del equilibrador de carga de aplicación, actualice la definición de Ingress para incluir la anotación alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds.

Verificar que las instancias de backend no tengan errores de conexión de backend

Si una instancia de backend cierra una conexión TCP antes de que alcance el valor de tiempo de espera de inactividad, el equilibrador de carga no cumplirá con la solicitud.

1.Revise las métricas CloudWatch BackendConnectionErrors de su equilibrador de carga clásico y el número TargetConnectionErrorCount del grupo de destino de su equilibrador de carga de aplicación.

2.    Active la configuración keep-alive en su nodo de trabajo o pods del backend y establezca el tiempo de espera de keep-alive en un valor superior al tiempo de espera de inactividad del equilibrador de carga.

Para comprobar si el tiempo de espera de keep-alive es inferior al tiempo de espera de inactividad, verifique el valor de keep-alive en sus pods o nodo de trabajo. Consulte el siguiente ejemplo para ver los pods y los nodos.

Para los pods:

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

Para los nodos:

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

Salida:

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

Verificar que los destinos de backend puedan recibir tráfico del equilibrador de carga a través del rango de puertos efímeros

La lista de control de acceso (ACL) a la red de la subred no permite el tráfico desde los destinos a los nodos del equilibrador de carga de los puertos efímeros (1024-65535).

Debe configurar los grupos de seguridad y las ACL de red para permitir que los datos se muevan entre el equilibrador de carga y los destinos del backend. Por ejemplo, según el tipo de equilibrador de carga, estos destinos pueden ser direcciones IP o instancias.

Debe configurar los grupos de seguridad para el acceso a los puertos efímeros. Para ello, conecte la regla de salida del grupo de seguridad de sus nodos y pods al grupo de seguridad de su equilibrador de carga. Para obtener más información, consulte Controlar el tráfico hacia los recursos mediante grupos de seguridad y Agregar y eliminar reglas.


Información relacionada

Recibo errores HTTP 5xx al conectarme a servidores web que se ejecutan en instancias de EC2 configuradas para usar un equilibrador de carga clásico. ¿Cómo soluciono estos errores?

HTTP 504: Gateway timeout

Monitor your Classic Load Balancer

Monitor your Application Load Balancers

Troubleshoot a Classic Load Balancer: HTTP errors

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año