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

4 minutos de lectura
0

Aparecen errores HTTP 503 (Servicio no disponible) al conectarse a un servicio de Kubernetes que se ejecuta en el clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción corta

Los errores HTTP 503 son errores del servidor. Se producen al conectarse a un pod del servicio de Kubernetes ubicado en un clúster de Amazon EKS que está configurado para un equilibrador de carga.

Para solucionar los errores HTTP 504, consulte ¿Cómo resuelvo los errores HTTP 504 en Amazon EKS?

Para solucionar los errores HTTP 503, siga los siguientes pasos de resolución de problemas.

Resolución

Verifique si la etiqueta del pod coincide con el valor especificado en el selector de servicio de Kubernetes

1.    Ejecute el siguiente comando para obtener el valor del selector:

$ kubectl describe service service_name -n your_namespace

Nota: Sustituya service_name por el nombre del servicio y your_namespace por el espacio de nombres del servicio.

Salida de ejemplo:

Name:                     service-name
Namespace:                pod-name
Labels:                   none
Annotations:              none
Selector:                 app.kubernetes.io/name=namespace
Type:                     NodePort
IP Families:              none
IP:                       10.100.17.189
IPs:                      10.100.17.189
Port:                     unset  80/TCP
TargetPort:               80/TCP
NodePort:                 unset  31560/TCP
Endpoints:                none
Session Affinity:         none
External Traffic Policy:  Cluster
Events:                   none

En la salida anterior, el valor del selector de ejemplo es app.kubernetes.io/name=namespace.

2.    Verifique si hay pods con la etiqueta app.kubernetes.io/name=namespace:

$ kubectl get pods -n your_namespace -l "app.kubernetes.io/name=namespace"

Salida de ejemplo:

No resources found in your_namespace namespace.

Si no se encuentran recursos con el valor buscado, se produce un error HTTP 503.

Verifique que se ejecuten los pods definidos para el servicio de Kubernetes

Utilice la etiqueta en el selector del servicio de Kubernetes para verificar que los pods existen y que se encuentran en estado de ejecución:

$ kubectl -n your_namespace get pods -l "app.kubernetes.io/name=your_namespace"

Salida:

NAME                               READY   STATUS             RESTARTS   AGE
POD_NAME                           0/1     ImagePullBackOff   0          3m54s

Verifique si los pods pueden pasar el sondeo de preparación para la implementación de Kubernetes

1.    Verifique que los pods de la aplicación pueden pasar el sondeo de preparación. Para obtener más información, consulte Configurar los sondeos de actividad, preparación y puesta en marcha (del sitio web de Kubernetes).

2.    Verifique el sondeo de preparación del pod:

$ kubectl describe pod pod_name -n your_namespace | grep -i readiness

Nota: sustituya pod_name por el nombre del pod y your_namespace por el espacio de nombres.

Salida de ejemplo:

Readiness:      tcp-socket :8080 delay=5s timeout=1s period=2s #success=1 #failure=3
Warning  Unhealthy  2m13s (x298 over 12m)  kubelet            Readiness probe failed:

En la salida anterior, se puede ver que no se aprobó el sondeo de preparación.

Nota: Este paso proporciona una salida útil solo si la aplicación escucha en la ruta y el puerto correctos. Compruebe la salida de cURL con el comando curl -Ivk y asegúrese de que la ruta definida en el nivel de servicio recibe una respuesta válida. Por ejemplo, 200 ms es una buena respuesta.

Comprobar la capacidad del equilibrador de carga clásico

Si obtiene un error HTTP 503 intermitente, significa que el balanceador de carga clásico no tiene suficiente capacidad para manejar la solicitud. Para resolver este problema, asegúrese de que el balanceador de carga clásico tenga suficiente capacidad y que los nodos de trabajo puedan manejar la tasa de solicitudes.

Verifique que las instancias estén registradas

También aparece un error HTTP 503 si no hay instancias registradas. Para resolver este problema, intente aplicar las siguientes soluciones:

  • Verifique que los grupos de seguridad correspondientes al nodo de trabajo tengan una regla de entrada que permita a los nodos de trabajo acceder al puerto del nodo. Además, verifique que ninguna regla NAT bloquee el tráfico de red en los rangos de puertos del nodo.
  • Verifique que el grupo de seguridad personalizado especificado para el balanceador de carga clásico tenga permitido el acceso entrante en los nodos de trabajo.
  • Asegúrese de que hay nodos de trabajo en cada Zona de Disponibilidad especificada por las subredes.

Información relacionada

¿Por qué recibo errores HTTP 5xx cuando me conecto a servidores web que se ejecutan en instancias de EC2 configuradas para usar un equilibrio de carga clásico?

HTTP 503: el servicio no está disponible

Monitoree el balanceador de carga clásico

Monitoree los balanceadores de carga de aplicaciones

Solucionar los problemas de un balanceador de carga clásico: errores HTTP

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años