Come posso risolvere gli errori HTTP 504 in Amazon EKS?

4 minuti di lettura
0

Ricevo gli errori HTTP 504 (Gateway timeout) quando mi connetto a un servizio Kubernetes eseguito nel mio cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Ricevi gli errori HTTP 504 quando ti connetti a un pod Kubernetes Service che si trova in un cluster Amazon EKS configurato per un load balancer.

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

Per risolvere gli errori HTTP 504, completa i seguenti passaggi per la risoluzione dei problemi.

Risoluzione

Verifica che il timeout di inattività del tuo sistema di bilanciamento del carico sia impostato correttamente

Il sistema di bilanciamento del carico ha stabilito una connessione con la destinazione, ma quest'ultima non ha risposto prima che sia trascorso il periodo di timeout di inattività. Per impostazione predefinita, il timeout di inattività per Classic Load Balancer e Application Load Balancer è di 60 secondi.

  1. Esamina i parametri di Amazon CloudWatch per il tuo Classic Load Balancer o Application Load Balancer.

Nota: almeno una richiesta è scaduta quando:

  • I datapoint di latenza sono uguali al valore di timeout del sistema di bilanciamento del carico attualmente configurato.
  • Ci sono datapoint nella metrica HTTPCode_ELB_5XX.
  1. Modifica il timeout di inattività per il tuo sistema di bilanciamento del carico in modo che la richiesta HTTP possa essere completata entro il periodo di timeout di inattività. Oppure configura la tua applicazione per rispondere più rapidamente.

Per modificare il timeout di inattività del tuo Classic Load Balancer, aggiorna la definizione del servizio per includere l'annotazione service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout.

Per modificare il timeout di inattività dell'Application Load Balancer, aggiorna la definizione di Ingress per includere l'annotazione alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds.

Verifica che le tue istanze di backend non presentino errori di connessione backend

Se un'istanza di backend chiude una connessione TCP prima che abbia raggiunto il valore di timeout di inattività, il sistema di bilanciamento del carico non riesce a soddisfare la richiesta.

  1. Esamina i parametri CloudWatch BackendConnectionErrors per il tuo Classic Load Balancer e il TargetConnectionErrorCount del gruppo di destinazione per il tuo Application Load Balancer.

  2. Attiva le impostazioni keep-alivesul nodo worker o sui pod del backend e imposta il timeout keep-alive su un valore maggiore del timeout di inattività del load balancer.

Per vedere se il timeout keep-alive è inferiore al timeout di inattività, verifica il valore keep-alive nei tuoi pod o nel nodo worker. Vedi l'esempio seguente per i pod e i nodi.

Per i pod:

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

Per i nodi:

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

Uscita:

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

Verifica che i tuoi obiettivi di back-end possano ricevere traffico dal sistema di bilanciamento del carico su un intervallo di porte effimero

La lista di controllo degli accessi (ACL) per la sottorete non consente il traffico dalle destinazioni ai nodi del sistema di bilanciamento del carico sulle porte effimere (1024-65535).

È necessario configurare i gruppi di sicurezza e gli ACL di rete per consentire lo spostamento dei dati tra il load balancer e le destinazioni del backend. Ad esempio, a seconda del tipo di sistema di bilanciamento del carico, questi obiettivi possono essere indirizzi IP o istanze.

È necessario configurare i gruppi di sicurezza per l'accesso effimero alle porte. A tale scopo, collega la regola di uscita del gruppo di sicurezza dei tuoi nodi e pod al gruppo di sicurezza del tuo sistema di bilanciamento del carico. Per ulteriori informazioni, consulta Gruppi di sicurezza per Amazon Virtual Private Cloud (Amazon VPC) e Aggiungi ed elimina regole.


Informazioni correlate

Ricevo errori HTTP 5xx durante la connessione a server Web in esecuzione su istanze EC2 configurate per utilizzare Classic Load Balancing. Come posso risolvere questi errori?

HTTP 504: Timeout del gateway

Monitora il tuo Classic Load Balancer

Monitora Application Load Balancer

Risoluzione dei problemi relativi a Classic Load Balancer: Errori HTTP

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa