排解內部應用程式負載平衡器的問題

本指南說明如何排解 Google Cloud 內部應用程式負載平衡器的設定問題。在按照本指南操作之前,請先熟悉以下內容:

排解網路分析器的常見問題

網路分析器會自動監控虛擬私有雲網路設定,並偵測不盡理想的設定和錯誤設定。它會找出網路故障、提供根本原因資訊,並建議可能的解決方法。如要瞭解 Network Analyzer 自動偵測到的各種錯誤設定情況,請參閱 Network Analyzer 說明文件中的「負載平衡器深入分析」。

Google Cloud 控制台提供 Network Intelligence Center 中的 Network Analyzer。

前往網路分析器

後端有不相容的平衡模式

建立負載平衡器時,您可能會看到以下錯誤訊息:

Validation failed for instance group INSTANCE_GROUP:

backend services 1 and 2 point to the same instance group
but the backends have incompatible balancing_mode. Values should be the same.

當您嘗試在兩個不同的負載平衡器中使用相同的後端,且後端沒有相容的平衡模式時,就會發生這種情況。

如要瞭解詳情,請參考下列資源:

經過負載平衡後的流量沒有原始用戶端的來源位址

請放心,這是正常情況。 內部應用程式負載平衡器會做為 HTTP(S) 反向 Proxy (閘道) 運作。當用戶端程式開啟與 INTERNAL_MANAGED 轉送規則 IP 位址的連線時,連線會終止於 Proxy 位置,Proxy 便會處理透過該連線傳送的要求。Proxy 會根據網址對應和其他因素,為每個要求選取一個後端來接收要求。接著 Proxy 將要求傳送到所選後端。因此,從後端的觀點來看,傳入封包的來源是該地區僅限 Proxy 子網路的 IP 位址。

負載平衡器拒絕要求

Proxy 會根據負載平衡器網址對應中的路徑比對器,為每個要求選取一個後端來接收要求。如果網址對應沒有為要求定義路徑比對器,就無法選取後端服務,因此會傳回 HTTP 404 (Not Found) 回應碼。

負載平衡器無法連線到後端

您需要設定保護後端伺服器的防火牆,以允許從您分配給內部 HTTP(S) 負載平衡器地區的僅限 Proxy 子網路範圍內的 Proxy 輸入流量。

Proxy 會使用後端服務設定所指定的連線設定連線到後端。如果這些值與您後端執行的伺服器設定不符,Proxy 就無法將要求轉送到後端。

健康狀態檢查探針無法連線至後端

如要確認健康狀態檢查流量傳送至後端 VM,請啟用健康狀態檢查記錄功能,並搜尋成功的記錄項目。

用戶端無法連線到負載平衡器

Proxy 會偵聽連到負載平衡器的 IP 位址的連線和轉送規則中設定的通訊埠 (例如 10.1.2.3:80),以及轉送規則 (HTTP 或 HTTPS) 中指定的通訊協定。如果您的用戶端無法連線,請確認他們使用的位址、通訊埠和通訊協定正確無誤。

確認防火牆沒有封鎖用戶端執行個體和負載平衡 IP 位址之間的通訊。

確認用戶端與負載平衡器位於相同的地區。內部 HTTP(S) 負載平衡是地區性產品,因此所有用戶端 (和後端) 都必須與負載平衡器資源位於相同的地區。

共用虛擬私有雲的機構政策限制

如果您在使用共用虛擬私有雲,且無法在特定子網路中建立新的內部應用程式負載平衡器,原因可能在於組織政策。請在組織策略中,將該子網路新增到允許的子網路清單中,或是與您的機構組織管理員聯絡。詳情請參閱 constraints/compute.restrictSharedVpcSubnetworks

負載平衡器未將流量平均分配到各個可用區

您可能會發現內部應用程式負載平衡器流量在各區域之間不平衡。尤其是當後端容量的使用率偏低 (低於 10%) 時,就可能發生這種情況。

由於流量只會傳送至單一區域中的少數伺服器,因此這類行為可能會影響整體延遲時間。

如要均勻分配各區的流量,您可以進行下列設定變更:

  • 使用 RATE 平衡模式,並設定較低的 max-rate-per-instance 目標容量。
  • 使用 LocalityLbPolicy 後端流量政策,並搭配 LEAST_REQUEST 的負載平衡演算法。

不明的 5xx 錯誤

如果是負載平衡器 Proxy 與其後端之間的通訊問題導致錯誤,負載平衡器會產生 HTTP 狀態碼 (5xx),並將該狀態碼傳回給用戶端。並非所有 HTTP 5xx 錯誤都是由負載平衡器產生,舉例來說,如果後端向負載平衡器傳送 HTTP 5xx 回應,負載平衡器會將該回應轉送給用戶端。如要判斷 HTTP 5xx 回應是從後端轉送,還是由負載平衡器 Proxy 產生,請查看負載平衡器記錄proxyStatus 欄位。

內部應用程式負載平衡器的設定變更 (例如新增或移除後端服務),可能會導致使用者在短暫時間內看到 HTTP 狀態碼 503。當這些設定變更在全球範圍內傳播至 Envoy 時,您會看到 proxyStatus 欄位與 connection_refused 記錄字串相符的記錄項目。

如果完成負載平衡器設定後,HTTP 5xx 狀態碼持續出現超過幾分鐘的時間,請按照下列步驟排解 HTTP 5xx 回應問題:

  1. 確認您已設定防火牆規則,允許系統執行健康狀態檢查。如果沒有,負載平衡器記錄通常會有 proxyStatusdestination_unavailable 相符,這表示負載平衡器認為後端無法使用。

  2. 確認健康狀態檢查流量傳送至後端 VM。如要使用這項功能,請啟用健康狀態檢查記錄功能,並搜尋成功的記錄項目。

    對於新的負載平衡器,缺少成功的健康狀態檢查項目,並不代表健康狀態檢查流量未到達後端。這可能表示後端的初始健康狀態尚未從 UNHEALTHY 變更為其他狀態。只有在健康狀態檢查探測器收到後端傳送的 HTTP 200 OK 回應後,才會看到成功的健康狀態檢查記錄項目。

  3. 請確認在後端執行個體上執行的 HTTP 伺服器軟體的 keepalive 設定參數,不會低於負載平衡器的 keepalive 逾時值,後者固定為 10 分鐘 (600 秒),且無法設定。

    當後端連線在傳送 HTTP 要求時或在收到完整 HTTP 回應前意外關閉時,負載平衡器會產生 HTTP 5xx 狀態碼。這是因為在後端執行個體上執行的網路伺服器軟體的保留設定參數,小於負載平衡器的固定保留逾時時間。請確認每個後端的 HTTP 伺服器軟體的保留連線逾時設定值略大於 10 分鐘 (建議值為 620 秒)。

限制

如果您無法順利使用內部應用程式負載平衡器搭配其他Google Cloud 網路功能,請注意目前的相容性限制