如何在 Application Load Balancer 上實現路徑型路由?

2 分的閱讀內容
0

我在我的 Application Load Balancer 後方執行多個微型服務。我想根據 URL 路徑將請求轉發至特定的目標群組。

簡短描述

透過 Application Load Balancer,您可以建立一個接聽程式,其中包含根據 URL 將請求轉發至目標群組的規則。此功能不適用於其他負載平衡器類型,例如 Classic Load Balancer、Network Load Balancer 和 Gateway Load Balancer。路徑模式規則僅套用於 URL 的路徑,而不會套用於 URL 的查詢參數。如需路徑樣式的詳細資訊,請參閱路徑條件

若要在 Application Load Balancer 上建立路徑型路由,請執行下列動作:

  1. 建立目標群組。
  2. 設定接聽程式規則。

建立目標群組之前,請確定符合下列先決條件:

解決方案

假設您有兩項服務,即服務 A服務 B,並使應用程式透過連接埠 80 在這些服務上執行。例如,服務 A 在路徑 /svcA 上執行應用程式,而服務 B 則在路徑 /svcB 上執行應用程式。

建立目標群組

建立執行個體之後,請將這些執行個體註冊至目標群組。根據在負載平衡器上設定的接聽程式規則,使用您為目標群組指定的連接埠和通訊協定,將請求轉發至已註冊的目標。但是,當您個別註冊目標時,您可以覆寫連接埠資訊。如需詳細資訊,請參閱建立目標群組

例如,假設您建立兩個通訊協定為 ** HTTP**、連接埠80 的目標群組,每個群組都已部署一個應用程式。舉例來說,您將執行服務 A 的 EC2 執行個體註冊至 target-group-A。對於此目標群組,您可以將 HealthCheckProtocol 設定為 ** HTTP**,將 HealthCheckPath 設定為 /svcA

您將執行服務 B 的 EC2 執行個體註冊至 target-group-B。對於此目標群組,您可以將 HealthCheckProtocol 設定為 ** HTTP**,將 HealthCheckPath 設定為 /svcB

您可以隨時在目標群組中新增目標,或從目標群組中移除目標。如需詳細資訊,請參閱向目標群組註冊目標

在規則中為接聽程式指定目標群組之後,負載平衡器會持續監控在為負載平衡器啟用的可用區域中向目標群組註冊之所有目標的運作狀況。負載平衡器會將請求路由至運作狀態良好的已註冊目標。如需詳細資訊,請參閱目標群組的運作狀態檢查

設定接聽程式規則

當您為 Application Load Balancer 建立接聽程式時,除了預設規則之外,您可以定義一個或多個規則。規則包含優先順序、動作以及一個或多個條件。您無法為預設規則定義條件。如果不符合任何非預設規則的條件,則會執行預設規則的動作。

若要進一步了解規則優先順序,請參閱重新排列規則

若要進一步了解規則動作,請參閱規則動作類型

若要進一步了解規則條件,請參閱規則條件類型

若要在 Application Load Balancer 上實現路徑型路由,您必須設定接聽程式規則。您必須根據想要路由傳送請求的路徑模式,為每個路徑模式設定一個規則。

例如:

接聽程式規則 1: 如果您的請求 URL 路徑包含字串 /svcA,請將請求轉發至 target-group-A。這是因為 target-group-A 包含在指定路徑上執行應用程式的服務 A。

接聽程式規則 2: 如果您的請求 URL 路徑包含字串 /svcB,則將該請求轉發至 target-group-B。這是因為 target-group-B 包含在指定路徑上執行應用程式的服務 B。

若要建立新的 HTTP 接聽程式,請參閱建立 HTTP 接聽程式

若要建立新的 HTTPS 接聽程式,請參閱建立 HTTPS 接聽程式

若要使用條件和動作更新接聽程式規則,請執行下列動作:

  1. 開啟 Amazon EC2 主控台
  2. 在導覽窗格的負載平衡中,選擇負載平衡器
  3. 選取負載平衡器,然後選擇接聽程式
  4. 若要更新接聽程式,請選擇檢視/編輯規則
  5. 選擇功能表列中的新增規則圖示 (加號)。這會在您可以按優先順序插入規則的位置新增插入規則圖示。
  6. 選擇在上一步驟新增的其中一個插入規則 圖示。
  7. 若要為 /svcA 新增路徑型規則,請選擇新增條件、路徑,然後輸入路徑模式 /svcA。若要儲存該條件,請選擇核取記號圖示。
  8. 若要新增轉發動作,請選擇新增動作、轉發至,然後選擇目標群組 target-group-A
  9. 選擇儲存

對路徑 /svcB 重複上述步驟,並進行下列變更:

  • 在步驟 6 中,請輸入路徑模式 /svcB
  • 在步驟 7 中,選擇目標群組 target-group-B

如需詳細資訊,請參閱Application Load Balancer 的接聽程式規則

注意: 路徑型路由規則會尋找精確比對。在此範例中,路徑型路由使用路徑定義 /svcA 和 /svcB。如果您的應用程式需要沿著這些路徑進一步路由請求,例如 /svcA/doc 或 /svcB/doc,則在編寫路徑型路由規則的條件時包含萬用字元。使用類似於 /svcA*/svcB* 的路徑模式,以確保路由請求時考慮到這些路徑上的任何文件。

測試路徑型路由

若要測試此路由,請在網頁瀏覽器中複製 Application Load Balancer 的 DNS 名稱,然後新增 URL 路徑 /svcA/svcB。當 Application Load Balancer 接聽程式收到請求時,接聽程式會根據路徑條件將該請求轉發至適當的目標群組。

例如,假設您的 Application Load Balancer 的 DNS 名稱為 alb-demo-1234567890.us-west-2.elb.amazonaws.com

  • http://alb-demo-1234567890.us-west-2.elb.amazonaws.com/svcA 必須傳回服務 A。
  • http://alb-demo-1234567890.us-west-2.elb.amazonaws.com/svcB 必須傳回服務 B。

透過路徑型路由,您的 Application Load Balancer 允許您使用接聽程式規則和目標群組,在單一負載平衡器後方託管多個微型服務。因此,您可以設定複雜規則,以便將用戶端請由路由至您的應用程式。除了路徑型規則之外,您也可以根據主機標頭、使用者代理程式標頭和查詢參數值,將請求路由至特定應用程式。如需詳細資訊,請參閱 AWS Application Load Balancer 的進階請求路由


相關資訊

如何對失敗的 Application Load Balancer 運作狀態檢查進行疑難排解和修復?

對 Application Load Balancer 進行疑難排解

AWS 官方
AWS 官方已更新 2 年前