路由 - AWS App Mesh

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

路由

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

建立路由

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

  2. 選擇您要建立 G道路由。會列出您擁有且已與您共用的所有網格。

  3. 選擇左側導覽列中的 [虛擬閘道]。

  4. 選擇要與新閘道路由建立關聯的虛擬閘道。如果沒有列出,那麼您需要先建立一個。您只能為虛擬閘道建立閘道路由,而您的帳戶會列為資源擁有者

  5. 在「閘道路由」表格中,選擇「建立閘道路由」。

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

  7. 對於網關路由類型請選擇 httphttp2grpc

  8. 選取現有的虛擬服務名稱如果沒有列出,那麼您需要先建立一個。

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

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

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

    • 如果選取的類型為 http/http2

      • (選擇性) 方法‐指定要在內送 http/http2 要求中比對的方法標頭。

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

      • (選擇性) 精確 /尾碼主機名稱-指定應與傳入要求相符的主機名稱,以路由傳送至目標虛擬服務。

      • (選擇性) 首碼/正則程式/Regex 路徑-比對 URL 路徑的方法。

        • 前綴匹配-通過閘道路由匹配的請求被重寫為目標虛擬服務的名稱/,並默認情況下將匹配的前綴重寫為。視您設定虛擬服務的方式而定,它可以使用虛擬路由器,根據特定的首碼或標頭,將要求路由到不同的虛擬節點。

          重要
          • 您不能指定/aws-appmesh*/aws-app-mesh*前綴匹配。這些前綴保留供 future App Mesh 內部使用。

          • 如果定義了多個閘道路由,則會將要求與具有最長前置詞的路由相符。例如,如果存在兩個閘道路由,其中一個具有前置詞/chapter,另一個具有前綴為/,則的請求www.example.com/chapter/將與具有/chapter前綴的閘道路由進行匹配。

          注意

          如果您啟用基於路徑/前綴的匹配,則 App Mesh 會啟用路徑標準化(規範化路徑merge_slashes),以最大程度地減少路徑混淆漏洞的可能性。

          當參與要求的各方使用不同的路徑表示時,就會發生路徑混淆弱點。

        • 精確匹配-精確參數禁用路由的部分匹配,並確保僅在路徑與當前 URL 完全匹配時返回路由。

        • 正則表達式匹配-用於描述多個 URL 實際識別網站上單個頁面的模式。

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

      • (選擇性) 標頭‐指定 httphttp2 的標頭。它應該與傳入的請求相匹配,以路由到目標虛擬服務。

    • 如果 grpc 是選取的類型:

      • 主機名稱比對類型和 (選用) 完全/尾碼相符-指定應與傳入要求相符的主機名稱,以路由傳送至目標虛擬服務。

      • grpc 服務名稱-grpc 服務充當您應用程式的 API,並使用定義 ProtoBuf。

        重要

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

      • (選擇性) 中繼資料-指定 grpc 的中繼資料。它應該匹配傳入的請求,以路由到目標虛擬服務。

  12. (可選)對於重寫配置:

    • 如果選取的類型為 http/http2

      • 如果「字首」為選取的相符類型:

        • 覆寫主機名稱的自動重新寫入-依預設,主機名稱會重新寫入目標虛擬服務的名稱。

        • 覆寫前綴的自動重寫-當打開時,「前綴重寫」會指定重寫前綴的值。

      • 如果「精確路徑」為選取的相符類型:

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

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

      • 如果正則表達式路徑是選定的匹配類型:

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

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

    • 如果 grpc 是選取的類型:

      • 覆寫主機名稱的自動重新寫入-依預設,主機名稱會重新寫入目標虛擬服務的名稱。

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

AWS CLI

若要使用建立閘道路由AWS CLI。

使用以下命令和輸入 JSON 創建網關路由(用您自己的值替換紅色值):

  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" } }

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

刪除 Gate路由

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

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

  3. 選擇左側導覽列中的 [虛擬閘道]。

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

  5. 在「閘道路由」表格中,選擇要刪除的閘道路由,然後選取「刪除」。如果您的帳號被列為資源擁有者,您才能刪除閘道路由。

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

AWS CLI
使用刪除 Gate路由AWS CLI
  1. 使用以下命令刪除您的網關路由(用您自己的值替換紅色值):

    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" } }

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