排解 GKE 中的負載平衡問題

Google Kubernetes Engine (GKE) 的負載平衡問題可能會導致服務中斷,例如發生 HTTP 502 錯誤,或無法存取應用程式。

請參閱本文,瞭解如何排解外部 Ingress 的 502 錯誤,以及如何使用負載平衡器記錄和診斷工具 (例如 check-gke-ingress) 找出問題。

平台管理員和營運人員,以及在 GKE 中設定及維護負載平衡服務的應用程式開發人員,請務必詳閱本文資訊。如要進一步瞭解 Cloud de Confiance by S3NS 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。

外部 Ingress 產生 HTTP 502 錯誤

請按照下列指引,排解外部 Ingress 資源的 HTTP 502 錯誤:

  1. 為與 Ingress 參照的每個 GKE 服務相關聯的後端服務啟用記錄
  2. 使用狀態詳細資料找出 HTTP 502 回應的原因。如果狀態詳細資料指出 HTTP 502 回應來自後端,則需要對提供服務的 Pod 進行疑難排解,而非負載平衡器。

非代管執行個體群組

如果外部 Ingress 使用非代管執行個體群組後端,您可能會遇到外部 Ingress 資源的 HTTP 502 錯誤。如果符合下列「所有」條件,就會發生這個問題:

  • 叢集在所有節點集區中擁有大量節點。
  • Ingress 參照的一或多個服務,其服務 Pod 僅位於少數節點上。
  • Ingress 參照的服務會使用 externalTrafficPolicy: Local

如要判斷外部 Ingress 是否使用非代管執行個體群組後端,請執行下列操作:

  1. 前往 Cloud de Confiance 控制台的「Ingress」頁面。

    前往 Ingress

  2. 按一下外部 Ingress 的名稱。

  3. 按一下「負載平衡器」的名稱。系統會顯示「負載平衡詳細資料」頁面。

  4. 查看「後端服務」一節中的表格,判斷外部 Ingress 是否使用 NEG 或執行個體群組。

如要解決這個問題,請採取下列任一做法:

  • 使用 VPC 原生叢集。
  • 針對外部 Ingress 參照的每個 Service 使用 externalTrafficPolicy: Cluster。這個解決方案會導致您遺失封包來源中的原始用戶端 IP 位址。
  • 使用 node.kubernetes.io/exclude-from-external-load-balancers=true 註解。將註解新增至未執行任何服務 Pod 的節點或節點集區,這些服務 Pod 適用於叢集中任何外部 Ingress 或 LoadBalancer 服務參照的任何服務。

使用負載平衡器記錄檔排解問題

您可以透過內部直通式網路負載平衡器記錄外部直通式網路負載平衡器記錄,排解負載平衡器問題,並將負載平衡器的流量與 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 外掛程式。