虛擬節點 - 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 Resource Name (ARN)。在 Amazon 任務定義或 Kubernetes Pod 規格中,將此值設定為ECS任務群組 Envoy 代理容器APPMESH_RESOURCE_ARN的環境變數。例如, 值可以是 arn:aws:appmesh:us-west-2:111122223333:mesh/myMesh/virtualNode/myVirtualNode。它接著會映射到 node.idnode.cluster Envoy 參數。設定此變數時,您必須使用 Envoy 映像的 1.15.0或更新版本。如需 App Mesh Envoy 變數的詳細資訊,請參閱 Envoy 映像

注意

根據預設,當 Envoy 在指標和追蹤方面參照本身時,App Mesh 會使用您在 APPMESH_RESOURCE_ARN 中指定的資源名稱。您可以藉由使用自己的名稱設定 APPMESH_RESOURCE_CLUSTER 環境變數,以覆寫此行為。

建立虛擬節點

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

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

  3. 在左側導覽中,選擇 Virtual nodes (虛擬節點)

  4. 選擇建立虛擬節點,然後指定虛擬節點的設定。

  5. 針對虛擬節點名稱 ,輸入虛擬節點的名稱。

  6. 針對服務探索方法 ,選擇下列其中一個選項:

    • DNS – 指定虛擬節點代表的實際服務的DNS主機名稱。Envoy 代理部署在 Amazon 中VPC。代理會將名稱解析請求傳送至為 設定的DNS伺服器VPC。如果主機名稱解析,DNS伺服器會傳回一或多個 IP 地址。如需VPCDNS設定的詳細資訊,請參閱DNS搭配 使用VPC。對於DNS回應類型 (選用),指定DNS解析器傳回的端點類型。Load Balancer 表示DNS解析器傳回一組負載平衡的端點。端點表示DNS解析器正在傳回所有端點。根據預設,回應類型會假設為 Load Balancer

      注意

      如果您使用 Route53,則需要使用 Load Balancer

    • AWS Cloud Map – 指定現有的服務名稱和HTTP命名空間 。您也可以選擇新增資料列並指定索引鍵 ,指定 App Mesh 可以 AWS Cloud Map 查詢的屬性。僅傳回符合所有指定鍵/值對的執行個體。若要使用 AWS Cloud Map,您的帳戶必須具有AWSServiceRoleForAppMesh服務連結角色 。如需 的詳細資訊 AWS Cloud Map,請參閱 AWS Cloud Map 開發人員指南

    • – 如果您的虛擬節點預期不會有任何傳入流量,請選取 。

  7. IP 版本偏好設定

    切換覆寫預設 IP 版本行為 ,以控制網格內流量應使用的 IP 版本。根據預設,App Mesh 會使用各種 IP 版本。

    注意

    在虛擬節點上設定 IP 偏好設定只會覆寫針對此特定節點上網格設定的 IP 偏好設定。

    • 預設

      • Envoy 的DNS解析程式偏好 IPv6,並回到 IPv4

      • 如果 AWS Cloud Map 可用,我們會使用 傳回IPv4的地址,並回復為使用該IPv6地址。

      • 為本機應用程式建立的端點會使用 IPv4 地址。

      • Envoy 接聽程式會繫結至所有IPv4地址。

    • IPv6 偏好

      • Envoy 的DNS解析程式偏好 IPv6,並回到 IPv4

      • 如果可用 AWS Cloud Map ,則會使用 傳回IPv6的地址,並回復為使用該IPv4地址

      • 為本機應用程式建立的端點使用 IPv6 地址。

      • Envoy 接聽程式會繫結至所有 IPv4IPv6 地址。

    • IPv4 偏好

      • Envoy 的DNS解析程式偏好 IPv4,並回到 IPv6

      • 如果 AWS Cloud Map 可用,我們會使用 傳回IPv4的地址,並回復為使用該IPv6地址。

      • 為本機應用程式建立的端點會使用 IPv4 地址。

      • Envoy 接聽程式會繫結至所有 IPv4IPv6 地址。

    • IPv6 僅限

      • Envoy 的DNS解析程式僅使用 IPv6

      • 只會 AWS Cloud Map 使用 傳回IPv6的地址。如果 AWS Cloud Map 傳回IPv4地址,則不會使用 IP 地址,而空白結果會傳回至 Envoy。

      • 為本機應用程式建立的端點使用 IPv6 地址。

      • Envoy 接聽程式會繫結至所有 IPv4IPv6 地址。

    • IPv4 僅限

      • Envoy 的DNS解析程式僅使用 IPv4

      • 只會 AWS Cloud Map 使用 傳回IPv4的地址。如果 AWS Cloud Map 傳回IPv6地址,則不會使用 IP 地址,而空白結果會傳回至 Envoy。

      • 為本機應用程式建立的端點會使用 IPv4 地址。

      • Envoy 接聽程式會繫結至所有 IPv4IPv6 地址。

  8. (選用) 用戶端政策預設值 – 在與後端虛擬服務通訊時設定預設要求。
    注意
    • 如果您想要為現有的虛擬節點啟用 Transport Layer Security (TLS),建議您建立新的虛擬節點,該節點代表與要啟用 的現有虛擬節點相同的服務TLS。然後使用虛擬路由器和路由逐漸將流量轉移到新的虛擬節點。如需建立路由和調整轉換權重的詳細資訊,請參閱 路由。如果您使用 更新現有的流量服務虛擬節點TLS,下游用戶端 Envoy 代理可能會先收到TLS驗證內容,然後您更新之虛擬節點的 Envoy 代理才會收到憑證。這可能會導致下游 Envoy TLS 代理的交涉錯誤。

    • 必須為部署的 Envoy 代理啟用代理授權,其應用程式由後端服務的虛擬節點表示。我們建議您啟用代理授權時,僅限制存取此虛擬節點正在通訊的虛擬節點。

    • (選用) 如果您想要要求虛擬節點使用 Transport Layer Security () 與所有後端通訊,請選取強制執行TLSTLS。

    • (選用) 如果您只想要TLS將 用於一或多個特定連接埠,請在連接埠 中輸入數字。若要新增其他連接埠,請選取新增連接埠 。如果您未指定任何連接埠,TLS則會對所有連接埠強制執行 。

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

      • AWS Private Certificate Authority 託管 – 選取一或多個現有的憑證 。如需完整的 , end-to-end逐步解說使用憑證加密搭配範例應用程式部署網格ACM,請參閱TLS在 上使用 AWS Certificate Manager 設定 GitHub。

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

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

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

    • (選用) 選取提供用戶端憑證和下列其中一個選項,以在伺服器請求時提供用戶端憑證,並啟用相互TLS身分驗證 。若要進一步了解相互 TLS,請參閱 App Mesh Mutual TLS Authentication 文件。

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

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

  9. (選用) 服務後端 – 指定虛擬節點將與之通訊的 App Mesh 虛擬服務。
    • 針對虛擬節點通訊的虛擬服務,輸入 App Mesh 虛擬服務名稱或完整的 Amazon Resource Name (ARN)。

    • (選用) 如果您要為後端設定唯一TLS設定,請選取TLS設定,然後選取覆寫預設值

      • (選用) 如果您想要要求虛擬節點使用 與所有後端通訊,請選取強制執行TLSTLS。

      • (選用) 如果您只想要將 用於TLS一或多個特定連接埠,請在連接埠 中輸入數字。若要新增其他連接埠,請選取新增連接埠 。如果您未指定任何連接埠,TLS則會對所有連接埠強制執行 。

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

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

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

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

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

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

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

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

    • 若要新增其他後端,請選取新增後端

  10. (選用) 記錄

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

    注意

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

  11. 接聽程式組態

    HTTPS 不支援接聽程式支援 HTTPHTTP/2GRPC、 和 TCP通訊協定。

    1. 如果您的虛擬節點預期傳入流量,請為接聽程式 指定連接埠通訊協定http 接聽程式允許連線至 Websocket。您可以按一下新增接聽程式來新增多個接聽程式。移除按鈕會移除該接聽程式。

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

      連線集區會限制 Envoy 可與本機應用程式叢集同時建立的連線數目。其目的是保護本機應用程式免於因連線而不知所措,並可讓您根據應用程式的需求調整流量形狀。

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

      注意

      connectionPool 和 portMapping 通訊協定必須相同。如果您的接聽程式通訊協定為 tcp, maxConnections 請僅指定 。如果您的接聽程式通訊協定是 grpc 或 http2, maxRequests 請僅指定 。如果您的接聽程式通訊協定為 http,您可以同時指定 maxConnections和 maxPendingRequests。

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

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

    3. (選用) 啟用異常值偵測

      在用戶端 Envoy 套用異常值偵測,可讓用戶端對觀察到的已知錯誤故障連線採取近乎立即的動作。它是一種斷路器實作形式,可追蹤上游服務中個別主機的運作狀態。

      異常值偵測會動態判斷上游叢集中的端點是否執行與其他端點不同,並從運作狀態良好的負載平衡集中移除。

      注意

      為了有效設定伺服器虛擬節點的異常值偵測,該虛擬節點的服務探索方法可以是 AWS Cloud Map 或 DNS,回應類型欄位設定為 ENDPOINTS。如果您使用回應類型為 DNS的服務探索方法LOADBALANCER,Envoy 代理只會選擇單一 IP 地址以路由至上游服務。這會將從一組主機中退出運作狀態不佳的主機的異常值偵測行為作廢。如需 Envoy 代理行為與服務探索類型相關的更多詳細資訊,請參閱服務探索方法一節。

      • 對於伺服器錯誤 ,指定退出所需的連續 5xx 個錯誤數目。

      • 對於異常值偵測間隔 ,指定射出掃描分析之間的時間間隔和單位。

      • 對於基礎退出持續時間 ,指定主機退出的基本時間和單位量。

      • 針對彈出百分比 ,指定可在負載平衡集區中彈出的主機百分比上限。

    4. (選用) 啟用運作狀態檢查 – 設定運作狀態檢查政策的設定。

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

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

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

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

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

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

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

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

    5. (選用) 啟用TLS終止 – 設定其他虛擬節點如何使用 與此虛擬節點通訊TLS。
      • 對於模式 ,選取TLS您想要在接聽程式上設定 的模式。

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

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

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

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

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

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

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

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

    6. (選用) 逾時
      注意

      如果您指定的逾時大於預設值,請務必設定虛擬路由器和逾時大於預設值的路由。不過,如果您將逾時減少到低於預設值的值,您可以選擇在 Route 更新逾時。如需詳細資訊,請參閱路由

      • 請求逾時 – 如果您為接聽程式的通訊協定 選取 grpc http http2,則可以指定請求逾時。預設值為 15 秒。值為 0 會停用逾時。

      • 閒置持續時間 – 您可以指定任何接聽程式通訊協定的閒置持續時間。預設為 300 秒。

  12. 選擇建立虛擬節點以完成。

