虛擬閘道 - AWS App Mesh

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

虛擬閘道

虛擬閘道允許網狀外部的資源與網狀內部的資源進行通訊。虛擬閘道代表在 Amazon ECS 服務或 Amazon EC2 執行個體中執行的 Envoy 代理。與虛擬節點(代表使用應用程序運行的 Envoy)不同,虛擬網關代表自己部署的 Envoy。

外部資源必須能夠將 DNS 名稱解析為指派給執行 Envoy 的服務或執行個體的 IP 位址。然後,Envoy 可以存取網狀內部資源的所有 App Mesh 組態。在虛擬閘道處理內送要求的組態是使用閘道路由指定的。

重要

具有 HTTP 或 HTTP2 接聽程式的虛擬閘道會將傳入要求的主機名稱重新寫入閘道路由目標虛擬服務的名稱,而且根據預設,會將來自閘道路由的符合前置詞重新寫入。/例如,如果您已將 Gateway 路由符合前置詞設定為/chapter,且如果傳入要求為/chapter/1,則會將要求重寫為/1。若要設定重寫,請參閱〈從閘道路由建立閘道路由〉一節。

當創建一個虛擬網關,proxyConfiguration並且不user應該被配置。

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

建立虛擬閘道

注意

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

AWS Management Console
使用建立虛擬閘道AWS Management Console
  1. 開啟應用程式網格主控台,位於 https://console.aws.amazon.com/appmesh/

  2. 選擇您要建立虛擬閘道的網狀。會列出您擁有且已與您共用的所有網格。

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

  4. 選擇 [建立虛擬閘道]。

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

  6. (選擇性,但建議使用) 設定用戶端原則預設值

    1. (選擇性) 如果您希望閘道只能使用傳輸層安全性 (TLS) 與虛擬服務通訊,請選取強制 TLS。

    2. (選擇性) 對於連接埠,指定一或多個要在其上強制與虛擬服務進行 TLS 通訊的連接埠。

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

      • AWS Private Certificate Authority主機 — 選取一或多個現有憑證

      • 特使秘密發現服務(SDS)託管 — 輸入特使使使用秘密發現服務獲取的秘密名稱。

      • 本機檔案主控 — 指定部署 Envoy 之檔案系統上憑證鏈結檔案的路徑。

    4. (選用) 輸入主旨替代名稱。若要新增其他 SAN,請選取新增 SAN。SAN 必須是 FQDN 或 URI 格式。

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

      • 特使秘密發現服務(SDS)託管 — 輸入特使使使用秘密發現服務獲取的秘密名稱。

      • 本機檔案主控 — 指定部署 Envoy 之檔案系統上憑證鏈結檔案的路徑以及私密金鑰。如需完整內容,請逐 end-to-end 步瞭解如何使用使用本機檔案加密的範例應用程式部署網格,請參閱開啟使用檔案提供的 TLS 憑證設定 TLS GitHub。

  7. (選擇性) 若要設定記錄,請選取記錄。輸入您希望使用者使用的 HTTP 存取記錄路徑。我們建議您使用該/dev/stdout路徑,以便您可以使用 Docker 日誌驅動程序將特使日誌導出到服務,例如 Amazon CloudWatch 日誌。

    注意

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

  8. 設定監聽器

    1. 選取通訊協定,並指定 Envoy 接聽流量的連接埠http 偵聽器允許連接轉換到網絡套接字。您可以按一下新增監聽程式來新增多個監聽器。刪除按鈕將刪除該監聽器。

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

      連線共用限制虛擬閘道 Envoy 可以同時建立的連線數。它旨在保護您的 Envoy 執行個體免於連線不堪重負,並可讓您根據應用程式的需求調整流量塑型。

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

      注意

      connectionPoolconnectionPool連接埠對應通訊協定必須相同。如果您的監聽器協定為grpchttp2,請maxRequests僅指定。如果您的監聽器協定為http,您可以同時指定maxConnectionsmaxPendingRequests

      • 對於連線數目上限,請指定輸出連線的數目上限。

      • 針對請求數量上限,指定虛擬閘道 Envoy 可以建立的 parallel 請求數量上限。

      • (選擇性) 對於擱置要求上限,請指定 Envoy 佇列的連線數目上限之後的溢位要求數目。預設值為 2147483647

    3. (選擇性) 如果您要設定監聽器的健全狀況檢查,請選取啟用健全狀況檢查

      健全 Health 檢查原則是選擇性的,但是如果您為健全 Health 況原則指定任何值,則必須指定狀況臨界值、健狀況檢查間隔、健全狀況檢查通訊協定、逾時期間和不良狀況臨界值的值。

      • Health 檢查通訊協定中,選擇通訊協定 如果您選擇 grpc,則您的服務必須符合 GRPC 運作 Health 檢查通訊協定

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

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

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

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

      • 針對逾時期,指定收到運作狀態檢查回應所要等候的毫秒數。

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

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

      • 模式中,選取要在監聽器上設定 TLS 的模式。

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

        • AWS Certificate Manager主機 — 選取現有的憑證

        • 特使秘密發現服務(SDS)託管 — 輸入特使使使用秘密發現服務獲取的秘密名稱。

        • 本機檔案主控 — 指定部署 Envoy 之檔案系統上憑證鏈結私密金鑰檔案的路徑。

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

        • 特使秘密發現服務(SDS)託管 — 輸入特使使使用秘密發現服務獲取的秘密名稱。

        • 本機檔案主控 — 指定部署 Envoy 之檔案系統上憑證鏈結檔案的路徑。

      • (選用) 輸入主旨替代名稱。若要新增其他 SAN,請選取新增 SAN。SAN 必須是 FQDN 或 URI 格式。

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

AWS CLI

若要使用建立虛擬閘道AWS CLI。

使用以下命令創建一個虛擬網關並輸入 JSON(用您自己的值替換紅色值):

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

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

部署虛擬閘道

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

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

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

刪除虛擬閘道

AWS Management Console
使用刪除虛擬閘道AWS Management Console
  1. 開啟應用程式網格主控台,位於 https://console.aws.amazon.com/appmesh/

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

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

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

  5. 在確認方塊中,輸入,delete然後選取 [刪除]。

AWS CLI
使用刪除虛擬閘道AWS CLI
  1. 使用以下命令刪除虛擬閘道(用您自己的值替換紅色值):

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

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