Wie behebe ich 504-HTTP-Fehler in Amazon EKS?

Lesedauer: 3 Minute
0

Ich erhalte HTTP-504-Fehler (Gateway-Timeout), wenn ich eine Verbindung zu einem Kubernetes-Service herstelle, der in meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster ausgeführt wird.

Kurzbeschreibung

Sie erhalten HTTP-504-Fehler, wenn Sie eine Verbindung zu einem Kubernetes Service-Pod herstellen, der sich in einem Amazon EKS-Cluster befindet, der für einen Load Balancer konfiguriert ist.

Informationen zur Behebung von HTTP-503-Fehlern finden Sie unter Wie behebe ich den HTTP-503-Fehler (Service nicht verfügbar), wenn ich in einem Amazon EKS-Cluster auf einen Kubernetes-Service zugreife?

Führen Sie die folgenden Schritte zur Fehlerbehebung durch, um HTTP-504-Fehler zu beheben.

Lösung

Stellen Sie sicher, dass das Leerlauftimeout Ihres Load Balancers richtig eingestellt ist

Der Load Balancer hat eine Verbindung zum Ziel aufgebaut, aber das Ziel hat nicht geantwortet, bevor die Leerlauftimeout-Zeit verstrichen ist. Standardmäßig beträgt das Leerlauftimeout für den Classic Load Balancer und den Application Load Balancer 60 Sekunden.

1.    Überprüfen Sie die Amazon CloudWatch-Metriken für den Classic Load Balancer oder Application Load Balancer.

Hinweis: Bei mindestens einer Anfrage ist ein Timeout aufgetreten, wenn Folgendes zutrifft:

  • Die Latenzdatenpunkte entsprechen dem aktuell konfigurierten Timeout-Wert Ihres Load Balancers.
  • Die Metrik HTTPCode_ELB_5XX enthält Datenpunkte.

2.    Ändern Sie das Leerlauftimeout für den Load Balancer so, dass die HTTP-Anfrage innerhalb der Leerlauftimeout-Zeit abgeschlossen werden kann. Oder konfigurieren Sie Ihre Anwendung so, dass sie schneller reagiert.

Um das Leerlauftimeout für den Classic Load Balancer zu ändern, aktualisieren Sie die Servicedefinition so, dass sie die Anmerkung service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout enthält.

Um das Leerlauftimeout für den Application Load Balancer zu ändern, aktualisieren Sie die Ingress-Definition so, dass sie die Anmerkung alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds enthält.

Sicherstellen, dass die Backend-Instances keine Backend-Verbindungsfehler aufweisen

Wenn eine Backend-Instance eine TCP-Verbindung schließt, bevor der Leerlauftimeout-Wert erreicht ist, kann der Load Balancer die Anfrage nicht erfüllen.

1.    Überprüfen Sie die CloudWatch BackendConnectionErrors-Metriken des Classic Load Balancers und den TargetConnectionErrorCount der Zielgruppe des Application Load Balancers.

2.    Aktivieren Sie die Keep-Alive-Einstellungen auf dem Backend-Worker-Knoten oder des Pods und setzen Sie das Keep-Alive-Timeout auf einen Wert, der größer ist als das Leerlauftimeout des Load Balancers.

Um festzustellen, ob das Keep-Alive-Timeout kürzer als das Leerlauftimeout ist, überprüfen Sie den Keep-Alive-Wert in den Pods oder Worker-Knoten. Sehen Sie sich das folgende Beispiel für Pods und Knoten an.

Für Pods:

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

Für Knoten:

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

Ausgabe:

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

Sicherstellen, dass die Backend-Ziele über den kurzlebigen Portbereich Datenverkehr vom Load Balancer empfangen können

Die Zugriffssteuerungsliste (ACL) für das Subnetz erlaubt keinen Datenverkehr von den Zielen zu den Load Balancer-Knoten an den kurzlebigen Ports (1024-65535).

Sie müssen Sicherheitsgruppen und Netzwerk-ACLs konfigurieren, damit Daten zwischen dem Load Balancer und den Backend-Zielen übertragen werden können. Je nach Load Balancer-Typ können diese Ziele beispielsweise IP-Adressen oder Instances sein.

Sie müssen die Sicherheitsgruppen für den kurzlebigen Portzugriff konfigurieren. Verbinden Sie dazu die Sicherheitsgruppen-Ausgangsregel der Knoten und Pods mit der Sicherheitsgruppe des Load Balancers. Weitere Informationen finden Sie unter Sicherheitsgruppen für Ihre Amazon Virtual Private Cloud (Amazon VPC) und Regeln hinzufügen und löschen.


Relevante Informationen

Ich erhalte HTTP-5xx-Fehler, wenn ich eine Verbindung zu Webservern herstelle, die auf EC2-Instances laufen, die für die Verwendung von Classic Load Balancing konfiguriert sind. Wie behebe ich diese Fehler?

HTTP 504: Gateway-Timeout

Überwachen des Classic Load Balancers

Überwachen des Application Load Balancers

Fehlerbehebung bei einem klassischen Load Balancer: HTTP-Fehler

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr