本頁提供全域外部應用程式負載平衡器的進階流量管理功能總覽。本頁面僅適用於全域外部應用程式負載平衡器。這些負載平衡器一律為全域,且一律為進階級。如果您使用其他模式的負載平衡器,請參閱下列其中一個頁面:
全域外部應用程式負載平衡器支援下列進階流量管理功能:- 流量導向。根據 HTTP(S) 參數 (例如主機、路徑、標頭和其他要求參數) 智慧地轉送流量。
- 流量動作。執行以要求和回應為基礎的動作 (例如重新導向和標頭轉換)。
- 流量政策。微調負載平衡行為 (例如進階負載平衡演算法)。
您可以使用網址對應和後端服務設定這些功能。 如需詳細資訊,請參閱下列主題:
應用實例範例
流量管理適用於許多用途。本節提供幾個高階範例。
流量導引:根據標頭轉送
流量導引功能可根據要求標頭等 HTTP 參數,將流量導向服務執行個體。舉例來說,如果使用者裝置的請求標頭中含有 user-agent:Mobile
,流量導向功能可將該流量傳送至指定處理行動流量的服務執行個體,並將不含 user-agent:Mobile
的流量傳送至指定處理其他裝置流量的執行個體。
流量動作:根據權重拆分流量
部署現有正式版服務的新版本通常會帶來一些風險。即使測試在預先發布環境中通過,您可能也不想立即對 100% 的使用者發布新版本。透過流量管理,您可以定義多個後端服務的流量分配比例。
舉例來說,您可以將 95% 的流量傳送到舊版服務,而將 5% 的流量傳送給新版服務。確認新版正式環境運作正常後,即可逐步調整百分比,直到所有流量都轉送至新版服務。流量拆分通常用於部署新版本、A/B 測試、服務遷移和類似程序。
流量政策:要求鏡像
貴機構可能設有特定法規遵循規定,要求將所有流量鏡像到其他服務,例如將要求詳細資料記錄在資料庫中,以供日後重播。
透過 Service Extensions 擴充功能
與服務擴充功能整合後,您就能將自訂邏輯插入支援的應用程式負載平衡器負載平衡資料路徑。
詳情請參閱服務擴充功能總覽。
流量管理元件
從高層次來看,負載平衡器會運用全域網址對應和全域後端服務資源,提供流量管理功能。您可以使用網址對應設定流量導向和流量動作。 與網址對應相關聯的Google Cloud 資源包括:
- 轉送規則
- 規則比對
- 規則動作
您可以使用後端服務設定流量政策。 與後端服務相關聯的Google Cloud 資源包括:
- 地區負載平衡器政策
- 一致性雜湊負載平衡器設定
- 離群值偵測
下圖顯示用於實作各項功能的資源。
將要求轉送至後端
在全域外部應用程式負載平衡器中,系統會使用兩階段方法判斷流量的後端:設定路徑時,您可以選擇下列模式:
- 簡易型主機與路徑規則
- 進階主機、路徑和轉送規則
這兩種模式互斥。每個網址對應只能包含其中一種模式。
簡易型主機與路徑規則
在簡易型主機與路徑規則中,網址對應的運作方式如網址對應總覽所述。
下圖顯示簡易型主機與路徑規則的邏輯流程。
系統一開始會使用主機規則評估要求。主機是要求指定的網域。如果要求 host
符合 hosts
欄位中的其中一個項目,系統就會使用相關聯的路徑比對器。
接著,系統會評估路徑比對器。路徑規則會依據「優先比對最長路徑」原則來進行評估,且可採任意順序指定。找到最相符的規則後,要求就會轉送至對應的後端服務。如果要求不符,系統會使用預設後端服務。
典型的簡易主機與路徑規則可能如下所示,其中影片流量會前往 video-backend-service
,所有其他流量則會前往 web-backend-service
。
defaultService
和 service
可以指向後端服務或後端值區。這個範例顯示後端服務。
gcloud compute url-maps describe lb-map
defaultService: global/backendServices/web-backend-service
hostRules:
- hosts:
- '*'
pathMatcher: pathmap
name: lb-map
pathMatchers:
- defaultService: global/backendServices/web-backend-service
name: pathmap
pathRules:
- paths:
- /video
- /video/*
service: global/backendServices/video-backend-service
進階主機、路徑和轉送規則
相較於簡易型主機與路徑規則,進階型主機、路徑與轉送規則提供更多設定選項。這些選項可啟用更進階的流量管理模式,並修改部分語意。舉例來說,轉送規則有相關聯的優先順序值,且會依優先順序解讀 (而非使用最長路徑優先比對語意)。
如先前簡單的主機與路徑規則範例所示,您可以使用網址對應設定進階流量管理。舉例來說,下列網址對應會設定轉送路徑,將 95% 的流量轉送至一個後端服務,並將 5% 的流量轉送至另一個後端服務。
defaultService
和 service
可以指向後端服務或後端值區。這個範例顯示後端服務。
gcloud compute url-maps describe lb-map
defaultService: global/backendServices/service-a
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
name: lb-map
pathMatchers:
- defaultService: global/backendServices/service-a
name: matcher1
routeRules:
- matchRules:
- prefixMatch: ''
routeAction:
weightedBackendServices:
- backendService: global/backendServices/service-a
weight: 95
- backendService: global/backendServices/service-b
weight: 5
主機規則
當要求抵達負載平衡器時,系統會根據網址對應中定義的 hostRules
評估要求中的 host
欄位。每個主機規則都包含一或多個主機的清單,以及單一路徑比對器 (pathMatcher
)。如果未定義 hostRules
,要求會轉送至 defaultService
。
hostRules[]
和 defaultService
。
路徑比對器
要求符合主機規則後,負載平衡器會評估與主機對應的路徑比對器。
路徑比對器由下列項目組成:
- 一或多個路徑規則 (
pathRules
) 或轉送規則 (routeRules
)。 - 預設服務 (
defaultService
):如果沒有其他相符的後端服務或後端值區,系統就會使用預設後端服務或後端值區。
pathMatchers[]
、pathMatchers[].pathRules[]
和 pathMatchers[].routeRules[]
。
路徑規則
路徑規則 (pathRules
) 會指定一或多個網址路徑,例如 /
或 /video
。
路徑規則通常適用於先前所述的簡易主機與路徑型路由。
pathRules[]
。
轉送規則
轉送規則 (routeRules
) 會比對傳入要求中的資訊,並根據比對結果做出轉送決策。
轉送規則可以包含各種不同的比對規則 (matchRules
) 和各種不同的轉送動作 (routeAction
)。
比對規則會根據 HTTP(S) 要求路徑、標頭和查詢參數評估傳入要求。比對規則支援各種比對類型 (例如前置字串比對) 和修飾符 (例如不區分大小寫)。舉例來說,您可以根據自訂 HTTP 標頭是否存在,將 HTTP(S) 要求傳送至一組後端。
注意:比對選項和語意會因您比對的要求部分而異。詳情請參閱全球網址對應 API 說明文件中的matchRules[]
。
如果您有多個轉送規則,負載平衡器會依優先順序 (根據 priority
欄位) 執行這些規則,讓您指定相符、轉送和其他動作的自訂邏輯。
在特定轉送規則中,找到第一個相符項目時,負載平衡器就會停止評估比對規則,並忽略所有剩餘比對規則。
Google Cloud 會執行下列動作:
- 尋找符合要求的第一個比對規則。
- 停止查看任何其他比對規則。
- 套用對應路徑動作中的動作。
轉送規則包含多個元件,如下表所示。
路徑規則元件 (API field name ) |
說明 |
---|---|
優先順序 (priority ) |
指派給指定路徑比對器中轉送規則的數字,範圍為 0 到 2,147,483,647 (即 (2^31)-1)。 優先順序會決定轉送規則的評估順序,規則的優先順序會隨著數字增加而降低,因此系統會先評估優先順序為 4 的規則,再評估優先順序為 25 的規則。系統會套用與要求相符的第一個規則。
優先順序編號可以有間隔。您無法建立多個優先順序相同的規則。 |
說明 (description ) |
選填說明,最多 1,024 個半形字元。 |
服務 (service ) |
如果符合這項規則,流量會導向後端服務資源的完整或部分網址。 |
比對規則 (matchRules ) |
系統會根據要求評估一或多項規則。這些 matchRules 可以比對所有要求屬性或屬性子集 (例如路徑、HTTP 標頭和查詢 (GET) 參數)。在 matchRule 中,所有比對條件都必須符合,routeRule 的 routeActions 才會生效。如果 routeRule 具有多個 matchRules ,則當要求與 routeRule 的任一 matchRules 相符時,routeRule 的 routeActions 即會生效。 |
轉送動作 (routeAction ) |
可讓您指定符合比對規則條件時要採取的動作。這些動作包括流量拆分、網址重寫、重試和鏡像、錯誤植入,以及 CORS 政策。 |
重新導向動作 (urlRedirect ) |
您可以設定動作,在符合比對規則條件時,以 HTTP 重新導向做為回應。這個欄位無法與路徑動作一併使用。 |
標題動作 (headerAction ) |
您可以設定符合 matchRules 中的條件時要求和回應標頭的轉換規則。 |
routeRules[]
routeRules[].priority
routeRules[].description
routeRules[].service
routeRules[].matchRules[]
routeRules[].routeAction
routeRules[].urlRedirect
routeRules[].headerAction
比對規則
比對規則 (matchRules
) 會比對要求的一或多項屬性,並採取轉送規則中指定的動作。以下列出一些可使用比對規則比對的要求屬性:
主機:主機名稱是網址的網域名稱部分;例如,網址
http://example.net/video/hd
的主機名稱部分為example.net
。要求中的主機名稱來自Host
標頭,如下列 curl 指令範例所示,其中10.1.2.9
是負載平衡的 IP 位址:curl -v http://10.1.2.9/video/hd --header 'Host: example.com'
主機名稱後面即為路徑;例如
/images
。此規則可以指定要比對整個路徑,還是僅比對路徑的前置部分。可進行 Cookie 比對以及根據查詢參數 (GET 變數) 進行比對的 HTTP 標頭等其他 HTTP 要求參數。
pathMatchers[].routeRules[].matchRules[]
。
路徑動作
轉送動作是指轉送規則與要求屬性相符時要採取的特定動作。
轉送動作 (API field name ) |
說明 |
---|---|
重新導向 (urlRedirect ) |
傳回可設定的 3xx 回應碼。此外,它也會使用適當的 URI 來設定 Location 回應標頭,以取代重新導向動作中所指定的主機和路徑。 |
網址重寫 (urlRewrite ) |
重新編寫網址的主機名稱部分、網址的路徑部分或兩者均重新編寫,然後再傳送要求至選取的後端服務。如要重寫路徑部分,可以在 pathTemplateRewrite 中使用萬用字元。
|
標頭轉換 (headerAction ) |
在將要求傳送至後端服務前,新增或移除要求標頭。從後端服務收到回應後,這項設定也可以新增或刪除回應標頭。嘗試新增及移除相同標頭會導致標頭遭到移除,除非 replace: True 旗標與 requestHeadersToAdd 作業搭配使用。
|
流量鏡像 (requestMirrorPolicy ) |
除了將要求轉送到所選的後端服務外,也會以射後不理的模式將完全相同的要求傳送至設定的鏡射後端服務。負載平衡器不會等待後端傳送回應,而是將鏡射要求傳送至後端。 使用流量鏡像時,請注意下列限制:
|
加權流量拆分 (weightedBackendServices ) |
可將相符規則的流量分配給多個後端服務,並與指派給個別後端服務的使用者定義權重成正比。 此功能對於設定分階段部署或 A/B 測試非常實用。例如,轉送動作可以設定為將 99% 的流量傳送到執行穩定版應用程式的服務,而將 1% 的流量傳送到執行較新版應用程式的不同服務。 |
重試次數 (retryPolicy ) |
設定負載平衡器重試失敗要求的條件、負載平衡器在重試前等待的時間,以及允許的重試次數上限。 請注意下列事項:
|
逾時 (timeout ) |
指定所選路徑的逾時時間。逾時時間的計算方式,是從要求完全處理完畢的時間,到回應完全處理完畢的時間。逾時包括所有重試。 |
錯誤植入 (faultInjectionPolicy ) |
處理模擬故障的要求時,會產生高延遲、服務超載、服務故障和網路分區等錯誤。這項功能可用於測試服務對模擬故障的彈性。 |
延遲注入 (faultInjectionPolicy ) |
針對使用者定義部分的要求發生延遲,然後再傳送要求至選取的後端服務。 |
中止插入 (faultInjectionPolicy ) |
直接以使用者定義的 HTTP 狀態碼來回應一小部分要求,而不是將這些要求轉送至後端服務。 |
安全性政策 (corsPolicy ) |
跨源資源共享 (CORS) 政策會處理用於強制執行 CORS 要求的設定。 |
您可以指定下列其中一個路徑動作:
- 將流量轉送至單一服務 (
service
)。 - 利用流量拆分技巧,將流量導向多項服務 (
weightedBackendServices weight:x
,其中 x 必須介於 0 到 1000 之間)。 - 重新導向網址 (
urlRedirect
)。
此外,您也可以將上述任一路徑動作與下列一或多個路徑動作結合:
- 建立流量鏡射 (
requestMirrorPolicy
)。 - 重寫網址主機和路徑 (
urlRewrite
)。 - 重試失敗的要求 (
retryPolicy
)。 - 設定逾時時間 (
timeout
)。 - 對百分比的流量導入錯誤 (
faultInjectionPolicy
)。 - 新增 CORS 政策 (
corsPolicy
)。 - 操控要求或回應標頭 (
headerAction
)。
urlRedirect
urlRewrite
headerAction
requestMirrorPolicy
weightedBackendServices
retryPolicy
timeout
faultInjectionPolicy
corsPolicy
HTTP 至 HTTPS 的重新導向
如要將 HTTP 流量重新導向至 HTTPS,可以建立兩個包含共用 IP 位址的轉送規則。
如需完整範例,請參閱為全域外部應用程式負載平衡器設定 HTTP 至 HTTPS 的重新導向。流量政策
使用後端服務資源時,您可以設定流量政策,微調執行個體群組或網路端點群組 (NEG) 內的負載平衡。只有在使用網址對應選取後端服務後 (如先前所述),這些政策才會生效。
流量政策可讓您:
- 控制後端服務中執行個體之間的負載平衡演算法。
- 控制上游服務的連線量。
- 控管是否將健康狀態不良的主機從後端服務中移除。
流量政策 (API field name ) |
說明 |
---|---|
負載平衡地區政策 (LocalityLbPolicy ) |
對於後端服務或值區,流量分配是根據「負載平衡模式」和「負載平衡地區政策」。 平衡模式會決定應傳送至每個後端 (值區、執行個體群組或 如要瞭解支援的平衡模式,請參閱「平衡模式」。 如要瞭解支援的負載平衡政策演算法,請參閱全域後端服務 API 說明文件中的 |
工作階段相依性 (consistentHash ) |
包括 HTTP Cookie 型相依性、HTTP 標頭型相依性、用戶端 IP 位址相依性、具狀態 Cookie 型工作階段相依性,以及產生的 Cookie 相依性。工作階段相依性會盡可能將特定用戶端的要求傳送至同一個後端,只要後端健康狀態良好並具有容量即可。 只有在負載平衡地區政策設為 如要進一步瞭解工作階段親和性,請參閱 |
離群值偵測 (outlierDetection ) |
這是一組政策,可用來指定移除 NEG 中健康狀態不良的後端 VM 或端點的條件,也會定義條件,決定後端或端點何時會被視為健康狀態良好到足以再次接收流量。 如要進一步瞭解離群值偵測,請參閱全域後端服務 API 說明文件中的 |
後續步驟
- 如要設定全域外部應用程式負載平衡器的流量管理功能,請參閱設定全域外部應用程式負載平衡器的流量管理功能。