虛擬閘道 - AWS 應用程式網格

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

虛擬閘道

重要

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

虛擬閘道可讓網格外部的資源與網格內部的資源通訊。虛擬閘道代表在 Amazon ECS服務、Kubernetes 服務或 Amazon EC2執行個體上執行的 Envoy 代理。與代表使用應用程式執行的 Envoy 的虛擬節點不同,虛擬閘道代表 Envoy 本身部署。

外部資源必須能夠將DNS名稱解析為指派給執行 Envoy 之服務或執行個體的 IP 地址。然後,Envoy 可以存取網格內資源的所有 App Mesh 組態。處理 Virtual Gateway 傳入請求的組態會使用 Gateway Routes 指定。

重要

具有 HTTP或 HTTP2 接聽程式的虛擬閘道會將傳入請求的主機名稱重寫為 Gateway Route 目標 Virtual Service 的名稱,且依預設/,閘道路由的相符字首會重寫為 。例如,如果您已將閘道路由比對字首設定為 ,/chapter且傳入請求為 /chapter/1,則請求會重寫至 /1。若要設定重寫,請參閱從閘道路由建立閘道路由一節。

建立虛擬閘道時,user不應設定 proxyConfiguration和 。

若要完成 end-to-end逐步解說,請參閱設定傳入閘道

建立虛擬閘道

注意

建立虛擬閘道時,您必須新增具有標籤的命名空間選擇器,以識別要將閘道路由與建立的虛擬閘道建立關聯的命名空間清單。

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

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

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

  4. 選擇建立虛擬閘道

  5. 針對虛擬閘道名稱 ,輸入虛擬閘道的名稱。

  6. (選用,但建議使用) 設定用戶端政策預設值

    1. (選用) 如果您希望閘道僅使用 Transport Layer Security () 與虛擬服務通訊,請選取強制執行TLSTLS。

    2. (選用) 針對連接埠 ,指定您要在其中強制執行與虛擬服務TLS通訊的一或多個連接埠。

    3. 針對驗證方法 ,選取下列其中一個選項。您指定的憑證必須已存在且符合特定要求。如需詳細資訊,請參閱憑證需求

      • AWS Private Certificate Authority 託管 – 選取一或多個現有的憑證。

      • Envoy Secret Discovery Service (SDS) 託管 – 輸入 Envoy 使用 Secret Discovery Service 擷取的秘密名稱。

      • 本機檔案託管 – 在部署 Envoy 的檔案系統上指定憑證鏈檔案的路徑。

    4. (選用) 輸入主體別名 。若要新增其他 SANs,請選取新增 SAN。SANs 必須為 URI FQDN或 格式。

    5. (選用) 選取提供用戶端憑證和下列其中一個選項,以在伺服器請求用戶端憑證並啟用相互TLS身分驗證時提供用戶端憑證。若要進一步了解相互 TLS,請參閱應用程式網格相互TLS身分驗證文件。

      • Envoy Secret Discovery Service (SDS) 託管 – 輸入 Envoy 使用 Secret Discovery Service 擷取的秘密名稱。

      • 本機檔案託管 – 在部署 Envoy 的檔案系統上指定憑證鏈檔案的路徑,以及私有金鑰 。如需完整, end-to-end請參閱使用 檔案提供的TLS憑證TLS在 上設定 ,以使用本機檔案加密的範例應用程式部署網格 GitHub。

  7. (選用) 若要設定記錄,請選取記錄 。輸入您希望 Envoy 使用的HTTP存取日誌路徑。我們建議/dev/stdout路徑,以便您可以使用 Docker 日誌驅動程式將 Envoy 日誌匯出至 Amazon CloudWatch Logs 等服務。

    注意

    日誌必須仍然由您的應用程式中的代理程式輸入,並傳送到目的地。這個檔案路徑只是指示 Envoy 將日誌傳送到何處。

  8. 設定接聽程式

    1. 選取通訊協定,並指定 Envoy 接聽流量的連接埠http 接聽程式允許連線至 Websocket。您可以按一下新增接聽程式來新增多個接聽程式。移除按鈕會移除該接聽程式。

    2. (選用) 啟用連線集區

      連線集區會限制 Virtual Gateway Envoy 可同時建立的連線數量。其目的是保護您的 Envoy 執行個體不會因為連線而不堪負荷,並可讓您調整流量形狀,以符合應用程式的需求。

      您可以設定虛擬閘道接聽程式的目的地連線集區設定。App Mesh 預設會將用戶端連線集區設定設定為無限,簡化網格組態。

      注意

      connectionPoolconnectionPoolportMapping 通訊協定必須相同。如果您的接聽程式通訊協定為 grpchttp2maxRequests請僅指定 。如果您的接聽程式通訊協定為 http,您可以同時指定 maxConnectionsmaxPendingRequests

      • 針對最大連線數 ,指定傳出連線數的上限。

      • 針對請求上限 ,指定可以使用 Virtual Gateway Envoy 建立的平行請求數目上限。

      • (選用) 針對最大待處理請求 ,指定 Envoy 佇列的最大連線數之後的溢位請求數。預設值為 2147483647

    3. (選用) 如果您要為接聽程式設定運作狀態檢查,請選取啟用運作狀態檢查

      運作狀態檢查政策是選用的,但如果您指定運作狀態政策的任何值,則必須指定運作狀態閾值 運作狀態檢查間隔 運作狀態檢查協定 逾時期間 運作狀態不佳閾值 的值。

      • 針對運作狀態檢查通訊協定 ,選擇通訊協定。如果您選擇 grpc ,則您的服務必須符合GRPC運作狀態檢查通訊協定

      • 對於 Health check port (運作狀態檢查連接埠),指定應執行運作狀態檢查的連接埠。

      • 對於 Healthy threshold (運作良好閾值),指定在宣告接聽程式運作良好之前,必須達到的運作狀態檢查連續成功次數。

      • 對於 Health check interval (運作狀態檢查間隔),指定每次運作狀態檢查執行之間的時間間隔 (以毫秒為單位)。

      • 對於 Path (路徑),指定運作狀態檢查請求的目的地路徑。只有在運作狀態檢查通訊協定http或 時,才會使用此值http2。其他通訊協定會忽略該值。

      • 對於逾時期間 ,請指定從運作狀態檢查收到回應時等待的時間,以毫秒為單位。

      • 對於 Unhealthy threshold (運作不良閾值),指定在宣告接聽程式運作不良之前,必須達到的運作狀態檢查連續失敗次數。

    4. (選用) 如果您想要指定用戶端是否使用 與此虛擬閘道通訊TLS,請選取啟用TLS終止

      • 對於模式 ,選取TLS您想要在接聽程式上設定 的模式。

      • 針對憑證方法 ,選取下列其中一個選項。憑證必須符合特定要求。如需詳細資訊,請參閱憑證需求

        • AWS Certificate Manager 託管 – 選取現有的憑證

        • Envoy Secret Discovery Service (SDS) 託管 – 輸入 Envoy 使用 Secret Discovery Service 擷取的秘密名稱。

        • 本機檔案託管 – 在部署 Envoy 的檔案系統上指定憑證鏈私有金鑰檔案的路徑。

      • (選用) 選取需要用戶端憑證和下列其中一個選項,以便在用戶端提供憑證時啟用相互TLS身分驗證。若要進一步了解相互 TLS,請參閱應用程式網格相互TLS身分驗證文件。

        • Envoy Secret Discovery Service (SDS) 託管 – 輸入 Envoy 使用 Secret Discovery Service 擷取的秘密名稱。

        • 本機檔案託管 – 在部署 Envoy 的檔案系統上指定憑證鏈檔案的路徑。

      • (選用) 輸入主體別名 。若要新增其他 SANs,請選取新增 SAN。SANs 必須為 URI FQDN或 格式。

  9. 選擇建立虛擬閘道以完成。

