排解內部 TCP/UDP 負載平衡的問題

本指南針對 Google Cloud Platform 內部 TCP/UDP 負載平衡器的設定問題,說明疑難排解的方式。

總覽

以下是我們將在本指南中討論的問題類型:

  • 一般連線能力問題
  • 後端容錯移轉問題 (Beta 版)
  • 以負載平衡器做為下一個躍點的問題 (Beta 版)

事前準備

請先熟讀下列頁面內容後,再研究問題。

針對一般連線能力部分:

針對容錯移轉部分:

針對下一個躍點部分:

針對一般連線能力問題進行疑難排解

  • 發生的情況:我無法從另一個地區的 VM 用戶端連線到內部 TCP/UDP 負載平衡器。
  • 原因:內部 TCP/UDP 負載平衡器存有地區限制,它只能讓所在地區與自己相同的用戶端存取。

如果您無法連線到內部 TCP/UDP 負載平衡器,請檢查以下問題:

  • 確認您已將允許輸入防火牆規則定義成允許對後端 VM 執行健康狀態檢查。
  • 確認允許輸入防火牆規則會讓來自用戶端的流量傳送到後端 VM。
  • 確認連線到負載平衡器的用戶端位於與負載平衡器相同的地區。

針對共用虛擬私人雲端問題進行疑難排解

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

針對容錯移轉問題進行疑難排解

如果您已經為內部 TCP/UDP 負載平衡器設定了容錯移轉功能,下列幾個小節將會說明可能會發生的問題。

連線能力

  • 確認您至少指定了一個容錯移轉後端。
  • 確認您的容錯移轉政策設定是否正確:
    • 容錯移轉比例
    • 在所有後端 VM 的健康狀態都不良時會捨棄流量
    • 停用會在容錯移轉時排除連線的功能

代管執行個體群組和容錯移轉的問題

  • 發生的情況:使用中的集區來回在主要後端和容錯移轉後端之間切換。
  • 可能的原因:使用有自動調度資源和容錯移轉功能的代管執行個體群組,可能會導致使用中集區在容錯移轉和容錯回復後端之間來回地容錯移轉及容錯回復。GCP 不會阻止您為代管執行個體群組設定容錯移轉的功能,因為這種設定可能會對您的部署作業有好處。

停用容錯移轉群組的連線排除限制

只有在後端服務使用通訊協定 TCP 時,停用連線排除才會發生作用。

如果您在連線排除功能停用時建立使用 UDP 的後端服務,就會看到以下錯誤訊息:

gcloud beta compute backend-services create my-failover-bs
  --load-balancing-scheme internal
  --health-checks my-tcp-health-check
  --region us-central1
  --no-connection-drain-on-failover
  --drop-traffic-if-unhealthy
  --failover-ratio 0.5
  --protocol UDP
ERROR: (gcloud.beta.compute.backend-services.create) Invalid value for
[--protocol]: can only specify --connection-drain-on-failover if the protocol is
TCP.

容錯移轉後端的 API 版本

目前只有 Beta 版 API 才提供容錯移轉的選項。如果您在建立後端服務時失敗,還看到指出 failover options 不是有效欄位的錯誤訊息,請確認您是使用正確的 API (gcloud beta compute backend-services...) 來建立後端。

流量會傳送到非預期的後端 VM

請先檢查下列事項:如果用戶端 VM「也是」負載平衡器的後端 VM,則傳送至負載平衡器轉送規則 IP 位址的連線,一定會是由該後端 VM 來回應。詳情請參閱測試來自單一用戶端的連線,以及從已負載平衡的 VM 發出要求

如果用戶端 VM「不是」負載平衡器的後端 VM:

  • 針對來自單一用戶端的要求,請參閱測試來自單一用戶端的連線,以便瞭解這種方法的限制。

  • 確認您已經把允許輸入防火牆規則設定成會允許執行健康狀態檢查

  • 針對容錯移轉設定,請確保您瞭解成員資格在使用中集區中的運作方式,以及 GCP 何時會執行容錯移轉和容錯回復。請檢查您負載平衡器的設定:

    • 使用 GCP Console 來查看在每個後端執行個體群組中,健康狀態良好的後端數量。GCP Console 也會顯示有哪些 VM 在使用中集區中。

    • 確認負載平衡器的容錯移轉比例已正確設定。舉例來說,如果您有 10 個主要 VM,且將容錯移轉比例設定為 0.2,則 GCP 會在健康狀態良好的主要 VM 數量「少於」2 個時 (10 × 0.2 = 2) 執行容錯移轉。0.0 的容錯移轉比例是有特殊意義的,這代表 GCP 會在所有主要 VM 的健康狀態都不佳時執行容錯移轉。

現有的連線在容錯移轉或容錯回復期間遭到終止

編輯您後端服務的容錯移轉政策,確認在容錯移轉時排除連線的功能已停用。

針對以負載平衡器做為下一個躍點的問題進行疑難排解

當您將內部 TCP/UDP 負載平衡器設定為自訂靜態路徑的下一個躍點時,可能會發生以下問題:

連線能力

  • 如果您無法連線偵測 (ping) 到自己的後端,請記住,已將內部 TCP/UDP 負載平衡器設定為下一個躍點的路徑只適用於 TCP 和 UDP 流量,其他通訊協定的封包 (例如 ICMP) 都會遭到捨棄。

  • 當您將內部 TCP/UDP 負載平衡器當做自訂靜態路徑的下一個躍點時,無論您為負載平衡器的內部後端服務所設定的通訊協定為何,且無論您為負載平衡器的內部轉送規則設定了什麼通訊埠,系統都會把所有 TCP 和 UDP 流量傳送到健康狀態良好的負載平衡器後端 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.
  • 當您建立自訂靜態路徑時,無法建立其目的地與某個子網路路徑完全相同或更明確 (遮蓋更長) 的自訂靜態路徑。詳情請參閱適用範圍與順序

  • 如果系統將封包傳送到非預期的目的地,請移除虛擬私人雲端中目的地更明確的其他路徑。請參閱轉送順序,以瞭解 GCP 的路徑選取方式。

下一個躍點的 API 版本

目前只有 Beta 版 API 才提供將內部 TCP/UDP 負載平衡器當做下一個躍點 (--next-hop-ilb) 的功能。如果您在建立靜態路徑時失敗,請確認您是使用正確的 API (gcloud beta compute routes create...) 來建立路徑。

不支援網路標記

您無法在下一個躍點為內部 TCP/UDP 負載平衡器時,將網路標記指派給自訂靜態路徑。舉例來說,下列 gcloud 指令會產生以下錯誤訊息:

$ gcloud beta compute routes create example-route \
--destination-range=0.0.0.0/0 \
--next-hop-ilb=internal-lb-forwarding-rule \
--tags='my_tag'

ERROR: (gcloud.beta.compute.routes.create) Could not fetch resource:
 - Invalid value for field 'resource.tags': ''. Tag is not supported for routes
 with next hop ilb.

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Load Balancing