Come posso risolvere gli errori HTTP 503 (Servizio non disponibile) quando accedo a un servizio Kubernetes in un cluster Amazon EKS?

Ultimo aggiornamento: 19/07/2022

Ricevo errori HTTP 503 (Servizio non disponibile) quando mi connetto a un servizio Kubernetes eseguito nel cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Gli errori HTTP 503 sono errori lato server. Questi errori vengono visualizzati quando ci si connette a un pod di un servizio Kubernetes situato in un cluster Amazon EKS configurato per un load balancer.

Per risolvere gli errori HTTP 504, consulta Come risolvere gli errori HTTP 504 in Amazon EKS?

Per risolvere gli errori HTTP 503, completa i seguenti passaggi di risoluzione dei problemi.

Risoluzione

Controlla se l'etichetta del pod corrisponde al valore specificato nel selettore del servizio Kubernetes

1.    Esegui il seguente comando per ottenere il valore del selettore:

$ kubectl describe service service_name -n your_namespace

Nota: sostituisciservice_name con il nome del tuo servizio e your_namespace con lo spazio dei nomi del tuo servizio.

Output di esempio:

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

Nell'output precedente, il valore di esempio del selettore è app.kubernetes.io/name=namespace.

2.    Controlla se sono presenti pod con l'etichetta app.kubernetes.io/name=namespace:

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

Output di esempio:

No resources found in your_namespace namespace.

Se non vengono trovate risorse con il valore cercato, viene visualizzato un errore HTTP 503.

Verifica che i pod definiti per il servizio Kubernetes siano in esecuzione

Utilizza l'etichetta nel selettore del servizio Kubernetes per verificare che i pod esistano e siano nello stato Running (In esecuzione):

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

Output:

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

Verifica se i pod sono in grado di superare il probe di idoneità per l'implementazione Kubernetes

1.    Verifica che i pod dell'applicazione siano in grado si superare il probe di idoneità. Per ulteriori informazioni, consulta Configure liveness, readiness, and startup probes (dal sito Web Kubernetes).

2.    Controlla il probe di idoneità per il pod:

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

Nota: sostituisci pod_name con il nome del tuo pod e your_namespace con il tuo spazio dei nomi.

Output di esempio:

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

Nell'output precedente, è possibile vedere il messaggio Readiness probe failed (Analisi di idoneità non riuscita).

Nota: questo passaggio fornisce un output utile solo se l'applicazione è in ascolto sul percorso e sulla porta corretti. Controlla l'output di curl con il comando curl -Ivk e assicurati che il percorso definito a livello di servizio riceva una risposta valida. Ad esempio, 200 ms è una buona risposta.

Verifica la capacità di Classic Load Balancer

Se ricevi un errore HTTP 503 intermittente, Classic Load Balancer non ha una capacità sufficiente per gestire la richiesta. Per risolvere questo problema, assicurati che Classic Load Balancer abbia una capacità sufficiente e che i nodi (worker) siano in grado di gestire il tasso di richiesta.

Verifica che le istanze siano registrate

L'errore HTTP 503 viene visualizzato anche quando non sono presenti istanze registrate. Per risolvere il problema, prova le seguenti soluzioni:

  • Verifica che i gruppi di sicurezza per il nodo (worker) dispongano di una regola in entrata che consenta ai nodi (worker) di accedere alla porta del nodo. Inoltre, verifica che nessuna regola NAT stia bloccando il traffico di rete negli intervalli di porte dei nodi.
  • Verifica che al gruppo di sicurezza personalizzato specificato per il Classic Load Balancer sia consentito l'accesso in entrata ai nodi (worker).
  • Assicurati che ci siano nodi (worker) in ogni zona di disponibilità specificata dalle sottoreti.