AWS CLI

使用 建立虛擬節點 AWS CLI。

使用下列命令和輸入JSON檔案建立DNS用於服務探索的虛擬節點 (取代 red 您自己的值):

  1. aws appmesh create-virtual-node \ --cli-input-json file://create-virtual-node-dns.json
  2. 範例 create-virtual-node-dns.json 的內容:

    { "meshName": "meshName", "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ], "serviceDiscovery": { "dns": { "hostname": "serviceBv1.svc.cluster.local" } } }, "virtualNodeName": "nodeName" }
  3. 輸出範例:

    { "virtualNode": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualNode/nodeName", "createdAt": "2022-04-06T09:12:24.348000-05:00", "lastUpdatedAt": "2022-04-06T09:12:24.348000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ], "serviceDiscovery": { "dns": { "hostname": "serviceBv1.svc.cluster.local" } } }, "status": { "status": "ACTIVE" }, "virtualNodeName": "nodeName" } }

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

刪除虛擬節點

注意

如果虛擬節點在任何路由中指定為目標,或在任何虛擬服務中指定為提供者,則無法刪除該虛擬節點。

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

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

  3. 在左側導覽中,選擇 Virtual nodes (虛擬節點)

  4. 虛擬節點表格中,選擇您要刪除的虛擬節點,然後選擇刪除 。若要刪除虛擬節點,您的帳戶 ID 必須列在虛擬節點的網格擁有者資源擁有者欄中。

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

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

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

    { "virtualNode": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualNode/nodeName", "createdAt": "2022-04-06T09:12:24.348000-05:00", "lastUpdatedAt": "2022-04-07T11:03:48.120000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "spec": { "backends": [], "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ], "serviceDiscovery": { "dns": { "hostname": "serviceBv1.svc.cluster.local" } } }, "status": { "status": "DELETED" }, "virtualNodeName": "nodeName" } }

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