目標集區型外部直通式網路負載平衡器簡介

外部直通式網路負載平衡器是第 4 層的區域性負載平衡器。 外部直通式網路負載平衡器會在虛擬私有雲 (VPC) 網路中,相同區域的後端虛擬機器 (VM) 執行個體之間分配 TCP 和 UDP 流量。外部直通式網路負載平衡器可接收下列來源的流量:

  • 網際網路上的任何用戶端
  • Google Cloud 具備外部 IP 的 VM
  • Google Cloud 可透過 Cloud NAT 或執行個體型 NAT 存取網際網路的 VM

視轉送規則設定而定,每個以目標集區為基礎的負載平衡器支援下列其中一種通訊協定流量:

  • TCP
  • UDP
  • TCP 和 UDP

負載平衡器的範圍為地區性,而非全域性。也就是說,外部直通式網路負載平衡器的所有後端執行個體都必須位於同一個區域。您可以將後端放在該區域的任何可用區。

外部直通式網路負載平衡器支援所有通訊埠。您可以使用外部直通網路負載平衡器,對 TCP 或 UDP 流量進行負載平衡。由於負載平衡器是直通式負載平衡器,後端會自行終止達到負載平衡的 TCP 連線或 UDP 封包。舉例來說,您可能會在後端執行 HTTPS 網路伺服器,並使用外部直通網路負載平衡器將要求轉送至該伺服器,在後端本身終止 TLS。

如果您要在 GKE 中建構應用程式,建議使用內建的 GKE 服務控制器,這個控制器會代表 GKE 使用者部署 Google Cloud 負載平衡器。這與獨立負載平衡架構相同,但生命週期完全由 GKE 自動化控管。詳情請參閱使用服務公開應用程式

架構

負載平衡器由數個設定元件組成。單一負載平衡器可具有下列項目:

外部直通式網路負載平衡器一律有一個目標集區。多個轉送規則可以參照目標集區。

目標集區是負載平衡器的後端。指定流量要在哪些後端執行個體之間進行負載平衡。每個轉送規則都是負載平衡器的前端。請注意,每個專案的轉送規則和目標集區數量都有限制

外部直通式網路負載平衡器會根據連入的 IP 通訊協定資料,平衡系統上的負載,例如位址、通訊埠和通訊協定類型。

外部直通式網路負載平衡器是直通負載平衡器,因此後端會收到原始的用戶端要求。外部直通式網路負載平衡器不會執行任何傳輸層安全性 (TLS) 卸載或 Proxy。流量會直接轉送至您的 VM。

為負載平衡器建立轉送規則時,會收到一個臨時的虛擬 IP 位址 (VIP) 或保留一個來自地區網路模塊的 VIP。

然後,您將這項轉送規則與目標集區建立關聯。VIP 是從 Google 的全球存取點獲得的,但後端則是地區性的。負載平衡器的後端不能跨越多個地區。

您可以使用 Google Cloud 防火牆來控制或篩選後端 VM 的存取權。

外部直通式網路負載平衡器會檢查來源和目的地通訊埠、IP 位址和通訊協定,以判斷如何轉送封包。針對 TCP 流量,您可以設定工作階段相依性來修改負載平衡器的轉送行為。外部直通式網路負載平衡器會將封包轉送至目標集區中執行個體的第一個網路介面 (nic0)。

負載平衡器會保留連入封包的來源 IP 位址。傳入封包的目的地 IP 位址是與負載平衡器的轉送規則關聯的地區外部 IP 位址。

負載分配演算法

依預設,如要分配流量到執行個體,工作階段相依性值會設定為 NONE。Cloud Load Balancing 會根據來源 IP 和通訊埠以及目的地 IP 和通訊埠的雜湊,挑選執行個體。這表示連入的 TCP 連線分散於執行個體之間,而且每個新的連線都可以前往不同的執行個體。系統會將連線的所有封包導向相同的執行個體,直到連線關閉為止。負載平衡過程中不考慮已建立的連線。