AWS CLI

使用 建立虛擬閘道 AWS CLI。

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

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

    { "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] } }
  3. 輸出範例:

    { "virtualGateway": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:123456789012:mesh/meshName/virtualGateway/virtualGatewayName", "createdAt": "2022-04-06T10:42:42.015000-05:00", "lastUpdatedAt": "2022-04-06T10:42:42.015000-05:00", "meshOwner": "123456789012", "resourceOwner": "123456789012", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] }, "status": { "status": "ACTIVE" }, "virtualGatewayName": "virtualGatewayName" } }

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

部署虛擬閘道

部署僅包含 Envoy 容器 的 Amazon ECS或 Kubernetes 服務。您也可以在 Amazon EC2執行個體上部署 Envoy 容器。如需詳細資訊,請參閱開始使用 App Mesh 和 Amazon EC2。如需如何在 Amazon 上部署的詳細資訊,ECS請參閱開始使用 App Mesh 和 Amazon ECS開始使用 AWS App Mesh 和 Kubernetes 以部署至 Kubernetes。您需要將APPMESH_RESOURCE_ARN環境變數設定為 ,mesh/mesh-name/virtualGateway/virtual-gateway-name且不得指定代理組態,這樣代理的流量就不會重新導向至本身。根據預設,當 Envoy 在指標和追蹤方面參照本身時,App Mesh 會使用您在 APPMESH_RESOURCE_ARN 中指定的資源名稱。您可以藉由使用自己的名稱設定 APPMESH_RESOURCE_CLUSTER 環境變數,以覆寫此行為。

建議您部署多個容器執行個體,並設定 Network Load Balancer 以將流量負載平衡至執行個體。負載平衡器的服務探索名稱是您希望外部服務用來存取網格中資源的名稱,例如 myapp.example.com。 如需詳細資訊,請參閱建立 Network Load Balancer (Amazon ECS)、建立 External Load Balancer (Kubernetes) 或教學課程:提高 Amazon 上應用程式的可用性EC2。您也可以在我們的 App Mesh 範例中找到更多範例和演練。

啟用 Envoy 的代理授權。如需詳細資訊,請參閱Envoy Proxy 授權

刪除虛擬閘道

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

  2. 選擇您想要從中刪除虛擬閘道的網格。會列出您擁有和已與您共用的所有網格。

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

  4. 選擇您要刪除的虛擬閘道,然後選擇刪除 。如果虛擬閘道具有任何相關聯的閘道路由,則無法刪除它。您必須先刪除任何相關聯的閘道路由。您只能刪除將帳戶列為資源擁有者 的虛擬閘道。

  5. 在確認方塊中,輸入 delete,然後選擇刪除

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

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

    { "virtualGateway": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:123456789012:mesh/meshName/virtualGateway/virtualGatewayName", "createdAt": "2022-04-06T10:42:42.015000-05:00", "lastUpdatedAt": "2022-04-07T10:57:22.638000-05:00", "meshOwner": "123456789012", "resourceOwner": "123456789012", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] }, "status": { "status": "DELETED" }, "virtualGatewayName": "virtualGatewayName" } }

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