路由 - 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. 在左側導覽中,選擇 Virtual routers (虛擬路由器)

  4. 選擇您要與新路由建立關聯的虛擬路由器。如果未列出任何項目,則需要先建立虛擬路由器

  5. Routes (路由) 表中,選擇 Create route (建立路由)。若要建立路由,您的帳戶 ID 必須列為路由的資源擁有者

  6. 對於 Route name (路由名稱),指定您的路由要使用的名稱。

  7. 對於 Route 類型 ,選擇您要路由的通訊協定。您選擇的通訊協定必須符合您為虛擬路由器選取的接聽程式通訊協定,以及您路由流量的虛擬節點。

  8. (選用) 針對路由優先順序 ,指定要用於路由的優先順序,範圍為 0-1000。將依指定值比對路由,0 為最高優先順序。

  9. (選用) 選擇其他組態 。從下面的通訊協定中,選擇您為 Route 類型選取的通訊協定,並視需要在主控台中指定設定。

  10. 針對目標組態 ,選取現有的 App Mesh 虛擬節點以將流量路由至 ,並指定 權重 。您可以選擇新增目標以新增其他目標。所有目標的百分比最多必須加 100。如果未列出虛擬節點,則您必須先建立一個。如果選取的虛擬節點具有多個接聽程式,則需要目標連接埠

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

    比對組態不適用於 tcp

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

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

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

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

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

          注意

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

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

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

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

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

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

    • 如果 grpc 是選取的類型:

      • 服務名稱 - 要比對請求的目的地服務。

      • 方法名稱 - 符合請求的目的地方法。

      • (選用) 中繼資料 - Match 根據中繼資料的存在來指定 。所有 都必須符合要處理的請求。

  12. 選取建立路由

AWS CLI

使用 建立路由 AWS CLI。

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

  1. aws appmesh create-route \ --cli-input-json file://create-route-grpc.json
  2. 範例 create-route-grpc.json 的內容

    { "meshName" : "meshName", "routeName" : "routeName", "spec" : { "grpcRoute" : { "action" : { "weightedTargets" : [ { "virtualNode" : "nodeName", "weight" : 100 } ] }, "match" : { "metadata" : [ { "invert" : false, "match" : { "prefix" : "123" }, "name" : "myMetadata" } ], "methodName" : "nameOfmethod", "serviceName" : "serviceA.svc.cluster.local" }, "retryPolicy" : { "grpcRetryEvents" : [ "deadline-exceeded" ], "httpRetryEvents" : [ "server-error", "gateway-error" ], "maxRetries" : 3, "perRetryTimeout" : { "unit" : "s", "value" : 15 }, "tcpRetryEvents" : [ "connection-error" ] } }, "priority" : 100 }, "virtualRouterName" : "routerName" }
  3. 輸出範例:

    { "route": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualRouter/routerName/route/routeName", "createdAt": "2022-04-06T13:48:20.749000-05:00", "lastUpdatedAt": "2022-04-06T13:48:20.749000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "routeName": "routeName", "spec": { "grpcRoute": { "action": { "weightedTargets": [ { "virtualNode": "nodeName", "weight": 100 } ] }, "match": { "metadata": [ { "invert": false, "match": { "prefix": "123" }, "name": "myMetadata" } ], "methodName": "nameOfMehod", "serviceName": "serviceA.svc.cluster.local" }, "retryPolicy": { "grpcRetryEvents": [ "deadline-exceeded" ], "httpRetryEvents": [ "server-error", "gateway-error" ], "maxRetries": 3, "perRetryTimeout": { "unit": "s", "value": 15 }, "tcpRetryEvents": [ "connection-error" ] } }, "priority": 100 }, "status": { "status": "ACTIVE" }, "virtualRouterName": "routerName" } }

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

(選用) 相符

  • (選用) 輸入要符合 請求的目的地服務的服務名稱。如果您未指定名稱,對任何服務的請求都會相符。

  • (選用) 輸入要符合 請求之目的地方法的方法名稱。如果您未指定名稱,則任何方法的請求都會相符。如果您指定方法名稱,則必須指定服務名稱。

(選用) 中繼資料

選擇 Add metadata (新增中繼資料)。

  • (選用) 輸入您要根據其路由的中繼資料名稱,選取相符類型 ,然後輸入相符值 。選取反轉將符合相反項目。例如,如果您指定 的中繼資料名稱myMetadataExact 相符類型、 的相符值123,並選取反轉 ,則路由會針對任何中繼資料名稱開頭為 以外的請求進行比對123

  • (選用) 選取新增中繼資料以新增最多十個中繼資料項目。

(選用) 重試政策