無論工作階段相依性設定為何,系統都會將連線的所有封包導向所選的執行個體,直到連線關閉為止。現有連線不會影響新連入連線的負載平衡決策。如果長時間的 TCP 連線正在使用中,這會導致後端之間的不平衡。

如果您需要讓來自用戶端的多個連線前往相同的執行個體,可選擇不同的工作階段相依性設定。

目標集區

目標集區資源會定義執行個體群組,接收來自轉送規則的傳入流量。當轉送規則將流量導向目標集區時,Cloud Load Balancing 會根據來源 IP 和通訊埠以及目的地 IP 和通訊埠的雜湊,從這些目標集區中挑選執行個體。每個目標集區都在單一區域中運作,並將流量分配給後端執行個體的第一個網路介面 (nic0)。如要進一步瞭解如何將流量分配給執行個體,請參閱「負載分配演算法」一節。

外部直通式網路負載平衡器不是 Proxy。來自後端 VM 的回應會直接傳送至用戶端,而不會透過負載平衡器傳回。負載平衡器會保留封包的來源 IP 位址。傳入封包的目的地 IP 位址是與負載平衡器轉送規則相關聯的地區外部 IP 位址。因此:

  • 做為外部直通式網路負載平衡器的後端 VM 的執行個體,必須執行適當的 Linux 訪客環境Windows 訪客環境或其他提供等效功能的處理程序。

    訪客 OS 環境 (或同等程序) 負責設定每個後端 VM 的本機路徑。這些路徑允許 VM 接受目的地與負載平衡器轉送規則的 IP 位址相符的封包。

  • 在接受負載平衡流量的後端執行個體上,您必須將軟體設定為繫結與負載平衡器轉送規則關聯的 IP 位址 (或任何 IP 位址 0.0.0.0/0)。

外部直通式網路負載平衡器支援 Compute Engine 自動調度資源,可讓使用者根據後端利用率,對目標集區中的執行個體群組執行自動調度資源作業。詳情請參閱根據 CPU 使用率執行資源調度一文。

如果打算讓目標集區包含單一 VM 執行個體,則應考慮改用通訊協定轉送功能。

目標集區只能與處理 TCP 和 UDP 流量的轉送規則搭配使用。對於所有其他通訊協定,都必須建立目標執行個體。您必須先建立目標集區,才能搭配轉送規則使用。每個專案最多可包含 50 個目標集區。

轉送規則

轉送規則會與目標集區搭配運作,支援負載平衡。如要使用負載平衡,您必須建立轉送規則,將流量導向至特定目標集區。如未設定轉送規則,就無法進行負載平衡。

每個轉送規則都會將特定 IP 位址、通訊協定和 (選用) 通訊埠範圍,對應至單一目標集區。當流量傳送到由轉送規則處理的外部 IP 位址時,轉送規則會將該流量導向相應的目標集區。

如果您負載平衡的 UDP 封包在到達 Google Cloud VPC 網路前可能會出現分段,請參閱負載平衡和分段 UDP 封包

目標集區型外部直通式網路負載平衡器支援下列通訊協定,適用於每個轉送規則:TCPUDP。如要讓負載平衡器轉送所有 IP 通訊協定流量,請使用以後端服務為基礎的外部直通式網路負載平衡器

多個轉送規則

您可以為同一個外部直通式網路負載平衡器設定多個地區外部轉送規則。每個轉送規則可以具有不同的區域外部 IP 位址,或者多個轉送規則可以具有相同的區域外部 IP 位址。

對於這些使用案例,不妨試著設定多個地區外部轉送規則:

  • 您必須為同一個目標集區設定多個外部 IP 位址。
  • 您必須使用相同的外部 IP 位址,為同一目標集區設定不同的通訊埠範圍或不同的通訊協定。

使用多個轉送規則時,請務必設定在後端 VM 上執行的軟體,將軟體繫結至所有必要的 IP 位址。由於透過負載平衡器傳遞的封包目的地 IP 位址,是與相對應地區外部轉送規則關聯的地區外部 IP 位址,所以這是一個必要的步驟。

