本頁說明如何使用 Service、Ingress 或 Gateway 資源,解決 Google Kubernetes Engine (GKE) 叢集中的負載平衡相關問題。
外部 Ingress 產生 HTTP 502 錯誤
請按照下列指南,排解外部 Ingress 資源的 HTTP 502 錯誤:
- 為與 Ingress 參照的每個 GKE 服務相關聯的後端服務啟用記錄。
- 使用狀態詳細資料找出 HTTP 502 回應的原因。如果狀態詳細資料指出 HTTP 502 回應來自後端,則需要對提供服務的 Pod 進行疑難排解,而非負載平衡器。
非代管執行個體群組
如果外部 Ingress 使用非代管執行個體群組後端,您可能會遇到外部 Ingress 資源的 HTTP 502 錯誤。如果符合下列「所有」條件,就會發生這個問題:
- 叢集在所有節點集區中擁有大量節點。
- Ingress 參照的一或多個服務的服務 Pod 僅位於少數節點上。
- Ingress 參照的服務會使用
externalTrafficPolicy: Local
。
如要判斷外部 Ingress 是否使用非代管執行個體群組後端,請執行下列操作:
前往 Trusted Cloud 控制台的「Ingress」頁面。
按一下外部 Ingress 的名稱。
按一下「負載平衡器」的名稱。系統隨即會顯示「負載平衡詳細資料」頁面。
查看「後端服務」一節中的表格,判斷外部 Ingress 是否使用 NEG 或執行個體群組。
如要解決這個問題,請採取下列任一做法:
- 使用 VPC 原生叢集。
- 針對外部 Ingress 參照的每個服務,使用
externalTrafficPolicy: Cluster
。這個解決方案會導致您遺失封包來源中的原始用戶端 IP 位址。 - 使用
node.kubernetes.io/exclude-from-external-load-balancers=true
註解。將註解新增至節點或節點集區,這些節點或節點集區不會為叢集中任何外部 Ingress 或LoadBalancer
Service 參照的任何 Service 執行任何服務 Pod。
使用負載平衡器記錄檔排解問題
您可以透過內部直通式網路負載平衡器記錄和外部直通式網路負載平衡器記錄,排解負載平衡器問題,並將負載平衡器的流量與 GKE 資源建立關聯。
系統會依連線匯總記錄,並以近乎即時的速度匯出。系統會為參與 LoadBalancer 服務資料路徑的每個 GKE 節點產生記錄,包括輸入和輸出流量。記錄項目包含 GKE 資源的其他欄位,例如:
- 叢集名稱
- 叢集位置
- 服務名稱
- 服務命名空間
- Pod 名稱
- Pod 命名空間
使用診斷工具排解問題
check-gke-ingress
診斷工具會檢查 Ingress 資源,找出常見的設定錯誤。您可以使用 check-gke-ingress
工具執行下列操作:
- 在叢集上執行
gcpdiag
指令列工具。檢查規則gke/ERR/2023_004
部分會顯示 Ingress 結果。 - 按照check-gke-ingress中的操作說明,單獨使用
check-gke-ingress
工具,或將其做為 kubectl 外掛程式。