傳統版應用程式負載平衡器的流量管理總覽

本頁將概略介紹傳統版應用程式負載平衡器的流量管理功能。本頁面僅適用於傳統版應用程式負載平衡器。如果您使用其他模式的負載平衡器,並支援擴充的流量管理功能集,請參閱下列其中一個頁面:

傳統版應用程式負載平衡器支援流量管理功能,可讓您使用下列功能:

您可以使用負載平衡器的網址對應設定這些功能。如需背景資訊,請參閱下列主題:

流量管理元件

從高層次來看,外部應用程式負載平衡器會使用全域網址對應來管理流量。

負載平衡器提供下列互斥的主要動作:

  • 將要求轉送至後端服務
  • 執行重新導向

設定負載平衡器時,您可以設定網址重寫動作,負載平衡器就會在將要求傳送至後端服務或後端值區前執行該動作。

您可以在網址對應中,於三個層級套用重寫或重新導向:

  • 在路徑相符時,動作生效的 pathRule
  • 在 pathMatcher 中,當沒有路徑與這個 pathMatcher 相符時,動作會生效
  • urlMap:如果沒有任何主機規則中指定的主機相符,系統就會在此處執行動作

在 pathMatcher 中使用 routeRules 可替代 pathRules。pathRules 和 routeRules 不得同時出現在同一個 pathMatcher 中。 與 pathRules 不同,routeRules 會依序檢查。routeRule 可以測試網址路徑、HTTP 標頭和網址查詢參數。

應用實例範例

流量管理適用於許多用途。本節提供幾個高階範例。

重寫

網址重寫功能可讓您向外部使用者顯示與服務所用網址不同的網址。

網址重新編寫會將網址與資源分開。您可以將使用者容易記憶及使用的網址,轉換為搜尋引擎容易找到的網址,或是轉換為內部實作專用的網址。

網址重新編寫功能會執行下列作業:

  1. 讀取要求中的傳入網址。
  2. 取代主機、路徑,或主機和路徑,在將流量導向後端服務或後端值區前轉換網址。

在下圖中:

  1. 日本的使用者傳送網址要求 www.mydomain.com/static/images/someimage.jpg。
  2. 當要求抵達外部應用程式負載平衡器時,負載平衡器會使用網址對應中的資訊,將網址重新編寫為 www.myorigin.com/august_snapshot/images/someimage.jpg。
  3. (選用) 在這個範例中,網址對應會將要求傳送至外部後端。
使用傳統版應用程式負載平衡器重新編寫網址。
圖 1. 使用傳統版應用程式負載平衡器重新編寫網址。

如需設定範例,請參閱「重寫」。

重新導向

透過網址重新導向,您可以將用戶端要求從一個網址重新導向至另一個網址。

包括:

  • 將所有 HTTP 要求重新導向至 HTTPS 要求。
  • 重新導向至其他網址,該網址是透過修改網址的主機、路徑,或主機和路徑部分而形成,並可選擇移除或保留任何查詢參數。
  • 選擇要發布的重新導向回應代碼。

網址重新導向可用於下列功能:

  • 提供網址縮短服務。用戶端網址可以大幅縮短。這項服務會將使用者重新導向至含有長網址的網頁。
  • 避免網頁移動或過時時出現無效連結。
  • 允許屬於同一位擁有者的多個網域名稱參照單一網站。
  • 避免在後端伺服器設定因應措施,以支援必要的重新導向,進而減少繁瑣作業和提升效率。
  • 減少延遲時間。與在後端端點建立的重新導向相比,在邊緣建立的重新導向可縮短延遲時間。

HTTP 至 HTTPS 的重新導向功能可進一步協助您:

  • 符合加密流量的法規遵循要求 (例如《健康保險流通與責任法案》)。
  • 使用 HTTPS 重新導向要求,而非拒絕以 HTTP 通訊協定傳送的要求。
  • 在第 7 層負載平衡器本身重新導向流量,而非在後端伺服器實作重新導向,可提升應用程式的安全設定檔。

在下圖中:

  1. 日本使用者傳送 GET http://example.com/img1 要求。
  2. 根據網址對應中定義的重新導向,負載平衡器會傳回 HTTP/1.1 302 Found Location: https://example.com/img1 重新導向,將 HTTP 要求重新導向至 HTTPS 要求。
  3. 使用者的瀏覽器會傳送 GET https://example.com/img1 要求。
使用傳統版應用程式負載平衡器進行網址重新導向。
圖 2. 使用傳統版應用程式負載平衡器進行網址重新導向。

如需設定範例,請參閱「重新導向」。

支援的回應代碼

下表列出支援的重新導向回應代碼。

回應碼 數字 附註
MOVED_PERMANENTLY_DEFAULT 301
FOUND 302
PERMANENT_REDIRECT 308 在這種情況下,要求方法會保留。
TEMPORARY_REDIRECT 307 在這種情況下,要求方法會保留。
SEE_OTHER 303

