Come posso risolvere gli errori HTTP 503 (Servizio non disponibile) quando accedo a un servizio Kubernetes in un cluster Amazon EKS?
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.
Informazioni correlate
HTTP 503: servizio non disponibile
Monitorare Classic Load Balancer
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 7 mesi fa