如何解決 Amazon EKS 中的 HTTP 504 錯誤?

2 分的閱讀內容
0

當我連線至在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集中執行的 Kubernetes 服務時,收到 HTTP 504 (閘道逾時) 錯誤。

簡短說明

當您連線至針對負載平衡器設定之 Amazon EKS 叢集中的 Kubernetes 服務 Pod 時,將會收到 HTTP 504 錯誤。

若要解決 HTTP 503 錯誤,請參閱存取 Amazon EKS 叢集中的 Kubernetes 服務時,如何解決 HTTP 503 (服務無法使用) 錯誤?

若要解決 HTTP 504 錯誤,請完成下列疑難排解步驟。

解決方法

確認負載平衡器的閒置逾時已正確設定

負載平衡器已建立目標的連線,但目標在閒置逾時期間結束前並無回應。依預設,Classic Load BalancerApplication Load Balancer 的閒置逾時為 60 秒。

1.    檢閱 Classic Load Balancer 或 Application Load Balancer 的 Amazon CloudWatch 指標。

**注意:**發生下列情況時,至少會有一個請求已逾時:

  • 延遲資料點等於目前設定的負載平衡器逾時值。
  • HTTPCode_ELB_5XX 指標中具有資料點。

2.    修改負載平衡器的閒置逾時,使 HTTP 請求可在閒置逾時期間內完成。或設定應用程式以加快回應速度。

若要修改 Classic Load Balancer 的閒置逾時,請更新服務定義以包含 service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout 註釋。

若要修改 Application Load Balancer 的閒置逾時,請更新輸入定義以包含 alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds 註釋。

確認後端執行個體無任何後端連線錯誤

如果後端執行個體在達到閒置逾時值前關閉 TCP 連線,負載平衡器將無法完成請求。

1.    檢閱 Classic Load Balancer 的 CloudWatch BackendConnectionErrors 指標和 Application Load Balancer 之目標群組的 TargetConnectionErrorCount

2.    在後端工作節點或 Pod 中啟用保持連線設定,並將保持連線逾時設定為大於負載平衡器閒置逾時的值。

若要查看保持連線逾時是否小於閒置逾時,請在 Pod 或工作節點中確認保持連線值。請參閱下列的 Pod 和節點範例。

Pod:

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

節點:

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

輸出:

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

確認後端目標可從暫時性連接埠範圍內的負載平衡器接收流量

子網路的網路存取控制清單 (ACL) 不允許目標流量傳輸至暫時性連接埠 (1024-65535) 的負載平衡器節點。

您必須設定安全群組和網路 ACL,以允許資料在負載平衡器和後端目標間移動。例如,根據負載平衡器類型,這些目標可為 IP 地址或執行個體。

您必須設定適用於暫時性連接埠存取權的安全群組。若要進行此操作,請將節點和 Pod 的安全群組輸出規則連線至負載平衡器的安全群組。如需詳細資訊,請參閱 Amazon Virtual Private Cloud (Amazon VPC) 安全群組新增與刪除規則


相關資訊

連線至在 EC2 執行個體 (設定為使用 Classic Load Balancing) 中執行的 Web 伺服器時,我收到 HTTP 5xx 錯誤。如何針對這些錯誤進行疑難排解?

HTTP 504: 閘道逾時

監控 Classic Load Balancer

監控 Application Load Balancer

針對 Classic Load Balancer 進行疑難排解: HTTP 錯誤

AWS 官方
AWS 官方已更新 2 年前