根據標頭和參數轉送

負載平衡器可根據 HTTP 標頭和網址查詢參數,透過標頭型和參數型轉送做出轉送決策。

有了這項功能,您不必部署額外的 Proxy 層 (例如 NGINX) 進行路由,即可簡化雲端架構。

您可以使用外部應用程式負載平衡器執行下列操作:

  • A/B 測試
  • 將顧客指派給後端執行的不同服務組合
  • 根據要求來源裝置的不同類別,提供不同的網頁和體驗

根據主機字串選取 pathMatcher 後,routeRules 會在 pathMatcher 中選取網址路徑。詳情請參閱 URL 地圖總覽。

範例:使用查詢參數式轉送設定 A/B 測試

以下範例說明如何透過比對查詢字串來指定實驗和輸入內容,進行 A/B 測試。

假設您希望要求按照下列方式處理:

  • 所有查詢參數值為 A 的要求,都會傳送至名為 BackendServiceForProcessingOptionA 的後端服務。
  • 所有查詢參數值為 B 的要求,都會傳送至名為 BackendServiceForProcessingOptionB 的後端服務。

下表匯總了這些規定。

要求 後端服務
http://test.mydomain.com?ABTest=A BackendServiceForProcessingOptionA
http://test.mydomain.com?ABTest=B BackendServiceForProcessingOptionB

如要在全域網址對應中設定這項功能,可以建立下列設定。

比對 動作
pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].name = ABTest

pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].exactMatch = A
pathMatchers[].routeRules[].service = BackendServiceForProcessingOptionA
pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].name = ABTest

pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].exactMatch = B
pathMatchers[].routeRules[].service = BackendServiceForProcessingOptionB

如需設定範例,請參閱「根據標頭和參數進行路由」。

將要求轉送至後端

系統會採用兩階段式做法,決定流量的後端:

  • 負載平衡器會選取具有後端的後端服務。後端可以是下列項目:

    • 非代管執行個體群組中的 Compute Engine 虛擬機器 (VM) 執行個體
    • 代管執行個體群組 (MIG) 中的 Compute Engine VM
    • 容器 (透過區域網路端點群組 (NEG) 中的 Google Kubernetes Engine (GKE) 節點)
    • 網際網路 NEG 中的 Google Cloud 外部後端
    • 後端 bucket 中的 Cloud Storage
    • 無伺服器 NEG 中的 App Engine、Cloud Run functions 或 Cloud Run 服務

    負載平衡器會根據全域網址對應中定義的規則選擇後端服務。

  • 後端服務會根據全域後端服務中定義的政策,選取後端執行個體。

設定路徑時,您可以選擇下列模式:

  • 使用 pathRules 進行簡易主機與路徑測試
  • 使用 routeRules 進行進階要求測試

您可以為每個網址對應選擇使用簡易型主機與路徑規則,或是進階型主機、路徑與轉送規則。這兩種模式互斥。每個網址對應只能包含其中一種模式。

簡易型主機與路徑規則

在簡易型主機與路徑規則中,網址對應的運作方式如網址對應總覽所述。

下圖顯示簡易型主機與路徑規則的邏輯流程。

網址對應流程,包含簡易主機與路徑規則。
圖 3. 網址對應流程,包含簡易主機與路徑規則。

系統一開始會使用主機規則評估要求。主機是要求指定的網域。如果要求 host 符合 hosts 欄位中的其中一個項目,系統就會使用相關聯的路徑比對器。

接著,系統會評估路徑比對器。路徑規則會依據「優先比對最長路徑」原則來進行評估,且可採任意順序指定。找到最符合條件的規則後,要求會轉送至對應的後端服務。如果要求不符,系統會使用預設後端服務。

典型的簡易主機與路徑規則可能如下所示,其中影片流量會前往 video-backend-service,所有其他流量則會前往 web-backend-service。

$ gcloud compute url-maps describe ext-https-map
defaultService: global/backendServices/web-backend-service
hostRules:
- hosts:
  - '*'
  pathMatcher: pathmap
