負載平衡 API 的進階流量管理總覽
本文件適用對象為網格或平台管理員和服務開發人員,他們對 Cloud Service Mesh 和服務網格概念有中級到進階程度的熟悉程度,並且會決定並設定 Cloud Service Mesh 部署中流量管理方式。本文僅適用於負載平衡 API,不適用於服務路由 API。如果 Cloud Service Mesh 部署作業使用服務路由 API,請參閱進階流量管理總覽。
Cloud Service Mesh 提供進階流量管理功能,可讓您精細控管流量的處理方式。Cloud Service Mesh 支援下列用途:
- 將要求精細轉送至一或多項服務
- 以權重為依據的流量拆分功能,可將流量分配給多項服務
- 將要求傳送至一個偵錯服務,並複製至另一個服務的流量鏡射政策
- 針對服務後端精細調整流量分配,以改善負載平衡
這些進階流量管理功能可協助您達成可用性和效能目標。在這些用途中使用 Cloud Service Mesh 的好處之一,就是您可以更新流量管理方式,而無需修改應用程式程式碼。
- 當您使用目標 HTTP Proxy 設定 Envoy Proxy 以傳送 HTTP 要求時,即可使用本文件中的所有功能。 
- 在 Cloud Service Mesh 中使用無 Proxy gRPC 服務或應用程式時,您將無法使用部分功能。 
- 當您使用目標 TCP Proxy 設定 Envoy Proxy 以傳送 TCP 要求時,由於目標 TCP Proxy 的設定中沒有網址對應項目,因此無法使用任何功能。 
詳情請參閱「功能」頁面。
如要設定進階流量管理,請使用設定 Cloud Service Mesh 時使用的轉送規則對應關係和後端服務資源。接著,Cloud Service Mesh 會設定 Envoy Proxy 和無 Proxy gRPC 應用程式,以便強制執行您設定的進階流量管理政策。
整體來說,您需要執行以下操作:
- 根據傳出要求的特性,設定轉送規則對應關係,以便執行下列操作: - 選取要求的轉送後端服務。 
- 視需要執行其他動作。 
 
- 設定後端服務,以便控管在選取目的地服務後,如何將流量分配至後端和端點。 
篩選器設定
Cloud Service Mesh 的一項核心職責,就是從轉寄規則、目標 Proxy 和網址對應產生設定資訊,然後將這些資訊傳送至 Cloud Service Mesh 用戶端,例如 Envoy Proxy 和 gRPC 應用程式。Cloud Service Mesh 會將設定資訊傳送給客戶端,告知如何運作及如何轉送流量,藉此控制服務網格。Cloud Service Mesh 是控制層。
在 Cloud Service Mesh 中建立或更新設定資訊時,Cloud Service Mesh 會將這項設定轉譯為用戶端可解讀的語言。根據預設,Cloud Service Mesh 會與所有用戶端共用這項設定。在某些情況下,您可能會想要自訂哪些 Cloud Service Mesh 用戶端會接收特定設定資訊,也就是將設定篩選為特定用戶端。
雖然這是進階功能,但下列範例說明篩選設定可在何時提供協助:
- 貴機構採用共用虛擬私有雲網路模式,且多個團隊在不同的服務專案中使用 Cloud Service Mesh。如果您想將設定與其他服務專案隔離,可以篩選設定,讓特定 Cloud Service Mesh 用戶端只接收部分設定。
- 您在 Cloud Service Mesh 中設定了大量路由規則和服務,希望避免向每個 Cloud Service Mesh 用戶端傳送異常大量的設定。請注意,如果用戶端需要使用大型複雜的設定來評估外送要求,其效能可能會比只需要使用精簡設定來評估要求的用戶端低。
設定篩選功能的概念是建立在中繼資料篩選器之上:
- 當 Cloud Service Mesh 用戶端連線時,會將其引導檔案中的資訊呈現給 Cloud Service Mesh。
- 這項資訊包含中繼資料欄位的內容,以鍵/值組合的形式呈現,您在部署 Envoy 代理程式和 gRPC 應用程式時,會在引導檔案中指定這項資訊。
- 您可以在轉送規則中新增中繼資料篩選器。系統會篩除與轉送規則連結的整個設定。
- 您可以在網址對應圖上新增中繼資料篩選器。中繼資料篩選器會根據每個路徑轉送作業套用。
- Cloud Service Mesh 只會將設定分享給符合中繼資料篩選條件的用戶端。
如要瞭解如何為 Envoy 設定中繼資料篩選器,請參閱「根據 MetadataFilter 比對結果設定篩選器」。
流量轉送和動作
在 Cloud Service Mesh 中,轉送規則對應關係是指轉送規則、目標 Proxy 和網址對應資源的組合。所有與轉送和動作相關的進階流量管理功能,都是透過網址對應關係設定。
以下各節將說明您可以在轉送規則對應關係中設定的進階流量管理功能。
處理要求
當用戶端傳送要求時,系統會按照下列步驟處理要求:
- 系統會將要求比對至特定轉送規則對應關係,如下所示: - 如果您使用的是 Envoy: - 系統會比較要求的目標 IP 位址和通訊埠,以及所有轉送規則對應關係中的轉送規則 IP 位址和通訊埠。系統只會考慮含有負載平衡配置 INTERNAL_SELF_MANAGED轉送規則的轉送規則對應關係。
- 與要求相符的轉送規則會參照目標 HTTP 或 gRPC Proxy,而 Proxy 會參照網址對應。這個網址對應表包含用於路由和動作的資訊。
 
- 系統會比較要求的目標 IP 位址和通訊埠,以及所有轉送規則對應關係中的轉送規則 IP 位址和通訊埠。系統只會考慮含有負載平衡配置 
- 如果您使用無 Proxy gRPC: - 使用 xds名稱解析配置的 gRPC 用戶端不會執行 DNS 查詢,以解析管道 URI 中的主機名稱。相反地,這類用戶端會將 LDS 要求傳送至 Cloud Service Mesh,藉此解析目標 URI 中的hostname[:port]。
- 只有具有負載平衡配置 INTERNAL_SELF_MANAGED的轉送規則通訊埠會與目標 URI (例如xds:///example.hostname:8080) 中的通訊埠進行比較。系統不會使用轉送規則的 IP 位址。如果目標 URI 未指定通訊埠,則通訊埠的預設值為80。
- 與要求相符的轉送規則會參照目標 gRPC Proxy,而該 Proxy 會參照網址對應。這個網址對應表包含用於路由和動作的資訊。
- 如果有多個轉送規則符合要求,則會使用包含與目標 URI 中 hostname[:port]相符的主機規則的網址對應,用於轉送和動作。
 
- 使用 
 
- 在判斷出適當的網址對應後,系統會評估網址對應,進而決定目的地後端服務,並視需要套用動作。 
- 選取目標後端服務後,系統會根據後端服務資源中的設定,將流量分配至該目標後端服務的後端或端點。 
請參閱下一節「根據主機和路徑進行簡易轉送」瞭解第二個步驟。第三個步驟請參閱「進階轉送和動作」一節。
根據主機和路徑進行簡易轉送
Cloud Service Mesh 支援簡易的路由配置和更進階的配置。在簡易配置中,您可以指定主機,並視需要指定路徑。系統會評估要求的主機和路徑,以決定應將要求轉送至哪個服務:
- 要求的主機是網址的網域名稱部分,例如網址 http://example.com/video/的主機部分為example.com。
- 要求的路徑是網址中主機名稱後面的部分,例如網址 http://example.com/video/的路徑部分是/video。
您可以在轉送規則對應中,根據主機和路徑設定簡易轉送,轉送規則對應包含下列項目:
- 通用轉送規則
- 目標 HTTP Proxy、目標 HTTPS Proxy 或目標 gRPC Proxy
- 網址對應
大部分的設定都是在網址對應中完成。建立初始轉送規則對應關係後,您只需修改轉送規則對應關係的網址對應部分。在下圖中,路徑規則的動作與下一個圖表中的動作類似。
最簡單的規則就是預設規則,您只需指定萬用字元 (*) 主機規則,以及含有預設服務的路徑比對器。建立預設規則後,您可以新增其他規則來指定不同的主機和路徑。系統會根據下列規則評估傳出要求:
- 如果要求的主機 (例如 - example.com) 符合主機規則:- 接著會評估路徑比對器。
- 每個路徑比對器都包含一或多個路徑規則,這些規則會根據要求的路徑進行評估。
- 如果找到相符項目,系統會將要求轉送至路徑規則中指定的服務。
- 如果主機規則相符,但沒有任何路徑規則相符,要求會轉送至每個路徑比對器所包含的預設服務。
 
- 如果要求不符合您指定的任何主機規則,系統會將要求轉送至預設規則中指定的服務。 
如要進一步瞭解網址對應的資源欄位及其運作方式,請參閱 urlMaps REST API 頁面。
進階轉送和動作
如果您想做的不只是根據要求的主機和路徑轉送要求,您可以設定進階規則來轉送要求並執行動作。
整體來說,進階轉送和動作的運作方式如下:
- 與簡單路由一樣,系統會將要求的主機與您在網址對應中設定的主機規則進行比對。如果要求的主機與主機規則相符,系統會評估主機規則的路徑比對器。
- 路徑比對工具包含一或多個路徑規則,這些規則會根據要求進行評估。系統會根據特定比對條件 (例如前置字串比對),比對要求屬性 (主機、路徑、標頭和查詢參數),並依優先順序評估這些轉送規則。
- 選取路由規則後,您可以套用動作。預設動作是將要求轉送至單一目的地服務,但您也可以設定其他動作。
進階轉送
進階轉送功能與前述的簡易轉送功能類似,但您可以指定規則優先順序和其他比對條件。
使用進階轉送功能時,您必須為每項規則指定專屬的優先順序。這個優先順序會決定轉送規則的評估順序,優先順序值越低,優先順序越高。要求符合規則後,系統會套用該規則,並忽略其他規則。
進階路由也支援其他比對條件。舉例來說,您可以指定規則在符合標頭名稱的情況下,比對要求的標頭,或是只比對部分標頭名稱 (例如根據前置字串或後置字串)。規則可根據規則運算式或其他條件 (例如檢查標頭是否存在) 評估標頭名稱,然後進行比對。
如要進一步瞭解 headerMatches 和 queryParameterMatches 的其他比對條件和詳細資料,請參閱 urlMaps REST API 頁面。
您可以結合主機、路徑、標頭和查詢參數,並搭配優先順序和比對條件,建立符合您確切流量管理需求的高度表達式規則。詳情請參閱下表。
| 以 HTTP 為基礎的應用程式 | 以 gRPC 為基礎的應用程式 | |
|---|---|---|
| HTTP 主機與 gRPC 主機 | 主機是應用程式呼叫的網址中網域名稱的部分。 例如,網址  | 主機是用戶端在頻道 URI 中使用的名稱,用於連線至特定服務。 舉例來說,頻道 URI  | 
| HTTP 路徑與 gRPC 路徑 | 路徑是指網址中主機名稱後面的部分。 舉例來說,網址  | 路徑位於 HTTP/2 要求的  舉例來說,如果您在  | 
| 其他 gRPC 標頭 (中繼資料) | gRPC 支援在 gRPC 用戶端和 gRPC 伺服器之間傳送中繼資料,以提供 RPC 呼叫的其他資訊。這類中繼資料的格式為鍵/值組合,會以 HTTP/2 要求中的標頭形式傳送。 | 
動作
您可以使用 Cloud Service Mesh 指定 Envoy Proxy 或無 Proxy gRPC 應用程式在處理要求時採取的動作。您可以使用 Cloud Service Mesh 設定下列動作。
| 動作 | API 欄位名稱 | 說明 | 
|---|---|---|
| 重新導向 | urlRedirect | 傳回可設定的 3xx 回應碼。此外,它也會使用適當的 URI 來設定 Location回應標頭,以取代重新導向動作中所指定的主機和路徑。 | 
| 網址重寫 | urlRewrite | 在傳送要求至所選後端服務之前,重新編寫網址的主機名稱部分、網址的路徑部分或兩者皆重新編寫。 | 
| 標頭轉換 | headerAction | 在傳送要求至後端服務之前,新增或移除要求標頭。從後端服務收到回應後,這項設定也可以新增或刪除回應標頭。 | 
| 流量鏡像 | requestMirrorPolicy | 除了將要求轉送到所選的後端服務外,也會以射後不理的模式,將完全相同的要求傳送至設定的鏡射後端服務。負載平衡器不會等待從後端傳送鏡像要求的回應。 鏡射很適合用來測試新版本的後端服務。您也可以使用這項功能,針對後端服務的偵錯版本 (而不是正式版本) 偵錯實際工作環境的錯誤。 | 
| 依權重分配流量 | weightedBackendServices | 可將相符規則的流量分配給多個後端服務,並與指派給個別後端服務的使用者定義權重成正比。 這項功能對於設定分階段部署或 A/B 測試非常實用。例如,轉送動作可以設定為將 99% 的流量傳送到執行穩定版應用程式的服務,而將 1% 的流量傳送到執行較新版應用程式的不同服務。 | 
| 重試 | retryPolicy | 設定負載平衡器重試失敗要求的條件、負載平衡器在重試前等待的時間,以及允許的重試次數上限。 | 
| 逾時 | timeout | 指定所選路徑的逾時時間。系統會從要求完成處理的時間開始計算逾時時間,直到回應完成處理為止。逾時時間包括所有重試時間。 | 
| 錯誤植入 | faultInjectionPolicy | 處理模擬故障的要求時,會引入高延遲、服務超載、服務故障和網路分區等錯誤。這項功能可用於測試服務對模擬故障的彈性。 | 
| 安全性政策 | corsPolicy | 跨來源資源共享 (CORS) 政策會處理用於強制執行 CORS 要求的設定。 | 
如要進一步瞭解動作及其運作方式,請參閱 urlMaps REST API 頁面。
在每個路由規則中,您可以指定下列路由動作之一 (在 Google Cloud 控制台中稱為「主要動作」):
- 將流量轉送至單一服務 (service)
- 利用流量拆分技巧,將流量導向多項服務 (weightedBackendServices)
- 重新導向網址 (urlRedirect)
此外,您可以將上述任一轉送動作與下列一或多個轉送動作 (在 Google Cloud 控制台中稱為外掛動作) 結合:
- 操控要求/回應標頭 (headerAction)
- 鏡像流量 (requestMirrorPolicy)
- 重寫網址主機、路徑或兩者 (urlRewrite)
- 重試失敗的要求 (retryPolicy)
- 設定逾時 (timeout)
- 對流量的百分比導入錯誤 (faultInjectionPolicy)
- 新增 CORS 政策 (corsPolicy)
由於動作與特定路由規則相關聯,因此 Envoy Proxy 或無 Proxy gRPC 應用程式可以根據所處理的要求套用不同的動作。
在服務的後端之間分配流量
如要求處理一節所述,當用戶端處理外送要求時,會先選取目的地服務。選取目的地服務後,就必須判斷應由哪個後端或端點接收要求。
在上圖中,規則已簡化。規則通常是主機規則、路徑比對器,以及一或多個路徑或路由規則。目的地服務為「(後端) 服務」。Backend 1、… 和 Backend n 會接收並處理要求。這些後端可能會是託管伺服器端應用程式程式的 Compute Engine 虛擬機器 (VM) 執行個體。
根據預設,處理要求的用戶端會將要求傳送至最近且具有可用容量的健康後端。為避免特定後端超載,它會使用循環制負載平衡演算法,在目的地服務的其他後端之間負載平衡後續要求。不過,在某些情況下,您可能會想要進一步控管這項行為。
負載平衡、工作階段相依性和保護後端
您可以在各項服務上設定下列流量分配政策。
| 政策 | API 欄位名稱 | 說明 | 
|---|---|---|
| 負載平衡模式 | balancingMode | 控制在選取目的地服務後,如何選取網路端點群組 (NEG) 或代管執行個體群組 (MIG)。您可以設定平衡模式,根據並行連線和要求頻率分配負載。 | 
| 負載平衡政策 | localityLbPolicy | 設定負載平衡演算法,用於在 NEG 或 MIG 中的後端之間分配流量。如要改善效能,您可以選擇各種演算法 (例如輪流或最少要求)。 | 
| 工作階段相依性 | sessionAffinity | 盡可能嘗試將來自特定用戶端的要求傳送至同一個後端,前提是後端的健康狀態良好且具有容量。 Cloud Service Mesh 支援四種工作階段相依性選項:用戶端 IP 位址、HTTP Cookie 型、HTTP 標頭型,以及產生的 Cookie 相依性 (由 Cloud Service Mesh 自行產生)。 | 
| 一致的雜湊 | consistentHash | 根據 HTTP 標頭、Cookie 或其他屬性提供軟性工作階段相依性。 | 
| 斷路器 | circuitBreakers | 設定後端服務連線量以及每個後端服務連線的要求數量上限。 | 
| 離群值偵測 | outlierDetection | 指定 (1) 從 MIG 或 NEG 移除健康狀態不良的後端或端點,以及 (2) 在後端或端點被視為健康狀態良好,足以再次接收流量時,將其重新加入。與服務相關聯的健康狀態檢查會判斷後端或端點是否為健康狀態。 | 
如要進一步瞭解不同的流量分配選項及其運作方式,請參閱 backendServices REST API 頁面。
應用實例範例
進階流量管理可因應許多用途,本節將提供一些概略的範例。
您可以在「設定進階流量管理」和「透過進階流量管理設定無 Proxy gRPC 服務」指南中,找到更多範例 (包括程式碼範例)。
精細的流量路由,可用於個人化
您可以根據要求的參數,將流量轉送至服務。舉例來說,您可以使用這項服務為 Android 使用者提供更個人化的體驗。在下圖中,Cloud Service Mesh 會設定服務網狀結構,將含有 user-agent:Android 標頭的要求傳送至 Android 服務,而非一般服務。
user-agent 的 Android 進行轉送 (按一下可放大)以權重為依據的流量分配,可讓部署作業更安全
部署現有正式版服務的新版本可能會帶來風險。即使測試環境中的測試已通過,您可能也不想立即將所有使用者轉送至新版本。
Cloud Service Mesh 可讓您定義以權重為準的流量拆分,以便在多個服務中分配流量。舉例來說,您可以將 1% 的流量傳送至新版服務,監控所有服務是否正常運作,然後逐步增加傳送至新服務的流量比例。
用於偵錯的流量鏡像
在偵錯問題時,將實際工作環境流量的副本傳送至偵錯服務可能會有所幫助。Cloud Service Mesh 可讓您設定要求鏡像政策,將要求傳送至某項服務,並將這些要求的複本傳送至另一項服務。
精細調整負載平衡功能以提升效能
視應用程式特性而定,您或許可以透過微調服務後端的流量分配方式,改善效能和可用性。您可以使用 Cloud Service Mesh 套用進階負載平衡演算法,讓系統根據您的需求分配流量。
下圖與前述圖表不同,除了顯示目的地後端服務 (Production Service),還顯示該後端服務的後端 (Virtual Machine 1、Virtual Machine 2、Virtual Machine 3)。透過進階流量管理功能,您可以設定目的地後端服務的選取方式,以及該目的地服務的後端流量分配方式。
後續步驟
- 如要進一步瞭解網址對應,請參閱「網址對應總覽」和「使用網址對應」。
- 如要將網格外部的流量引導至網格,請參閱「網格輸入流量」。
- 如要設定功能並部署 Sidecar Proxy,請參閱「使用 Envoy 設定進階流量管理」。
- 如要設定使用無 Proxy gRPC 部署項目的功能,請參閱「透過無 Proxy gRPC 服務設定進階流量管理」。