健康狀態檢查

健康狀態檢查可確保 Compute Engine 僅轉送新連線到狀態良好且準備就緒的執行個體。Compute Engine 會根據指定的頻率,將健康狀態檢查要求傳送至每個執行個體。如果執行個體超過允許的健康狀態檢查失敗次數,就不會再視為可接收新流量的合格執行個體。

為確保正常關機並關閉 TCP 連線,系統不會主動終止現有連線。不過,與健康狀態不良後端的現有連線不保證能長時間維持有效。如果可以,請盡快為狀況不佳的後端啟動安全關機程序。

健康狀況檢查工具持續查詢狀態不良的執行個體,並在達到指定的成功檢查數量之後將執行個體傳回集區。如果所有執行個體都標示為 UNHEALTHY,負載平衡器會將新流量導向所有現有的執行個體。

外部直通式網路負載平衡器依靠舊式 HTTP 健康狀態檢查來判斷執行個體的健康狀況。即使您的服務並未使用 HTTP,您也必須在健康狀態檢查系統可查詢的每個執行個體上執行基本網路伺服器。

外部直通式網路負載平衡器不支援舊版 HTTPS 健康狀態檢查,也無法與大多數其他類型的負載平衡器搭配使用。

防火牆規則

外部直通式網路負載平衡器的健康狀態檢查會從這些 IP 範圍傳送。您將需要建立允許輸入的防火牆規則,允許來自這些範圍的流量。

外部直通式網路負載平衡器是直通式負載平衡器,也就是說,防火牆規則必須允許來自用戶端來源 IP 位址的流量。如果您的服務在網際網路中開放,那麼最簡單的方式就是,允許來自所有 IP 範圍的流量。如要限制存取,只允許某些來源的 IP 位址,可以設定防火牆規則來強制執行該限制,不過仍必須允許來自健康狀況檢查 IP 範圍的存取。

如需防火牆規則範例和設定範例,請參閱外部直通網路負載平衡器的防火牆規則

要求和回傳封包的 IP 位址

後端 VM 從用戶端收到達到負載平衡的封包時,封包的來源和目的地如下:

  • 來源:與 Google Cloud VM 相關聯的外部 IP 位址,或是連線至負載平衡器的系統可透過網際網路路由傳輸的 IP 位址。
  • 目的地:負載平衡器轉送規則的 IP 位址。

由於負載平衡器是直通式負載平衡器 (而非 Proxy),封包抵達時會帶有負載平衡器轉送規則的目的地 IP 位址。設定在後端 VM 上執行的軟體,以執行下列操作:

  • 偵聽 (繫結) 負載平衡器的轉送規則 IP 位址或任何 IP 位址 (0.0.0.0::)
  • 如果負載平衡器轉送規則的通訊協定支援通訊埠:監聽 (繫結至) 負載平衡器轉送規則中包含的通訊埠

回傳封包會從負載平衡器的後端 VM 直接傳送至用戶端。回傳封包的來源和目的地 IP 位址取決於通訊協定:

  • TCP 是以連線為導向,因此後端 VM 必須使用來源 IP 位址與轉送規則 IP 位址相符的封包回覆,用戶端才能將回應封包與適當的 TCP 連線建立關聯。
  • UDP 沒有連線,因此後端 VM 可以傳送來源 IP 位址與轉送規則 IP 位址相符的回應封包,也可以傳送來源 IP 位址與 VM 任何指派 IP 位址相符的回應封包。實際上,大多數用戶端都希望回應來自傳送封包的 IP 位址。

下表摘要列出回應封包的來源和目的地:

流量類型 來源 目的地
TCP 負載平衡器轉送規則的 IP 位址 要求封包的來源
UDP 在大多數情況下,負載平衡器轉送規則的 IP 位址 1 要求封包的來源