重試政策可讓用戶端保護自己免於間歇性的網路故障或間歇性的伺服器端故障。重試政策是選用的,但建議使用。重試逾時值會定義每次重試的逾時 (包括初始嘗試)。如果您未定義重試政策,App Mesh 可能會為每個路由自動建立預設政策。如需詳細資訊,請參閱預設路由重試政策

  • 針對重試逾時 ,輸入逾時持續時間的單位數量。如果您選擇任何通訊協定重試事件,則需要值。

  • 針對重試逾時單位 ,選取單位。如果您選擇任何通訊協定重試事件,則需要值。

  • 對於重試次數上限 ,輸入請求失敗時的重試次數上限。如果您選擇任何通訊協定重試事件,則需要值。我們建議值至少為兩個。

  • 選取一或多個HTTP重試事件 。建議您至少選取 stream-errorgateway-error

  • 選取TCP重試事件

  • 選取一或多個 gRPC 重試事件 。建議您至少選取已取消無法使用的

(選用) 逾時

  • 預設值為 15 秒。如果您指定重試政策 ,則您在此指定的持續時間應始終大於或等於重試持續時間乘以您在重試政策中定義的重試次數上限,以便重試政策完成。如果您指定超過 15 秒的持續時間,請確定為任何虛擬節點目標接聽程式指定的逾時也大於 15 秒。如需詳細資訊,請參閱虛擬節點。

  • 值為 0 會停用逾時。

  • 路由可閒置的時間上限。

(選用) 相符

  • 指定路由應相符的字首。例如,如果您的虛擬服務名稱是 service-b.local,而您希望路由以配對請求和 service-b.local/metrics,則字首應該為 /metrics。指定/路由所有流量。

  • (選用) 選取方法

  • (選用) 選取結構描述 。僅適用於HTTP2路由。

(選用) 標頭

  • (選用) 選取新增標頭 。輸入您要根據其路由的標頭名稱,選取相符類型 ,然後輸入相符值 。選取反轉將符合相反項目。例如,如果您指定名稱clientRequestId字首的標頭123,然後選取反轉 ,則路由會針對具有以 以外任何項目開頭之標頭的任何請求進行比對123

  • (選用) 選取新增標頭 。您最多可以新增十個標頭。

(選用) 重試政策

重試政策可讓用戶端保護自己免於間歇性的網路故障或間歇性的伺服器端故障。重試政策是選用的,但建議使用。重試逾時值會定義每次重試的逾時 (包括初始嘗試)。如果您未定義重試政策,App Mesh 可能會為每個路由自動建立預設政策。如需詳細資訊,請參閱預設路由重試政策

  • 針對重試逾時 ,輸入逾時持續時間的單位數量。如果您選擇任何通訊協定重試事件,則需要值。

  • 針對重試逾時單位 ,選取單位。如果您選擇任何通訊協定重試事件,則需要值。

  • 針對重試次數上限 ,輸入請求失敗時的重試次數上限。如果您選擇任何通訊協定重試事件,則需要值。我們建議值至少為兩個。

  • 選取一或多個HTTP重試事件 。建議您至少選取 stream-errorgateway-error

  • 選取TCP重試事件

(選用) 逾時

  • 請求逾時 – 預設值為 15 秒。如果您指定重試政策 ,則您在此指定的持續時間應始終大於或等於重試持續時間乘以您在重試政策中定義的重試次數上限,以便重試政策完成。

  • 閒置持續時間 – 預設值為 300 秒。

  • 值為 0 會停用逾時。

注意

如果您指定大於預設值的逾時,請確保為所有虛擬節點參與者的接聽程式指定的逾時也大於預設值。不過,如果您將逾時減少到低於預設值的值,您可以選擇更新虛擬節點的逾時。如需詳細資訊,請參閱虛擬節點。

(選用) 逾時

  • 閒置持續時間 – 預設值為 300 秒。

  • 值為 0 會停用逾時。

刪除路由

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

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

  3. 在左側導覽中,選擇 Virtual routers (虛擬路由器)

  4. 選擇您要從中刪除路由的路由器。

  5. 路由表中,選擇您要刪除的路由,然後選取右上角的刪除

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

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

    aws appmesh delete-route \ --mesh-name meshName \ --virtual-router-name routerName \ --route-name routeName
  2. 輸出範例:

    { "route": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualRouter/routerName/route/routeName", "createdAt": "2022-04-06T13:46:54.750000-05:00", "lastUpdatedAt": "2022-04-07T10:43:57.152000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "routeName": "routeName", "spec": { "grpcRoute": { "action": { "weightedTargets": [ { "virtualNode": "nodeName", "weight": 100 } ] }, "match": { "metadata": [ { "invert": false, "match": { "prefix": "123" }, "name": "myMetadata" } ], "methodName": "methodName", "serviceName": "serviceA.svc.cluster.local" }, "retryPolicy": { "grpcRetryEvents": [ "deadline-exceeded" ], "httpRetryEvents": [ "server-error", "gateway-error" ], "maxRetries": 3, "perRetryTimeout": { "unit": "s", "value": 15 }, "tcpRetryEvents": [ "connection-error" ] } }, "priority": 100 }, "status": { "status": "DELETED" }, "virtualRouterName": "routerName" } }

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