排解 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 註解。將註解新增至節點或節點集區,這些節點或節點集區不會為叢集中任何外部 Ingress 或 LoadBalancer Service 參照的任何 Service 執行任何服務 Pod。

L4 負載平衡器記錄設定

如果您已為外部直通式網路負載平衡器或內部直通式網路負載平衡器啟用記錄功能,本節將提供疑難排解資訊。

監控記錄設定的狀態

GKE L4LB 控制器會透過 Service 的 status.conditions 類型,提供記錄協調狀態的意見回饋。您可以執行下列指令來檢查這項狀態:

kubectl get svc SERVICE_NAME -o yaml

更改下列內容:

  • SERVICE_NAME:叢集名稱。

在輸出內容中,找出 LoggingConfigManaged 條件類型。下表說明可能導致這種情況的原因:

條件狀態 原因 說明
已協調 控制器會主動強制執行 L4LBConfig CRD 中定義的記錄設定。
非代管 L4LBConfig CRD 缺少 logging 區段,或註解已遭移除。控制器已停止管理,並將後端服務維持在最後已知的狀態。
找不到 找不到 Service 註解中參照的 L4LBConfig 資源。
無效 L4LBConfig 資源未通過 optionalFields 參數的交叉驗證。
錯誤 後端服務對帳時發生錯誤。

瞭解滑行行為

如果從 Service 資訊清單中移除 networking.gke.io/l4lb-config 註解,或刪除參照的 L4LBConfig 資源,設定就會進入 Coast 狀態。

在此狀態下,GKE 控制器會停止管理記錄設定,但不會將 Cloud de Confiance by S3NS 後端服務重設為預設設定。後端服務會維持最後已知的良好狀態。系統通常會發出警告事件,通知您 Kubernetes 不再控管設定。

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

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