閘道路由 - AWS 應用程式網格

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

閘道路由

重要

支援終止通知:2026 年 9 月 30 日, AWS 將停止對 的支援 AWS App Mesh。2026 年 9 月 30 日後,您將無法再存取 AWS App Mesh 主控台或 AWS App Mesh 資源。如需詳細資訊,請造訪此部落格文章,從 遷移 AWS App Mesh 至 Amazon ECS Service Connect

閘道路由會連結至虛擬閘道,並將流量路由傳送至現有的虛擬服務。如果路由符合請求,它可以將流量分配到目標虛擬服務。本主題可協助您在服務網格中使用閘道路由。

建立閘道路由

AWS Management Console
使用 建立閘道路由 AWS Management Console
  1. 在 開啟 App Mesh 主控台https://console.aws.amazon.com/appmesh/

  2. 選擇您要在其中建立閘道路由的網格。會列出您擁有和與您共用的所有網格。

  3. 在左側導覽中選擇虛擬閘道

  4. 選擇您要與新閘道路由建立關聯的虛擬閘道。如果未列出任何項目,則需要先建立虛擬閘道。您只能為將帳戶列為資源擁有者 的虛擬閘道建立閘道路由。

  5. 閘道路由表中,選擇建立閘道路由

  6. 針對閘道路由名稱 ,指定閘道路由要使用的名稱。

  7. 針對閘道路由類型,選擇 http http2grpc

  8. 選取現有的虛擬服務名稱 。如果未列出任何項目,則需要先建立虛擬服務

  9. 選擇與虛擬服務供應商連接埠 的目標對應的連接埠。當所選虛擬服務的提供者 (路由器或節點) 具有多個接聽程式時,則需要虛擬服務供應商連接埠。

  10. (選用) 針對優先順序 ,指定此閘道路由的優先順序。

  11. 對於相符組態,請指定:

    • 如果 http/http2 是選取的類型:

      • (選用) 方法 - 指定要在傳入 http /http2 請求中比對的方法標頭。

      • (選用) 連接埠比對 - 比對傳入流量的連接埠。如果此虛擬閘道具有多個接聽程式,則需要連接埠相符。

      • (選用) 確切/尾碼主機名稱 - 指定應該在傳入請求上相符的主機名稱,以路由至目標虛擬服務。

      • (選用) 字首/精確/Regex 路徑 - 符合 之路徑的方法URL。

        • 字首相符 - 閘道路由相符的請求會重寫至目標虛擬服務的名稱/,且相符的字首會預設為重寫至 。視您設定虛擬服務的方式而定,它可以使用虛擬路由器,根據特定字首或標頭,將請求路由至不同的虛擬節點。

          重要
          • 您無法/aws-app-mesh*為字首相符 指定 /aws-appmesh*或 。 這些字首保留供未來 App Mesh 內部使用。

          • 如果定義了多個閘道路由,則請求會與字首最長的路由相符。例如,如果存在兩個閘道路由,其中一個具有 的字首,/chapter另一個具有 的字首/,則 的請求www.example.com/chapter/會與具有字/chapter首的閘道路由相符。

          注意

          如果您啟用以路徑/字首為基礎的比對,App Mesh 會啟用路徑標準化 (normalize_pathmerge_slashes ),以將路徑混淆漏洞的可能性降至最低。

          當參與請求的各方使用不同的路徑表示法時,會發生路徑混淆漏洞。

        • 完全相符 - 精確參數會停用路由的部分相符,並確保只有在路徑與目前的 EXACT相符時,才會傳回路由URL。

        • Regex 比對 - 用於描述多個URLs可能實際識別網站上的單一頁面的模式。

      • (選用) 查詢參數 - 此欄位可讓您比對查詢參數。

      • (選用) 標頭 - 指定 httphttp2 的標頭。它應該符合傳入請求,以路由至目標虛擬服務。

    • 如果 grpc 是選取的類型:

      • 主機名稱比對類型和 (選用) 精確/尾碼比對 - 指定應該在傳入請求上比對的主機名稱,以路由至目標虛擬服務。

      • grpc 服務名稱 - grpc 服務可做為API您應用程式的 ,並以 定義 ProtoBuf。

        重要

        您無法aws.appmesh為服務名稱 指定 /aws.app-mesh*或 。 這些服務名稱保留供未來 App Mesh 內部使用。

      • (選用) 中繼資料 - 指定 grpc 的中繼資料。它應該符合傳入請求,以路由至目標虛擬服務。

  12. (選用) 對於重寫組態:

    • 如果 http/http2 是選取的類型:

      • 如果字首是選取的比對類型:

        • 覆寫主機名稱的自動重寫 - 預設情況下,主機名稱會重寫為目標虛擬服務的名稱。

        • 覆寫字首的自動重寫 - 開啟時,字首重寫會指定重寫字首的值。

      • 如果 Exact Path 是選取的比對類型:

        • 覆寫主機名稱的自動重寫 - 預設會將主機名稱重寫為目標虛擬服務的名稱。

        • 路徑重寫 - 指定重寫路徑的值。沒有預設路徑。

      • 如果 Regex Path 是選取的比對類型:

        • 覆寫主機名稱的自動重寫 - 預設會將主機名稱重寫為目標虛擬服務的名稱。

        • 路徑重寫 - 指定重寫路徑的值。沒有預設路徑。

    • 如果 grpc 是選取的類型:

      • 覆寫主機名稱的自動重寫 - 預設會將主機名稱重寫為目標虛擬服務的名稱。

  13. 選擇建立閘道路由以完成。