1 如果 VM 具有外部 IP 位址,或您使用 Cloud NAT,也可以將回應封包的來源 IP 位址設為 VM NIC 的主要內部 IPv4 位址。 Google Cloud 或 Cloud NAT 會將回應封包的來源 IP 位址變更為 NIC 的外部 IPv4 位址或 Cloud NAT 外部 IPv4 位址,以便將回應封包傳送至用戶端的外部 IP 位址。不使用轉送規則的 IP 位址做為來源是進階情境,因為用戶端會從外部 IP 位址收到回應封包,而該 IP 位址與傳送要求封包的 IP 位址不符。

特殊轉送路徑

Google Cloud 會使用虛擬私有雲網路中未定義的特殊路徑進行健康狀態檢查。詳情請參閱健康狀態檢查路徑

共用 VPC 架構

下表摘要列出外部直通網路負載平衡器的共用虛擬私有雲元件:

IP 位址 轉送規則 後端元件
必須在將進行負載平衡的執行個體所屬的專案中定義地區外部 IP 位址 必須在目標集區中的執行個體所屬專案 (服務專案) 中定義地區外部轉送規則 必須在目標集區所屬的專案及存在的地區中定義目標集區。定義與目標集區相關的健康狀態檢查時,所在專案也必須是同一個。

流量分配

目標集區型外部直通式網路負載平衡器分配新連線的方式,取決於工作階段相依性的設定方式。

工作階段相依性

工作階段相依性會控管雜湊方法,用於將用戶端的新連線分配至負載平衡器的後端 VM。目標集區型負載平衡器會使用 sessionAffinity 參數設定工作階段相依性。

詳情請參閱「使用目標集區」。

負載平衡和分段 UDP 封包

如果要對 UDP 封包進行負載平衡,請注意以下幾點:

  1. 系統會正常處理所有設定的非分段封包。
  2. UDP 封包在到達 Google Cloud之前可能會先分段。介入的網路可能會等到所有片段送達後再轉送,因而造成延遲或遺失片段。 Google Cloud 不會等待所有片段,而是在每個片段送達時就會立刻轉送。
  3. 由於後續的 UDP 片段不含目的地通訊埠,因此在下列情況下可能會發生問題:

    • 如果目標集區工作階段相依性設為 NONE (5 個組合相依性),後續的片段可能會因為負載平衡器無法計算 5 個組合雜湊而捨棄。
    • 如果相同的負載平衡 IP 位址有多個 UDP 轉送規則,後續片段可能會得出錯誤的轉送規則。

若您想要分段的 UDP 封包,請執行下列操作:

  • 將工作階段相依性設定為 NONECLIENT_IP_PROTOCLIENT_IP
    • 將工作階段相依性設為 NONE,表示不需要維持相依性。因此,負載平衡器會使用 5 元組雜湊碼選取非分段封包的後端,但會使用 3 元組雜湊碼選取分段封包的後端。
    • 將工作階段相依性設定為 CLIENT_IP_PROTOCLIENT_IP,表示來源和目的地通訊埠不會用於雜湊,因此系統會為分段和未分段封包計算相同的雜湊。
  • 每個負載平衡的 IP 位址僅使用一個 UDP 轉送規則。這可確保所有片段都達成相同的轉送規則。

使用這些設定,來自同一封包的 UDP 片段將轉送到同一執行個體以進行重組。

將目標執行個體做為後端

如果您使用目標執行個體做為外部直通網路負載平衡器的後端,且預期會有 UDP 封包片段,請為每個負載平衡的 IP 位址僅使用一個 UDP 轉送規則,並將轉送規則設定為接受所有連接埠 0 到 65535 的流量。這可確保所有片段都達成相同的轉送規則,即使這些片段沒有相同的目的地連接埠也一樣。

限制

  • 您無法使用 Google Cloud 控制台建立以目標集區為基礎的外部直通式網路負載平衡器。請改用 gcloud 或 REST API。
  • 目標集區型外部直通式網路負載平衡器不支援 Cloud Logging。

後續步驟