name: ext-https-map
pathMatchers:
- defaultService: global/backendServices/web-backend-service
  name: pathmap
  pathRules:
  - paths:
    - /video
    - /video/*
    service: global/backendServices/video-backend-service

如需設定範例,請參閱「主機和路徑」。

進階主機、路徑和轉送規則

相較於簡易型主機與路徑規則,進階型主機、路徑與轉送規則提供更多設定選項。這些選項可啟用更進階的流量管理模式,並修改部分語意。舉例來說,系統會依序執行路徑規則 (而非使用最長路徑優先比對語意)。

如先前簡單的主機和路徑規則範例所示,您可以使用全域網址對應設定進階流量管理,但這次要使用 pathMatchers[].routeRules[],而不是 pathMatchers[].pathRules[]。

以下各節說明進階主機、路徑和轉送規則元件。

主機規則

要求送達負載平衡器時,系統會根據網址對應中定義的 hostRules 評估要求中的 host 欄位。每個主機規則都包含一或多個主機的清單,以及單一路徑比對器 (pathMatcher)。如未定義 hostRules,要求會轉送至 defaultService。

詳情請參閱全球網址對應 API 說明文件中的 hostRules[] 和 defaultService。

路徑比對器

要求符合主機規則後,負載平衡器會評估與主機對應的路徑比對器。

路徑比對器由下列元件組成:

  • 一或多個路徑規則 (pathRules) 或轉送規則 (routeRules)。
  • 如果沒有其他相符的後端服務,系統就會執行預設規則。規則有下列互斥選項:

    • 預設服務會指定預設後端服務,以便在沒有其他相符的後端服務時,將流量轉送至該服務。
    • 如果沒有其他相符的後端服務,系統就會根據預設重新導向網址重新導向。

為預設服務設定負載平衡器時,您還可以設定在將要求傳送至預設服務前,先重寫網址。

詳情請參閱全球網址對應 API 說明文件中的 pathMatchers[]、pathMatchers[].pathRules[] 和 pathMatchers[].routeRules[]。

路徑規則

路徑規則 (pathRules) 會指定一或多個網址路徑,例如 / 或 /video。 路徑規則通常適用於先前所述的簡易主機與路徑型路由。

詳情請參閱全球網址對應 API 說明文件中的 pathRules[]。

轉送規則

轉送規則 (routeRules) 會比對傳入要求中的資訊,並根據比對結果做出轉送決策。

轉送規則可以包含各種不同的比對規則 (matchRules) 和各種不同的轉送動作 (routeAction)。

比對規則會根據 HTTP(S) 要求路徑、標頭和查詢參數評估傳入要求。比對規則支援各種比對類型 (例如前置字串比對) 和修飾符 (例如不區分大小寫)。舉例來說,您可以根據自訂 HTTP 標頭是否存在,將 HTTP(S) 要求傳送至一組後端。

如需 matchRules 支援的選項詳細清單,請參閱全域網址對應 API 說明文件中的 matchRules[]。

如果您有多個路徑規則,負載平衡器會依序執行這些規則,讓您指定自訂邏輯來比對、路由及執行其他動作。

在特定路由規則中,找到第一個相符項目時,負載平衡器就會停止評估相符規則,並忽略所有剩餘相符規則。

Google Cloud 會執行下列動作:

  1. 尋找符合要求的第一個比對規則。
  2. 停止查看任何其他相符規則。
  3. 套用對應路徑動作中的動作。

轉送規則包含多個元件,如下表所示。

路徑規則元件 (API field name) 說明
優先順序 (priority) 指派給特定路徑比對器中轉送規則的數字,範圍為 0 到 2,147,483,647 (即 (2^31)-1),用來決定轉送規則的評估順序。

最高優先順序為 0。最低優先順序為 2147483647。舉例來說,系統會先評估優先順序為 4 的規則,再評估優先順序為 25 的規則。系統會套用第一個符合要求的規則。

優先順序編號可以有間隔,不一定要連續。 您無法建立多個優先順序相同的規則。
說明 (description) 選填說明,最多 1,024 個半形字元。
服務 (service) 如果符合這項規則,流量會導向的後端服務資源完整或部分網址。
比對規則 (matchRules) 系統會根據要求評估一或多項規則。這些 matchRules 可以比對所有要求屬性或屬性子集 (例如路徑、HTTP 標頭和查詢 (GET) 參數)。

在 matchRule 中,所有比對條件都必須符合,routeRule 的 routeActions 才會生效。如果 routeRule 具有多個 matchRules,則當要求與 routeRule 的任一 matchRules 相符時,routeRule 的 routeActions 即會生效。
轉送動作 (routeAction) 可讓您指定符合比對規則條件時要採取的網址重寫動作。
重新導向動作 (urlRedirect) 您可以設定動作,在符合相符規則條件時,以 HTTP 重新導向做為回應。這個欄位無法與路徑動作一併使用。

詳情請參閱全球網址對應 API 說明文件中的下列欄位:

  • routeRules[]
  • routeRules[].priority
  • routeRules[].description
  • routeRules[].service
  • routeRules[].matchRules[]
  • routeRules[].routeAction
  • routeRules[].urlRedirect

比對規則

比對規則 (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 說明文件。

設定流量管理

您可以使用 Google Cloud 控制台、gcloud 或 Cloud Load Balancing API 設定流量管理。在所選設定環境中,您可以使用 YAML 設定檔設定流量管理。

如需編寫這些 YAML 檔案的說明,請參閱下列資源: