本指南說明如何排解 Google Cloud 內部直通式網路負載平衡器的設定問題。請先熟讀下列頁面內容後,再研究問題:
排解網路分析器的常見問題
網路分析器會自動監控虛擬私有雲網路設定,並偵測不盡理想和錯誤的設定。識別網路故障、提供根本原因資訊,並建議可能的解決方法。如要瞭解網路分析器自動偵測到的各種設定錯誤情況,請參閱網路分析器說明文件中的「負載平衡器深入分析」。
Network Analyzer 位於 Google Cloud 控制台,是 Network Intelligence Center 的一部分。
前往網路分析器後端平衡模式不相容
建立負載平衡器時,您可能會看到以下錯誤訊息:
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.
如果您嘗試在兩個不同的負載平衡器中使用相同的後端,但後端沒有相容的平衡模式,就會發生這種情況。
如要瞭解詳情,請參考下列資源:
排解一般連線問題
如果無法連線至內部直通式網路負載平衡器,請檢查下列常見問題。
確認防火牆規則
- 確認您已將允許輸入防火牆規則定義成允許對後端 VM 執行健康狀態檢查。
- 確認允許輸入防火牆規則會讓來自用戶端的流量傳送到後端 VM。
- 確認相關防火牆規則存在,可讓流量傳送到負載平衡器使用的通訊埠上的後端 VM。
- 如果您使用防火牆規則的目標標記,請務必正確標記負載平衡器的後端 VM。
如要瞭解如何設定內部直通式網路負載平衡器所需的防火牆規則,請參閱設定防火牆規則。
確認後端 VM 正在執行訪客環境
如果可以連線至狀況良好的後端 VM,但無法連線至負載平衡器,可能是 VM 上的訪客環境 (先前稱為 Windows 訪客環境或 Linux 訪客環境) 未執行,或是無法與中繼資料伺服器 (metadata.google.internal、169.254.169.254) 通訊。
請檢查下列事項:
- 請確認後端 VM 已安裝並執行訪客環境。
- 確認後端 VM 客戶作業系統中的防火牆規則 (
iptables或 Windows 防火牆) 不會封鎖對中繼資料伺服器的存取權。
確認後端 VM 接受傳送至負載平衡器的封包
每個後端 VM 都必須設定為接受傳送至負載平衡器的封包。也就是說,傳遞至後端 VM 的封包目的地是負載平衡器的 IP 位址。在大多數情況下,這項作業是透過本機路由完成。
如果是從 Google Cloud 映像檔建立的 VM,Guest agent 會安裝負載平衡器 IP 位址的本機路徑。以 Container-Optimized OS 為基礎的 Google Kubernetes Engine 執行個體會改用 iptables 實作這項功能。
在 Linux 後端 VM 上,您可以執行下列指令,確認本機路徑是否存在。請將 LOAD_BALANCER_IP 替換為負載平衡器的 IP 位址:
sudo ip route list table local | grep LOAD_BALANCER_IP
驗證後端 VM 上的服務 IP 位址和通訊埠繫結
傳送至內部直通式網路負載平衡器的封包,會以負載平衡器本身的 IP 位址做為目的地 IP 位址,抵達後端 VM。這類負載平衡器不是 Proxy,這是正常現象。
在後端 VM 上執行的軟體必須執行下列操作:
- 監聽 (繫結至) 負載平衡器的 IP 位址或任何 IP 位址 (
0.0.0.0或::) - 監聽 (繫結至) 負載平衡器轉送規則中包含的通訊埠
如要測試這項功能,請使用 SSH 或 RDP 連線至後端 VM。然後使用 curl、telnet 或類似工具執行下列測試:
- 嘗試使用後端 VM 本身的內部 IP 位址 (
127.0.0.1) 或 localhost 聯絡服務。 - 使用負載平衡器轉送規則的 IP 位址聯絡服務,嘗試連線至服務。
檢查用戶端 VM 是否與負載平衡器位於相同地區
如果連線至負載平衡器的用戶端位於其他區域,請務必啟用全域存取權。
確認健康狀態檢查流量可傳送至後端 VM
如要確認健康狀態檢查流量傳送至後端 VM,請啟用健康狀態檢查記錄功能,並搜尋成功的記錄項目。
您也可以查看後端的「健康狀態」,確認負載平衡器功能運作正常。
如果後端沒有健康狀態良好的執行個體,請確認已設定適當的健康狀態檢查,且後端中的每個 VM 都正在監聽設定的健康狀態檢查通訊埠。
在相同虛擬私有雲網路的用戶端中,執行下列指令,確認後端 VM 正在監聽特定 TCP 連接埠:
telnet SERVER_IP_ADDRESS PORT
更改下列內容:
- SERVER_IP_ADDRESS:後端 VM 的 IP 位址。
- PORT:您為健康狀態檢查設定的通訊埠。健康狀態檢查通訊埠預設為
80。
或者,您也可以使用 SSH 連線至後端 VM,然後執行下列指令:
curl localhost:PORT
再次將 PORT 替換為您為健康狀態檢查設定的通訊埠。
您也可以執行下列指令來進行這項測試:
netstat -npal | grep LISTEN
在輸出內容中,檢查下列項目:
<var>LB_IP_ADDRESS</var>:<var>PORT</var>0.0.0.0:<var>PORT</var>:::<var>PORT</var>
這無法判斷路由是否設定正確,可回應負載平衡器的 IP 位址。這是另一個問題,但症狀類似。如要進行路由,請執行 ip route list table local 指令,並確認負載平衡器的 IP 位址已列出,詳情請參閱「確認後端 VM 接受傳送至負載平衡器的封包」。
排解效能問題
如果發現效能問題和延遲時間增加,請檢查下列常見問題。
驗證伺服器功能
如果所有後端伺服器都回應健康狀態檢查,請確認直接在伺服器上發出要求時,來自用戶端的要求是否正常運作。舉例來說,如果用戶端透過負載平衡器將 HTTP 要求傳送至伺服器,但沒有收到回應,或是回應速度比平常慢很多,請在每個後端伺服器上發出相同的 HTTP 要求,並觀察行為。
如果從伺服器本身發出要求時,任何個別後端伺服器行為異常,即可判斷伺服器應用程式堆疊運作不正常。您可以進一步專注於應用程式本身的疑難排解。如果所有伺服器運作正常,下一步就是檢查用戶端和網路。
確認網路連線和延遲
如果所有後端伺服器都能正確回應要求,請確認網路延遲。在用戶端 VM 中,對每個伺服器發出持續的 ping 指令,如下所示:
ping SERVER_IP_ADDRESS
這項測試會顯示內建網路延遲時間,以及網路是否會丟棄封包。在某些情況下,防火牆規則可能會封鎖 ICMP 流量。如果發生這種情況,這項測試就無法產生任何結果。請洽詢防火牆規則管理員,確認是否發生這種情況。
如果 ping 指令顯示的延遲時間明顯高於正常值,或是封包遺失率明顯偏高,請開啟Google Cloud 支援案件,以便進一步調查。
找出有問題的用戶端/伺服器組合
如果網路 ping 測試結果顯示延遲時間短且沒有封包遺失,下一步就是找出哪些特定用戶端/伺服器組合 (如有) 會產生問題。方法是將後端伺服器數量減半,直到伺服器數量達到 1 為止,同時重現問題行為 (例如高延遲或沒有回應)。
如果發現一或多個用戶端/伺服器組合有問題,請執行流量擷取和分析。
如果沒有發現任何問題,請跳至效能測試。
擷取及分析流量
如果發現特定用戶端/伺服器組合有問題,可以使用封包擷取功能,找出導致延遲或中斷的通訊部分。您可以使用 tcpdump 擷取封包,方法如下:
- 在伺服器上安裝 tcpdump。
- 在伺服器上啟動 tcpdump 擷取作業。
從用戶端發出範例要求,例如:
curl URL
分析 tcpdump 輸出內容,找出問題。
執行效能測試
如果沒有發現任何有問題的用戶端/伺服器組合,且所有用戶端和伺服器的整體效能都低於預期,請考慮進行下列測試:
- 一個用戶端和一個伺服器,不含負載平衡。
一個用戶端和一個伺服器,並進行負載平衡。
結果:根據測試 [1] 和 [2] 的結果,判斷負載平衡器是否導致問題。
一個用戶端和多個伺服器,並進行負載平衡。
結果:找出單一用戶端的成效上限。
多個用戶端和一個伺服器,並進行負載平衡。
結果:找出單一伺服器的效能限制。
多個用戶端和多個伺服器,但不進行負載平衡。
結果:找出網路的效能限制。
使用多個用戶端和伺服器執行壓力測試時,用戶端或伺服器資源 (CPU、記憶體、I/O) 可能會成為瓶頸,導致匯總結果減少。即使每個用戶端和伺服器運作正常,匯總結果仍可能品質不佳。
排解共用虛擬私有雲問題
如果您使用共用虛擬私有雲,且無法在特定子網路中建立新的內部直通式網路負載平衡器,原因可能在於組織政策。請在組織策略中,將該子網路新增到允許的子網路清單中,或是與您的機構組織管理員聯絡。詳情請參閱 constraints/compute.restrictSharedVpcSubnetworks 限制。
排解容錯移轉問題
如果您已為內部直通式網路負載平衡器設定容錯移轉功能,請按照下列步驟驗證設定:
- 確認您已經把允許輸入防火牆規則設定成會允許執行健康狀態檢查。
- 請務必瞭解後端選取和連線追蹤,以及容錯移轉概念。
- 確認您至少指定了一個容錯移轉後端。
- 使用 Google Cloud 控制台或
gcloud compute backend-services get-health查看哪些後端健康狀態良好,判斷哪些 VM 是合格的後端。 - 確認容錯移轉比例已正確設定。
- 我們不建議搭配容錯移轉功能使用已啟用自動調度資源的代管執行個體群組,因為自動調度資源會變更主要後端、容錯移轉後端或兩者的數量。這可能會導致符合資格的後端組合意外變更,因為容錯移轉比率是固定的。
- 如果用戶端 VM 也是負載平衡的後端 VM,則連線至負載平衡器轉送規則 IP 位址的連線,會傳送至後端 VM 本身。詳情請參閱「從單一用戶端進行測試」。
排解以負載平衡器做為下一個躍點的問題
當您將內部直通式網路負載平衡器設定為自訂靜態路徑的下一個躍點時,可能會發生以下問題:
連線問題
如果無法連線偵測 (ping) 到路徑目的地範圍內的 IP 位址,且該路徑的下一個躍點是內部直通式網路負載平衡器的轉送規則,請注意,使用這類下一個躍點的路徑可能無法處理 ICMP 流量,具體情況取決於路徑的建立時間。如果路徑是在 2021 年 5 月 15 日前建立,則只會處理 TCP 和 UDP 流量,直到 2021 年 8 月 16 日為止。自 2021 年 8 月 16 日起,無論路徑建立時間為何,所有路徑都會自動轉送所有通訊協定流量 (TCP、UDP 和 ICMP)。如果不想等到那時,可以建立新路徑並刪除舊路徑,立即啟用 Ping 功能。
使用內部直通式網路負載平衡器做為自訂靜態路徑的下一個躍點時,所有流量都會傳送至負載平衡器的正常後端 VM,無論為負載平衡器的內部後端服務設定的通訊協定為何,也無論在負載平衡器的內部轉送規則中設定的通訊埠為何。
確認您建立的允許輸入防火牆規則會正確地找出應該要透過自訂靜態路徑的下一個躍點傳送到後端 VM 的流量來源。就算封包是透過自訂靜態路徑來傳送的,抵達後端 VM 的封包也會保留自己的來源 IP 位址。
目的地範圍的值無效
自訂靜態路徑的目的地範圍,不能比虛擬私人雲端網路中的任何子網路路徑更明確。如果您在建立自訂靜態路徑時收到以下錯誤訊息:
Invalid value for field 'resource.destRange': [ROUTE_DESTINATION]. [ROUTE_DESTINATION] hides the address space of the network .... Cannot change the routing of packets destined for the network.
當您建立自訂靜態路徑時,無法建立其目的地與某個子網路路徑完全相同或更明確 (遮蓋更長) 的自訂靜態路徑。詳情請參閱適用範圍與順序。
如果系統將封包傳送到非預期的目的地,請移除虛擬私人雲端中目的地更明確的其他路徑。請參閱轉送順序,以瞭解 Google Cloud 路徑選取方式。
排解記錄問題
如果您為內部直通式網路負載平衡器設定記錄功能,可能會發生下列問題:
- 如果取樣封包數不足以擷取 RTT,部分記錄檔可能就不會顯示 RTT 測量結果,例如位元組值。低流量連線較常發生這種情況。
- RTT 值僅適用於 TCP 流程。
- 部分封包會在沒有酬載的情況下傳送。如果系統取樣到內容只有標頭的封包,位元組的值會顯示
0。
後續步驟
- 請參閱內部直通式網路負載平衡器記錄和監控,瞭解如何為內部直通式網路負載平衡器設定記錄和監控。
- 如要瞭解如何透過連線至虛擬私有雲網路的對等互連網路存取內部直通式網路負載平衡器,請參閱內部直通式網路負載平衡器和已連線網路一文。