本文將介紹設定內部應用程式負載平衡器時需瞭解的概念。
Google Cloud 內部應用程式負載平衡器是以 Proxy 為基礎的第 7 層負載平衡器,可讓您透過單一內部 IP 位址執行服務及調度服務資源。內部應用程式負載平衡器會將 HTTP 和 HTTPS 流量分配給各種 Google Cloud 平台 (例如 Compute Engine、Google Kubernetes Engine (GKE) 和 Cloud Run) 上託管的後端。詳情請參閱「使用案例」。
運作模式
您可以透過下列模式設定內部應用程式負載平衡器:
- 跨區域內部應用程式負載平衡器。這項多區域負載平衡器是以開放原始碼 Envoy Proxy 為基礎,以代管服務的形式實作。跨地區模式可將流量平均分配到遍布全球的後端服務,包括流量管理功能,確保流量導向最近的後端。這個負載平衡器也能啟用高可用性。將後端放在多個區域,有助於避免單一區域發生故障。如果某個地區的後端服務中斷,流量可以容錯移轉至另一個地區。
區域性內部應用程式負載平衡器。這是區域負載平衡器,以開放原始碼 Envoy Proxy 為基礎,做為代管服務實作。區域模式要求後端位於單一 Google Cloud 區域。如果轉送規則停用全域存取權,用戶端只能位於該區域;如果啟用全域存取權,用戶端則可位於任何區域。這個負載平衡器可依據 HTTP 或 HTTPS 參數,啟用豐富的流量控管功能。設定負載平衡器後,系統就會因應流量需求來自動分配 Envoy Proxy 數量。
下表說明區域模式和跨區域模式的重要差異:
找出模式
主控台
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
在「Load Balancers」(負載平衡器) 分頁中,您可以查看負載平衡器類型、通訊協定和區域。如果該區域空白,則負載平衡器處於跨區域模式。下表摘要說明如何判斷負載平衡器的模式。
負載平衡器模式 負載平衡器類型 存取權類型 區域 區域性內部應用程式負載平衡器 應用程式 內部 指定區域 跨區域內部應用程式負載平衡器 應用程式 內部
gcloud
如要判斷負載平衡器的模式,請執行下列指令:
gcloud compute forwarding-rules describe FORWARDING_RULE_NAME
在指令輸出中,檢查負載平衡配置、區域和網路層級。下表摘要說明如何識別負載平衡器的模式。
負載平衡器模式 負載平衡架構 轉送規則 跨區域內部應用程式負載平衡器 INTERNAL_MANAGED 全球 區域性內部應用程式負載平衡器 INTERNAL_MANAGED 區域
架構與資源
下圖顯示內部應用程式負載平衡器所需的 Google Cloud 資源:
跨地區
下圖顯示在相同 VPC 網路的進階級中,跨區域內部應用程式負載平衡器部署作業的元件。每個全域轉送規則都會使用用戶端連線時使用的區域 IP 位址。
部署內部應用程式負載平衡器時,需要下列資源:
Proxy 專用子網路
在上圖中,僅限 Proxy 子網路提供一組 IP 位址,供 Google 代表您執行 Envoy Proxy。您必須在使用內部應用程式負載平衡器的虛擬私有雲網路的每個區域,建立僅限 Proxy 的子網路。
下表說明區域和跨區域模式中,僅限 Proxy 的子網路之間的差異:
負載平衡器模式 | 僅限 Proxy 子網路 --purpose 標記的值 |
---|---|
跨區域內部應用程式負載平衡器 |
GLOBAL_MANAGED_PROXY 區域和跨區域負載平衡器無法共用相同的子網路 跨區域 Envoy 型負載平衡器必須在設定負載平衡器的每個區域中,都有一個僅限 Proxy 的子網路。位於相同區域和網路的跨區域負載平衡器 Proxy 會共用同一個僅限 Proxy 的子網路。 |
區域性內部應用程式負載平衡器 |
REGIONAL_MANAGED_PROXY 區域和跨區域負載平衡器無法共用相同的子網路 區域和虛擬私有雲網路中的所有區域 Envoy 型負載平衡器,共用同一個僅限 Proxy 的子網路 |
其他:
- 僅限 Proxy 的子網路只會用於 Envoy Proxy,不會用於後端。
- 地區和虛擬私有雲網路中所有內部應用程式負載平衡器的後端 VM 或端點,都會接收來自僅限 Proxy 子網路的連線。
- 內部應用程式負載平衡器的虛擬 IP 位址並非位於僅限 Proxy 的子網路。負載平衡器的 IP 位址是由其內部管理的轉送規則所定義,詳情請參閱下文。
轉送規則和 IP 位址
轉送規則會依 IP 位址、通訊埠和通訊協定,將流量轉送至由目標 Proxy 和後端服務所組成的負載平衡設定。
IP 位址規格。每個轉送規則都會參照單一區域 IP 位址,供您用於應用程式的 DNS 記錄。您可以保留要使用的靜態 IP 位址,或由 Cloud Load Balancing 為您指派靜態 IP 位址。我們建議保留一個靜態 IP 位址,否則每當您刪除轉送規則並建立新規則時,均必須使用新指派的臨時 IP 位址更新 DNS 記錄。
用戶端會使用 IP 位址和通訊埠連線至負載平衡器的 Envoy Proxy,而轉送規則的 IP 位址就是負載平衡器的 IP 位址 (有時稱為虛擬 IP 位址或 VIP)。連線至負載平衡器的用戶端必須使用 HTTP 1.1 以上版本。如需支援的通訊協定完整清單,請參閱「負載平衡器功能」。
與轉送規則相關聯的內部 IP 位址,可以來自與後端位於相同網路和區域的子網路。
通訊埠規格。應用程式負載平衡器的每個轉送規則都可參照單一通訊埠 (1 到 65535)。如要支援多個通訊埠,必須設定多個轉送規則。只要每個轉送規則的 IP 位址、通訊埠和通訊協定組合不重複,您就可以設定多個轉送規則,使用相同的內部 IP 位址 (VIP),並參照相同的目標 HTTP 或 HTTPS Proxy。這樣一來,您就能使用共用網址對應的單一負載平衡器,做為多個應用程式的 Proxy。
內部應用程式負載平衡器使用的轉送規則、IP 位址和負載平衡架構類型,取決於負載平衡器的模式。
負載平衡器模式 | 轉送規則、IP 位址和 Proxy 專用子網路 --purpose |
從用戶端到負載平衡器前端的路由 |
---|---|---|
跨區域內部應用程式負載平衡器 |
負載平衡架構:
僅限 Proxy 的子網路
IP 位址
|
根據預設,系統會啟用全域存取權,允許虛擬私有雲中任何區域的用戶端存取負載平衡器。後端可位於多個區域。 |
區域性內部應用程式負載平衡器 |
負載平衡架構:
僅限 Proxy 的子網路
IP 位址
|
您可以啟用全域存取權,允許虛擬私有雲中任何區域的用戶端存取負載平衡器。後端也必須與負載平衡器位於相同區域。 |
轉送規則和虛擬私有雲網路
本節說明內部應用程式負載平衡器使用的轉送規則如何與虛擬私有雲網路建立關聯。
負載平衡器模式 | 虛擬私有雲網路關聯 |
---|---|
跨區域內部應用程式負載平衡器 區域性內部應用程式負載平衡器 |
區域內部 IPv4 位址一律位於虛擬私有雲網路內。建立轉送規則時,您必須指定要從哪個子網路取得內部 IP 位址。這個子網路必須位於已建立 Proxy 專用子網路的相同區域和虛擬私有雲網路。因此,系統會隱含網路關聯。 |
目標 Proxy
目標 HTTP 或 HTTPS Proxy 會終止來自用戶端的 HTTP(S) 連線。HTTP(S) Proxy 會查詢網址對應,以決定如何將流量轉送至後端。目標 HTTPS Proxy 會使用 SSL 憑證向用戶端驗證自身。
負載平衡器會保留原始用戶端要求的 Host 標頭。負載平衡器也會在 X-Forwarded-For
標頭中附加兩個 IP 位址:
- 連線至負載平衡器的用戶端 IP 位址
- 負載平衡器轉送規則的 IP 位址
如果傳入的要求沒有 X-Forwarded-For
標頭,這兩個 IP 位址就是整個標頭值。如果要求有 X-Forwarded-For
標頭,系統會保留其他資訊,例如在前往負載平衡器的途中,由 Proxy 記錄的 IP 位址,然後再保留這兩個 IP 位址。負載平衡器不會驗證這個標頭中最後兩個 IP 位址之前的任何 IP 位址。
如果您將 Proxy 設為後端伺服器,Proxy 通常會將更多資訊附加至 X-Forwarded-For
標頭,軟體可能需要將這點列入考量。負載平衡器傳送的 Proxy 要求來自僅限 Proxy 子網路中的 IP 位址,後端執行個體上的 Proxy 可能會記錄這個位址和後端執行個體本身的 IP 位址。
視應用程式需要處理的流量類型而定,您可以設定負載平衡器,使用目標 HTTP Proxy 或目標 HTTPS Proxy。
下表列出內部應用程式負載平衡器所需的目標 Proxy API:
負載平衡器模式 | 目標 Proxy |
---|---|
跨區域內部應用程式負載平衡器 | |
區域性內部應用程式負載平衡器 |
SSL 憑證
使用目標 HTTPS Proxy 的內部應用程式負載平衡器需要私密金鑰和 SSL 憑證,做為負載平衡器設定的一部分。
下表列出各模式下,內部應用程式負載平衡器所需的 SSL 憑證類型:
負載平衡器模式 | SSL 憑證類型 |
---|---|
區域性內部應用程式負載平衡器 |
憑證管理工具 區域性自行管理憑證 和 Google 代管憑證。 憑證管理工具支援下列類型的 Google 代管憑證:
不支援使用負載平衡器授權的 Google 代管憑證。 |
跨區域內部應用程式負載平衡器 | 憑證管理工具 自行管理的憑證 和 Google 代管的憑證。 憑證管理工具支援下列類型的 Google 代管憑證:
不支援使用負載平衡器授權的 Google 代管憑證。 系統不支援 Compute Engine SSL 憑證。 |
網址對應
目標 HTTP(S) Proxy 會使用網址對應,根據 HTTP 屬性 (例如要求路徑、Cookie 或標頭) 判斷轉送路徑。根據轉送決策,Proxy 會將用戶端要求轉送至特定後端服務。網址對應表可指定要執行的其他動作,例如重寫標頭、將重新導向傳送給用戶端,以及設定逾時政策 (等等)。
下表說明內部應用程式負載平衡器在各模式中需要的網址對應類型:
負載平衡器模式 | 網址對應類型 |
---|---|
跨區域內部應用程式負載平衡器 | 全球網址對應 |
區域性內部應用程式負載平衡器 | 區域網址對應 |
後端服務
後端服務會將設定資訊提供給負載平衡器,以便將要求導向至後端,例如 Compute Engine 執行個體群組或網路端點群組 (NEG)。如要進一步瞭解後端服務,請參閱後端服務總覽。
後端服務範圍
下表說明內部應用程式負載平衡器使用的後端服務資源和範圍:
負載平衡器模式 | 後端服務資源 |
---|---|
跨區域內部應用程式負載平衡器 |
backendServices (全球) |
區域性內部應用程式負載平衡器 |
regionBackendServices (部分地區) |
後端的通訊協定
應用程式負載平衡器的後端服務必須使用下列其中一種通訊協定,將要求傳送至後端:
- HTTP,使用 HTTP/1.1 且不使用 TLS
- HTTPS,使用 HTTP/1.1 和 TLS
- HTTP/2,使用 HTTP/2 和 TLS (系統不支援未加密的 HTTP/2)。
- H2C,透過 TCP 使用 HTTP/2。不需要傳輸層安全標準 (TLS)。傳統版應用程式負載平衡器不支援 H2C。
負載平衡器只會使用您指定的後端服務通訊協定,與後端通訊。如果負載平衡器無法使用指定的後端服務通訊協定與後端通訊,將不會改回使用其他通訊協定。
後端服務通訊協定不必與用戶端用來與負載平衡器通訊的通訊協定相符。舉例來說,用戶端可以使用 HTTP/2 將要求傳送至負載平衡器,但負載平衡器可以使用 HTTP/1.1 (HTTP 或 HTTPS) 與後端通訊。
後端
下表列出各模式支援的後端功能。
負載平衡器模式 |
後端服務支援的後端1 | 支援後端值區 | 支援 Google Cloud Armor | 支援 Cloud CDN | 支援 IAP | 支援 Service Extensions | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
執行個體群組2 | 區域 NEG3 | 網際網路 NEG | 無伺服器 NEG | 混合式 NEG | Private Service Connect NEG | ||||||
跨區域內部應用程式負載平衡器 | Cloud Run |
||||||||||
區域性內部應用程式負載平衡器 | Cloud Run |
1 後端服務中的後端必須是相同類型:全為執行個體群組,或全為相同類型的 NEG。這項規則的例外狀況是,區域 NEG 和混合式 NEG 都可以用於同一個後端服務,以支援
混合式架構。GCE_VM_IP_PORT
2 同一後端服務支援區域非代管、區域代管和地區代管執行個體群組的組合。如果代管執行個體群組是兩個以上後端服務的後端,請為該群組設定自動調度資源政策,使用 多項信號。
3 區域性 NEG 必須使用 GCE_VM_IP_PORT
端點。
後端和虛擬私有雲網路
後端所在位置的限制取決於後端類型。
對於執行個體群組、區域 NEG 和混合式連線 NEG,所有後端都必須與後端服務位於相同的專案和區域。不過,負載平衡器可以參照使用不同 VPC 網路的後端,但必須與後端服務位於同一專案。 您可以使用虛擬私有雲網路對等互連、Cloud VPN 通道、Cloud Interconnect VLAN 連結或 Network Connectivity Center 架構,設定負載平衡器的虛擬私有雲網路與後端虛擬私有雲網路之間的連線。
後端網路定義
- 對於區域 NEG 和混合式 NEG,您在建立 NEG 時會明確指定虛擬私有雲網路。
- 如果是代管執行個體群組,虛擬私有雲網路是在執行個體範本中定義。
- 對於非代管執行個體群組,系統會將執行個體群組的虛擬私有雲網路設為與新增至執行個體群組的第一個 VM 的
nic0
介面虛擬私有雲網路相符。
後端網路需求
後端的網路必須符合下列任一網路需求:
後端的虛擬私有雲網路必須與轉送規則的虛擬私有雲網路完全相符。
後端的虛擬私有雲網路必須使用虛擬私有雲網路對等互連,連線至轉送規則的虛擬私有雲網路。您必須設定子網路路徑交換,允許轉送規則虛擬私有雲網路中的僅限 Proxy 子網路,與後端執行個體或端點使用的子網路之間進行通訊。
- 後端的 VPC 網路和轉送規則的 VPC 網路都必須是VPC 輪輻,且附加至相同的 Network Connectivity Center 中樞。匯入和匯出篩選器必須允許轉送規則的虛擬私有雲網路中,僅限 Proxy 的子網路,與後端執行個體或端點使用的子網路之間進行通訊。
如果是其他後端類型,所有後端都必須位於同一個虛擬私有雲網路和區域。
後端和網路介面
如果您使用執行個體群組後端,封包一律會傳送至 nic0
。如要將封包傳送至非 nic0
介面 (vNIC 或動態網路介面),請改用 NEG 後端。
如果您使用區域 NEG 後端,封包會傳送至 NEG 中端點所代表的任何網路介面。NEG 端點必須與 NEG 明確定義的 VPC 網路位於同一個 VPC 網路。
後端子集
後端子集是區域性內部應用程式負載平衡器支援的選用功能,可為每個 Proxy 執行個體指派後端子集,藉此提升效能和擴充性。
後端子集功能預設為停用。 如要瞭解如何啟用這項功能,請參閱「區域內部應用程式負載平衡器的後端子設定」。
健康狀態檢查
每個後端服務都會指定健康狀態檢查,定期監控後端是否已準備好接收來自負載平衡器的連線。這樣可降低要求傳送至無法處理要求的後端的風險。健康狀態檢查不會檢查應用程式本身是否正常運作。
如要讓健康狀態檢查探測器成功運作,您必須建立 Ingress 允許防火牆規則,讓健康狀態檢查探測器可連線至後端執行個體。健康狀態檢查探測通常來自 Google 的集中式健康狀態檢查機制。不過,如果是混合式 NEG,健康狀態檢查會從僅限 Proxy 的子網路發出。詳情請參閱「分散式 Envoy 健康狀態檢查」。
健康狀態檢查通訊協定
雖然這不是必要條件,也不一定都可行,但最佳做法是使用通訊協定與後端服務通訊協定相同的健康狀態檢查。舉例來說,HTTP/2 健康狀態檢查最能準確測試與後端的 HTTP/2 連線。相較之下,使用混合式 NEG 後端的內部應用程式負載平衡器不支援 gRPC 健康狀態檢查。如需支援的健康狀態檢查通訊協定清單,請參閱「健康狀態檢查」一節中的負載平衡功能。
下表列出內部應用程式負載平衡器支援的健康狀態檢查範圍:
負載平衡器模式 | 健康狀態檢查類型 |
---|---|
跨區域內部應用程式負載平衡器 | 全球 |
區域性內部應用程式負載平衡器 | 區域性 |
如要進一步瞭解健康狀態檢查,請參閱下列文章:
防火牆規則
內部應用程式負載平衡器需要下列防火牆規則:
- 輸入允許規則,允許來自 Google 中央健康狀態檢查範圍的流量。如要進一步瞭解特定健康狀態檢查探測器 IP 位址範圍,以及為何必須允許來自這些範圍的流量,請參閱「探測器 IP 範圍和防火牆規則」。
- 允許來自僅限 Proxy 的子網路的流量的允許輸入規則。
這些範圍的防火牆規則規定有特定例外狀況:
- 混合式 NEG 不必允許來自 Google 健康狀態檢查探測範圍的流量。不過,如果您在單一後端服務中同時使用混合式和區域 NEG,則必須允許區域 NEG 接收來自 Google 健康狀態檢查探測範圍的流量。
- 如果是區域性網際網路 NEG,健康狀態檢查為選用功能。使用區域性網際網路 NEG 的負載平衡器流量,會來自僅限 Proxy 的子網路,然後透過 NAT 轉換 (使用 Cloud NAT) 為手動或自動分配的 NAT IP 位址。這類流量包括健康狀態檢查探測,以及負載平衡器傳送至後端的使用者要求。詳情請參閱「區域性 NEG:使用 Cloud NAT 閘道」。
用戶端存取權
用戶端可位於相同網路,或透過 VPC 網路對等互連連線的 VPC 網路。
對於跨區域內部應用程式負載平衡器,全域存取權預設為啟用。虛擬私有雲中任何區域的用戶端都可以存取負載平衡器。對於區域性內部應用程式負載平衡器,用戶端預設必須與負載平衡器位於相同的區域。您可以啟用全域存取權,允許虛擬私有雲中任何區域的用戶端存取負載平衡器。
下表摘要說明區域內部應用程式負載平衡器的用戶端存取權:
全域存取權已停用 | 已啟用全域存取權 |
---|---|
用戶端必須與負載平衡器位於相同區域。此外,這些執行個體必須與負載平衡器位於同一個 VPC 網路,或是透過 VPC 網路對等互連連線至負載平衡器 VPC 網路的 VPC 網路。 | 用戶端可位於任何區域。但仍須與負載平衡器位於同一個 VPC 網路,或位於透過 VPC 網路對等互連連線至負載平衡器 VPC 網路的 VPC 網路。 |
地端部署的用戶端可以透過 Cloud VPN 通道或 VLAN 連結存取負載平衡器。這些通道或附件必須與負載平衡器位於相同區域。 | 地端部署的用戶端可透過 Cloud VPN 通道或 VLAN 連結存取負載平衡器。這些通道或附件可以在任何區域。 |
GKE 支援
GKE 會透過下列方式使用內部應用程式負載平衡器:
使用 GKE Gateway 控制器建立的內部閘道,可以使用內部應用程式負載平衡器的任何模式。您可以選擇 GatewayClass,控制負載平衡器的模式。GKE Gateway 控制器一律使用
GCE_VM_IP_PORT
區域 NEG 後端。使用 GKE Ingress 控制器建立的內部 Ingress 一律是區域內部應用程式負載平衡器。GKE Ingress 控制器一律使用
GCE_VM_IP_PORT
區域 NEG 後端。
- 您可以將 GKE 服務建立及管理的
GCE_VM_IP_PORT
區域 NEG,做為任何應用程式負載平衡器或 Proxy 網路負載平衡器的後端。詳情請參閱透過獨立的區域 NEG 使用容器原生負載平衡。
共用虛擬私有雲架構
內部應用程式負載平衡器支援使用共用虛擬私有雲的網路。共用虛擬私有雲可讓機構將多項專案的資源連線至共同的虛擬私有雲網路。這樣一來,各項資源就能透過該網路中的內部 IP 位址,以更安全有效率的方式相互通訊。如果您還不熟悉共用虛擬私有雲,請參閱共用虛擬私有雲總覽說明文件。
在共用虛擬私有雲端網路中,設定內部應用程式負載平衡器的方法有很多種。無論部署類型為何,負載平衡器的所有元件都必須位於同一個機構中。
子網路和 IP 位址 | 前端元件 | 後端元件 |
---|---|---|
在共用虛擬私有雲主專案中,建立必要的網路和子網路 (包括僅限 Proxy 的子網路)。 負載平衡器的內部 IP 位址可以在主專案或服務專案中定義,但必須使用主專案中所需共用虛擬私有雲端網路的子網路。位址本身來自所參照子網路的主要 IP 範圍。 |
地區內部 IP 位址、轉送規則、目標 HTTP(S) Proxy 和相關聯的網址對應,都必須在同一個專案中定義。這個專案可以是主專案或服務專案。 | 你可以採取下列任一做法:
每個後端服務都必須在與其參照後端相同的專案中定義。定義與後端服務相關的健康狀態檢查時,所在的專案必須與後端服務所在專案相同。 |
雖然您可以在共用 VPC 主專案中建立所有負載平衡元件和後端,但這類部署作業不會區隔網路管理和服務開發職責。
服務專案中的所有負載平衡器元件和後端
下圖顯示標準的共用虛擬私有雲部署作業,其中所有負載平衡器元件和後端都位於服務專案中。所有應用程式負載平衡器都支援這類部署作業。
負載平衡器會使用主專案的 IP 位址和子網路。如果用戶端與負載平衡器位於相同的共用 VPC 網路和區域,就能存取內部應用程式負載平衡器。用戶端可位於主專案、附加的服務專案,或任何連線的網路。
共用虛擬私有雲環境中的無伺服器後端
如果內部應用程式負載平衡器使用無伺服器 NEG 後端,則支援的 Cloud Run 服務必須與後端服務和無伺服器 NEG 位於同一個服務專案。負載平衡器的前端元件 (轉送規則、目標 Proxy、網址對應) 可在主專案、與後端元件相同的服務專案,或相同共用虛擬私有雲環境中的任何其他服務專案中建立。
跨專案參照服務
跨專案服務參照是一種部署模式,負載平衡器的前端和網址對應位於一個專案中,負載平衡器的後端服務和後端則位於另一個專案中。
機構可以透過跨專案服務參照功能,設定一個中央負載平衡器,並將流量轉送至分散在多個不同專案中的數百項服務。您可以在一個網址對應中集中管理所有流量轉送規則和政策。您也可以將負載平衡器與一組主機名稱和 SSL 憑證建立關聯。因此,您可以盡量減少部署應用程式所需的負載平衡器數量,降低可管理性、營運成本和配額需求。
為每個職能團隊建立不同的專案,也有助於在機構內區分角色。服務擁有者可以專注於在服務專案中建構服務,而網路團隊則可在另一個專案中佈建及維護負載平衡器,兩者可透過跨專案服務參照功能連結。
服務擁有者可透過負載平衡器,自主控管服務曝光度,並決定哪些使用者可以存取服務。這項作業是透過名為「Compute Load Balancer Services User」的特殊 IAM 角色 (roles/compute.loadBalancerServiceUser
) 達成。
如果是內部應用程式負載平衡器,只有在共用虛擬私有雲環境中,才能跨專案參照服務。
如要瞭解如何為內部應用程式負載平衡器設定共用虛擬私有雲,包括是否要跨專案參照服務,請參閱「使用共用虛擬私有雲設定內部應用程式負載平衡器」。跨專案服務參照的使用注意事項
- 如果後端服務具有區域性網際網路 NEG 後端,您就無法參照跨專案後端服務。支援所有其他後端類型。
- Google Cloud 不會區分多個專案中名稱相同的資源 (例如後端服務)。因此,使用跨專案服務參照時,建議您在機構的專案中使用不重複的後端服務名稱。
範例 1:負載平衡器的前端和後端位於不同的服務專案
以下是共用虛擬私有雲部署的範例,其中負載平衡器的前端和網址對應是在服務專案 A 中建立,而網址對應則參照服務專案 B 中的後端服務。
在本例中,服務專案 A 中的網路管理員或負載平衡器管理員需要存取服務專案 B 中的後端服務。服務專案 B 管理員將 Compute Load Balancer Services User 角色 (roles/compute.loadBalancerServiceUser
) 授予服務專案 A 中的負載平衡器管理員,讓他們參照服務專案 B 中的後端服務。
示例 2:主專案中的負載平衡器前端,以及服務專案中的後端
以下是共用虛擬私有雲部署範例,其中負載平衡器的前端和網址對應是在主專案中建立,後端服務 (和後端) 則是在服務專案中建立。
在這個案例中,主專案中的網路管理員或負載平衡器管理員需要存取服務專案中的後端服務。服務專案管理員將 Compute 負載平衡器服務使用者角色 (roles/compute.loadBalancerServiceUser
) 授予主專案 A 中的負載平衡器管理員,讓他們參照服務專案中的後端服務。
逾時和重試
內部應用程式負載平衡器支援下列類型的逾時:逾時類型和說明 | 預設值 | 支援自訂值 | |
---|---|---|---|
跨區域 | 區域 | ||
後端服務逾時
要求和回應逾時。代表負載平衡器將要求的第一個位元組傳送至後端,到後端將 HTTP 回應的最後一個位元組傳回負載平衡器之間,允許的最長時間。如果後端未在時限內將完整 HTTP 回應傳回負載平衡器,系統就會捨棄其餘回應資料。 |
|
||
用戶端 HTTP 保持運作逾時
用戶端與負載平衡器管理型 Envoy 代理程式之間的 TCP 連線,最多可以閒置的時間長度。(多個 HTTP 要求可能會使用相同的 TCP 連線)。 |
610 秒 | ||
後端 HTTP 保持運作逾時
負載平衡器管理的 Envoy Proxy 與後端之間的 TCP 連線可閒置的時間長度上限。(多個 HTTP 要求可能會使用相同的 TCP 連線)。 |
10 分鐘 (600 秒) |
後端服務逾時
可設定的後端服務逾時代表負載平衡器等待後端處理 HTTP 要求並傳回相應 HTTP 回應的時間上限。除了無伺服器 NEG 以外,後端服務逾時的預設值為 30 秒。
舉例來說,如果您想下載 500 MB 的檔案,而後端服務逾時值為 90 秒,則負載平衡器會預期後端在 90 秒內傳送整個 500 MB 的檔案。後端服務逾時設定可能不足,導致後端無法傳送完整的 HTTP 回應。在這種情況下,如果負載平衡器至少已從後端收到 HTTP 回應標頭,負載平衡器就會傳回完整的回應標頭,以及在後端服務逾時前盡可能取得的回應內文。
建議您將後端服務逾時時間設為最長,也就是後端處理 HTTP 回應所需的時間。如果後端執行的軟體需要更多時間處理 HTTP 要求並傳回完整的回應,建議您增加後端服務逾時時間。
後端服務逾時接受介於 1
和 2,147,483,647
秒之間的值,但較大的值並非實用的設定選項。此外,Google Cloud 也無法保證基礎 TCP 連線在後端服務逾時值的整個期間內保持開啟狀態。用戶端系統必須實作重試邏輯,而不是依賴長時間開啟的 TCP 連線。
如要設定後端服務逾時,請使用下列其中一種方法:
控制台
修改負載平衡器後端服務的「逾時」欄位。
gcloud
使用
gcloud compute backend-services update
指令修改後端服務資源的 --timeout
參數。
API
用戶端 HTTP 保持運作逾時
用戶端 HTTP 保持運作逾時是指 TCP 連線在 (下游) 用戶端和 Envoy 代理伺服器之間閒置的最長時間。用戶端 HTTP 保持運作逾時的預設值為 610 秒。您可以設定逾時時間,值介於 5 到 1200 秒之間。
HTTP 保持運作逾時也稱為 TCP 閒置逾時。
負載平衡器的用戶端 HTTP 保持連線逾時必須大於下游用戶端或 Proxy 使用的 HTTP 保持連線 (TCP 閒置) 逾時。如果下游用戶端的 HTTP 保持連線 (TCP 閒置) 逾時時間大於負載平衡器的用戶端 HTTP 保持連線逾時時間,就可能發生競爭情況。從下游用戶端的角度來看,已建立的 TCP 連線閒置時間可長於負載平衡器允許的時間。也就是說,在負載平衡器認為 TCP 連線已關閉後,下游用戶端仍可傳送封包。發生這種情況時,負載平衡器會以 TCP 重設 (RST) 封包回應。
用戶端 HTTP 保持運作逾時到期時,GFE 或 Envoy Proxy 會將 TCP FIN 傳送至用戶端,以正常關閉連線。
後端 HTTP 保持運作逾時
內部應用程式負載平衡器是 Proxy,會使用 (下游) 用戶端與 Envoy Proxy 之間的第一個 TCP 連線,以及 Envoy Proxy 與後端之間的第二個 TCP 連線。
負載平衡器的次要 TCP 連線可能不會在每個要求後關閉,而是保持開啟狀態,以處理多個 HTTP 要求和回應。後端 HTTP 保持運作逾時會定義負載平衡器與後端之間的 TCP 閒置逾時。後端 HTTP 保持運作逾時不適用於 WebSocket。
後端保持連線逾時時間固定為 10 分鐘 (600 秒),無法變更。這有助於確保負載平衡器至少維持閒置連線 10 分鐘。這段時間過後,負載平衡器隨時可將終止封包傳送至後端。
負載平衡器的後端連線存留逾時必須小於後端執行的軟體所用的連線存留逾時。這樣可避免競爭情況,因為後端的作業系統可能會透過 TCP 重設 (RST) 關閉 TCP 連線。由於負載平衡器的後端保持運作逾時無法設定,您必須設定後端軟體,使 HTTP 保持運作 (TCP 閒置) 逾時值大於 600 秒。
後端 HTTP 保持運作逾時到期時,GFE 或 Envoy Proxy 會將 TCP FIN 傳送至後端 VM,以正常關閉連線。
下表列出修改常見網路伺服器軟體的「保持運作」逾時值所需的變更。
網路伺服器軟體 | 參數 | 預設設定 | 建議設定 |
---|---|---|---|
Apache | KeepAliveTimeout | KeepAliveTimeout 5 |
KeepAliveTimeout 620 |
nginx | keepalive_timeout | keepalive_timeout 75s; |
keepalive_timeout 620s; |
重試
如要設定重試,可以在網址對應中使用重試政策。預設重試次數 (numRetries
) 為 1。
可設定的 perTryTimeout
最長為 24 小時。
如果沒有重試政策,系統會重試一次沒有 HTTP 主體的失敗要求 (例如 GET
要求),這些要求會導致 HTTP 502
、503
或 504
回應。
不會重試 HTTP POST
要求。
重試的要求只會針對最終回應產生一個記錄項目。
詳情請參閱「內部應用程式負載平衡器記錄與監控」。
存取連線的網路
用戶端可以使用下列方法,從已連線的網路存取虛擬私有雲端網路中的內部應用程式負載平衡器:
- 虛擬私有雲網路對等互連
- Cloud VPN 和 Cloud Interconnect
如需詳細範例,請參閱「內部應用程式負載平衡器和已連線網路」一文。
容錯移轉
如果後端健康狀態不良,系統會自動將流量重新導向至健康狀態良好的後端。
下表說明各模式的容錯移轉行為:
負載平衡器模式 | 容錯移轉行為 | 所有後端運作狀態皆不良時的行為 |
---|---|---|
跨區域內部應用程式負載平衡器 | 自動容錯移轉至相同區域或其他區域中運作正常的後端。 系統會根據設定的 流量分配,將流量分配到多個區域的健康後端。 |
傳回 HTTP 503 |
區域性內部應用程式負載平衡器 | 自動容錯移轉至相同區域中健康狀態良好的後端。 Envoy Proxy 會根據設定的 流量分配,將流量傳送至區域中健康狀態良好的後端。 |
傳回 HTTP 503 |
高可用性和跨區域容錯移轉
區域性內部應用程式負載平衡器
如要達到高可用性,請在最適合應用程式流量的區域中,部署多個個別的區域內部應用程式負載平衡器。接著,您可以使用 Cloud DNS 地理位置路由政策,偵測負載平衡器是否在區域中斷期間回應。地理位置政策會根據用戶端要求的來源,將流量轉送至下一個最接近的可用區域。內部應用程式負載平衡器預設會執行健康狀態檢查。
跨區域內部應用程式負載平衡器
您可以在多個區域設定跨區域內部應用程式負載平衡器,享有下列優點:
如果某個區域的跨區域內部應用程式負載平衡器發生故障,DNS 路由政策會將流量導向另一個區域的跨區域內部應用程式負載平衡器。
高可用性部署範例會顯示下列項目:
- 跨區域內部應用程式負載平衡器,前端虛擬 IP 位址 (VIP) 位於虛擬私有雲網路的
RegionA
和RegionB
區域。您的用戶端位於RegionA
區域。 - 您可以透過兩個區域的前端 VIP 存取負載平衡器,並使用 DNS 轉送政策,將最佳 VIP 回傳給用戶端。如要讓用戶端使用距離最近的 VIP,請使用地理位置路由政策。
- DNS 路由政策可以偵測 VIP 在區域性中斷期間是否沒有回應,並將下一個最佳 VIP 回傳給用戶端,確保應用程式即使在區域性中斷期間也能正常運作。
採用高可用性部署的跨區域內部應用程式負載平衡器 (按一下可放大)。 - 跨區域內部應用程式負載平衡器,前端虛擬 IP 位址 (VIP) 位於虛擬私有雲網路的
如果特定區域的後端停止運作,跨區域內部應用程式負載平衡器流量會順利容錯移轉至其他區域的後端。
跨區域容錯移轉部署範例會顯示下列內容:
- 跨區域內部應用程式負載平衡器,前端 VIP 位址位於 VPC 網路的
RegionA
區域。您的客戶也位於RegionA
區域。 - 參照
RegionA
和RegionB
Google Cloud 地區後端的全域後端服務。 - 當
RegionA
區域中的後端服務停止運作時,流量會容錯移轉至RegionB
區域。
跨區域內部應用程式負載平衡器,搭配跨區域容錯移轉部署作業 (按一下可放大)。 - 跨區域內部應用程式負載平衡器,前端 VIP 位址位於 VPC 網路的
WebSocket 支援
Google Cloud 以 HTTP(S) 為基礎的負載平衡器支援 WebSocket 通訊協定,但前提是您必須使用 HTTP 或 HTTPS 做為後端通訊協定。負載平衡器不需要任何設定,即可透過 Proxy 進行 WebSocket 連線。
WebSocket 通訊協定會在用戶端和負載平衡器之間提供全雙工通訊管道。詳情請參閱 RFC 6455。
WebSocket 通訊協定的運作方式如下:
- 負載平衡器會辨識來自 HTTP 或 HTTPS 用戶端的 WebSocket
Upgrade
要求。要求包含Connection: Upgrade
和Upgrade: websocket
標頭,後面接著其他相關的 WebSocket 相關要求標頭。 - 後端傳送 WebSocket
Upgrade
回應。後端執行個體會傳送101 switching protocol
回應,其中包含Connection: Upgrade
和Upgrade: websocket
標頭,以及其他與 WebSocket 相關的回應標頭。 - 在目前連線期間,負載平衡器會 Proxy 雙向流量。
如果後端執行個體傳回狀態碼 426
或 502
,負載平衡器就會關閉連線。
Websocket 的工作階段相依性與任何其他要求相同。 詳情請參閱工作階段相依性。
支援 HTTP/2
HTTP/2 是 HTTP/1 通訊協定的重大修訂版本。HTTP/2 支援有 2 種模式:
- 透過 TLS 的 HTTP/2
- 透過 TCP 傳輸的明文 HTTP/2
透過 TLS 的 HTTP/2
系統支援透過 TLS 的 HTTP/2,用於用戶端與外部應用程式負載平衡器之間的連線,以及負載平衡器與後端之間的連線。
負載平衡器會使用 ALPN TLS 擴充功能,在 TLS 握手過程中與用戶端自動進行 HTTP/2 交涉。即使負載平衡器已設定為使用 HTTPS,現代的用戶端預設為使用 HTTP/2。這是在用戶端上控制的,而不是在負載平衡器上控制的。
如果用戶端不支援 HTTP/2,且負載平衡器已設定為在負載平衡器和後端執行個體之間使用 HTTP/2,負載平衡器可能仍會交涉 HTTPS 連線或接受不安全的 HTTP 要求。負載平衡器接著會轉換這些 HTTPS 或 HTTP 要求,以透過 HTTP/2 經由 Proxy 將要求傳送至後端執行個體。
如要透過 TLS 使用 HTTP/2,您必須在後端啟用 TLS,並將後端服務通訊協定設為HTTP2
。詳情請參閱「從負載平衡器到後端的加密」。
HTTP/2 並行串流數量上限
HTTP/2
SETTINGS_MAX_CONCURRENT_STREAMS
設定說明端點接受的串流數量上限 (由對等互連啟動)。HTTP/2 用戶端向Google Cloud 負載平衡器宣傳的值實際上沒有意義,因為負載平衡器不會向用戶端啟動串流。
如果負載平衡器使用 HTTP/2 與在 VM 上執行的伺服器通訊,負載平衡器會遵守伺服器宣傳的 SETTINGS_MAX_CONCURRENT_STREAMS
值。如果宣傳的值為零,負載平衡器就無法將要求轉送至伺服器,這可能會導致錯誤。
HTTP/2 限制
- 負載平衡器和執行個體之間的 HTTP/2 可能需要比 HTTP 或 HTTPS 多出許多連往執行個體的 TCP 連線。HTTP/2 不支援連線集區化 (這項最佳化功能可減少 HTTP 或 HTTPS 的連線數量)。因此,後端連線的頻率可能會提高,導致後端延遲時間較長。
- 負載平衡器與後端之間的 HTTP/2 不支援透過 HTTP/2 連線的單一串流執行 WebSocket 通訊協定 (RFC 8441)。
- 負載平衡器與後端之間的 HTTP/2 不支援伺服器推送。
- 您無法在Google Cloud API 或 Google Cloud 控制台中查看 gRPC 錯誤率和要求量。如果 gRPC 端點傳回錯誤,負載平衡器記錄檔和監控資料會回報
200 OK
HTTP 狀態碼。
透過 TCP 的明文 HTTP/2 (H2C)
透過 TCP 的明文 HTTP/2 (也稱為 H2C),可讓您在不使用 TLS 的情況下使用 HTTP/2。以下兩種連線都支援 H2C:
- 用戶端與負載平衡器之間的連線。無須進行特殊設定。
負載平衡器與後端之間的連線。
如要為負載平衡器與後端之間的連線設定 H2C,請將後端服務通訊協定設為
H2C
。
使用 GKE Gateway 控制器和 Cloud Service Mesh 建立的負載平衡器,也支援 H2C。
傳統版應用程式負載平衡器不支援 H2C。
gRPC 支援
gRPC 是遠端程序呼叫的開放原始碼架構,它採用 HTTP/2 標準。gRPC 的用途如下:
- 低延遲、高擴充性的分散式系統
- 開發與雲端伺服器通訊的行動用戶端
- 設計必須精確、有效且無關語言的新通訊協定
- 可實現擴充、驗證和記錄功能的分層式設計
如要將 gRPC 與 Google Cloud 應用程式搭配使用,端到端皆必須透過 HTTP/2 經由 Proxy 傳送要求。如要這麼做,請建立應用程式負載平衡器,並採用下列其中一種設定:
適用於端對端未加密流量 (不含 TLS):建立 HTTP 負載平衡器 (已設定目標 HTTP Proxy)。此外,您也可以將後端服務通訊協定設為
H2C
,讓負載平衡器在負載平衡器與後端之間的未加密連線使用 HTTP/2。如要使用 TLS 進行端對端加密流量:請建立 HTTPS 負載平衡器 (已設定目標 HTTPS Proxy 和 SSL 憑證)。負載平衡器會使用 ALPN TLS 擴充功能,在 SSL 握手過程中與用戶端進行 HTTP/2 交涉。
此外,您必須確保後端可以處理 TLS 流量,並將後端服務通訊協定設為
HTTP2
,以便設定負載平衡器,在負載平衡器與後端之間使用 HTTP/2 進行加密連線。負載平衡器可能仍會與某些用戶端進行 HTTPS 交涉,或在設定為在負載平衡器和後端執行個體之間使用 HTTP/2 的負載平衡器上接受不安全的 HTTP 要求。負載平衡器會轉換這些 HTTP 或 HTTPS 要求,以透過 HTTP/2 經由 Proxy 將要求傳送至後端執行個體。
TLS 支援
根據預設,HTTPS 目標 Proxy 在終止用戶端 SSL 要求時,只接受 TLS 1.0、1.1、1.2 和 1.3。
當內部應用程式負載平衡器使用 HTTPS 做為後端服務通訊協定時,就可以與後端進行 TLS 1.2 或 1.3 交涉。支援雙向傳輸層安全標準 (TLS)
相互傳輸層安全標準 (mTLS) 是業界標準通訊協定,用於用戶端和伺服器之間的相互驗證。mTLS 會驗證用戶端和伺服器是否持有可信任的憑證授權單位 (CA) 核發的有效憑證,確保雙方相互驗證。標準 TLS 只會驗證伺服器,但 mTLS 要求用戶端和伺服器都必須出示憑證,確認雙方身分後才能建立通訊。
所有應用程式負載平衡器都支援 mTLS。使用 mTLS 時,負載平衡器會在與用戶端進行 TLS 握手期間,要求用戶端傳送憑證來驗證自身。您可以設定憑證管理工具信任儲存區,負載平衡器隨後會使用該儲存區驗證用戶端憑證的信任鏈。
如要進一步瞭解 mTLS,請參閱相互傳輸層安全標準 (mTLS) 驗證。
限制
我們無法保證來自該地區某個區域的用戶端要求,會傳送至與該用戶端位於相同區域的後端。工作階段相依性不會減少區域之間的通訊。
內部應用程式負載平衡器與下列功能不相容:
- Cloud CDN
- Compute Engine Google 代管的 SSL 憑證 (支援憑證管理工具 Google 代管的憑證)
如要將 Certificate Manager 憑證與內部應用程式負載平衡器搭配使用,請務必使用 API 或 gcloud CLI。Google Cloud 控制台不支援 Certificate Manager 憑證。
內部應用程式負載平衡器僅支援透過 TLS 的 HTTP/2。
連線至內部應用程式負載平衡器的用戶端必須使用 HTTP 1.1 以上版本。不支援 HTTP 1.0。
如果僅限 Proxy 子網路的 IP 位址用盡,Google Cloud 不會提出警告。
內部應用程式負載平衡器使用的內部轉送規則必須只有一個通訊埠。
在共用虛擬私有雲環境中,如果搭配 Cloud Run 使用內部應用程式負載平衡器,服務專案中的獨立虛擬私有雲網路就能將流量傳送至同一個共用虛擬私有雲環境中,部署在任何其他服務專案的 Cloud Run 服務。這是已知問題。
Google Cloud 無法保證基礎 TCP 連線在後端服務逾時值的整個期間內保持開啟。用戶端系統必須實作重試邏輯,而不是依賴長時間開啟的 TCP 連線。
內部應用程式負載平衡器不支援 Cloud Functions 第 1 代和 App Engine。詳情請參閱「無伺服器 NEG 總覽:支援的負載平衡器」。
內部應用程式負載平衡器不支援 Cloud Trace。
後續步驟
如要在共用 VPC 設定中設定負載平衡,請參閱「設定支援共用 VPC 的內部應用程式負載平衡器」。
如要為在 GKE Pod 中執行的服務設定負載平衡,請參閱「部署 GKE Gateway」、「使用獨立 NEG 進行容器原生負載平衡」和「將內部應用程式負載平衡器附加至獨立 NEG」一節。
如要管理僅限 Proxy 的子網路資源,請參閱適用於以 Envoy 為基礎的負載平衡器的僅限 Proxy 子網路。
如要在區域內部應用程式負載平衡器上設定後端子集,請參閱後端子集。
如要透過 Private Service Connect 設定區域內部應用程式負載平衡器,請參閱「透過後端存取區域 Google API」。
如要在負載平衡資料路徑中插入自訂邏輯,請設定 Cloud Load Balancing 擴充功能。