AWS CLI

使用 建立閘道路由 AWS CLI。

使用下列命令和輸入建立閘道路由 JSON(取代 red 您自己的值):

  1. aws appmesh create-virtual-gateway \ --mesh-name meshName \ --virtual-gateway-name virtualGatewayName \ --gateway-route-name gatewayRouteName \ --cli-input-json file://create-gateway-route.json
  2. 範例 create-gateway-route.json 的內容:

    { "spec": { "httpRoute" : { "match" : { "prefix" : "/" }, "action" : { "target" : { "virtualService": { "virtualServiceName": "serviceA.svc.cluster.local" } } } } } }
  3. 輸出範例:

    { "gatewayRoute": { "gatewayRouteName": "gatewayRouteName", "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualGateway/virtualGatewayName/gatewayRoute/gatewayRouteName", "createdAt": "2022-04-06T11:05:32.100000-05:00", "lastUpdatedAt": "2022-04-06T11:05:32.100000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "httpRoute": { "action": { "target": { "virtualService": { "virtualServiceName": "serviceA.svc.cluster.local" } } }, "match": { "prefix": "/" } } }, "status": { "status": "ACTIVE" }, "virtualGatewayName": "gatewayName" } }

如需使用 AWS CLI for App Mesh 建立閘道路由的詳細資訊,請參閱 AWS CLI 參考中的 create-gateway-route命令。

刪除閘道路由

AWS Management Console
使用 刪除閘道路由 AWS Management Console
  1. 在 開啟 App Mesh 主控台https://console.aws.amazon.com/appmesh/

  2. 選擇您要從中刪除閘道路由的網格。會列出您擁有的所有網格,以及已與您共用的所有網格。

  3. 在左側導覽中選擇虛擬閘道

  4. 選擇您想要從中刪除閘道路由的虛擬閘道。

  5. 閘道路由表中,選擇您要刪除的閘道路由,然後選擇刪除 。只有在您的帳戶列為資源擁有者 時,您才能刪除閘道路由。

  6. 在確認方塊中,輸入 delete,然後按一下刪除

AWS CLI
使用 刪除閘道路由 AWS CLI
  1. 使用下列命令來刪除閘道路由 (取代 red 您自己的值):

    aws appmesh delete-gateway-route \ --mesh-name meshName \ --virtual-gateway-name virtualGatewayName \ --gateway-route-name gatewayRouteName
  2. 輸出範例:

    { "gatewayRoute": { "gatewayRouteName": "gatewayRouteName", "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualGateway/virtualGatewayName/gatewayRoute/gatewayRouteName", "createdAt": "2022-04-06T11:05:32.100000-05:00", "lastUpdatedAt": "2022-04-07T10:36:33.191000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "spec": { "httpRoute": { "action": { "target": { "virtualService": { "virtualServiceName": "serviceA.svc.cluster.local" } } }, "match": { "prefix": "/" } } }, "status": { "status": "DELETED" }, "virtualGatewayName": "virtualGatewayName" } }

如需使用 AWS CLI for App Mesh 刪除閘道路由的詳細資訊,請參閱 AWS CLI 參考中的 delete-gateway-route命令。