

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

# 虛擬節點
<a name="virtual_nodes"></a>

**重要**  
支援終止通知：在 2026 年 9 月 30 日， AWS 將停止對 的支援 AWS App Mesh。2026 年 9 月 30 日之後，您將無法再存取 AWS App Mesh 主控台或 AWS App Mesh 資源。如需詳細資訊，請參閱此部落格文章[從 遷移 AWS App Mesh 至 Amazon ECS Service Connect](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-amazon-ecs-service-connect)。

虛擬節點扮演特定任務群組的邏輯指標，例如 Amazon ECS 服務或 Kubernetes 部署。建立虛擬節點時，您必須為任務群組指定服務探索方法。虛擬節點預期的任何傳入流量都會指定為*接聽程式*。虛擬節點傳送傳出流量的任何虛擬服務都會指定為*後端*。

新虛擬節點的回應中繼資料包含與虛擬節點相關聯的 Amazon Resource Name (ARN)。在 Amazon ECS 任務定義或 Kubernetes Pod 規格中，將此值設定為任務群組 Envoy 代理容器`APPMESH_RESOURCE_ARN`的環境變數。例如，值可以是 `arn:aws:appmesh:us-west-2:111122223333:mesh/myMesh/virtualNode/myVirtualNode`。它接著會映射到 `node.id` 和 `node.cluster` Envoy 參數。設定此變數時，您必須使用 Envoy 映像的 `1.15.0`或更新版本。如需 App Mesh Envoy 變數的詳細資訊，請參閱 [Envoy 影像](envoy.md)。

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

## 建立虛擬節點
<a name="vn-create-virtual-node"></a>

------
#### [ AWS 管理主控台 ]

**使用 建立虛擬節點 AWS 管理主控台**

1. 在 https：//[https://console.aws.amazon.com/appmesh/](https://console.aws.amazon.com/appmesh/) 開啟 App Mesh 主控台。

1. 選擇您要在其中建立虛擬節點的網格。會列出您擁有和已與您[共用](sharing.md)的所有網格。

1. 在左側導覽中，選擇 **Virtual nodes (虛擬節點)**。

1. 選擇**建立虛擬節點**，然後指定虛擬節點的設定。

1. 針對**虛擬節點名稱**，輸入虛擬節點的名稱。

1. 針對**服務探索方法**，選擇下列其中一個選項：
   + **DNS** – 指定虛擬節點代表的實際服務的 **DNS 主機名稱**。Envoy 代理會部署在 Amazon VPC 中。代理會將名稱解析請求傳送至為 VPC 設定的 DNS 伺服器。如果主機名稱解析，DNS 伺服器會傳回一或多個 IP 地址。如需 VPC DNS 設定的詳細資訊，請參閱[搭配 VPC 使用 DNS](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)。針對 **DNS 回應類型** （選用），指定 DNS 解析程式傳回的端點類型。**Load Balancer** 表示 DNS 解析程式會傳回一組負載平衡的端點。**端點**表示 DNS 解析程式正在傳回所有端點。根據預設，會假設回應類型為** Load Balancer**。
**注意**  
如果您使用 **Route53**，則需要使用 **Load Balancer**。
   + **AWS Cloud Map** – 指定現有的**服務名稱**和 HTTP **命名空間**。您也可以選擇**新增資料列**並指定**索引鍵**和**值**，以指定 App Mesh 可以 AWS Cloud Map 查詢的屬性。僅傳回符合所有指定鍵/值對的執行個體。若要使用 AWS Cloud Map，您的帳戶必須具有 `AWSServiceRoleForAppMesh`服務連結角色。 [使用 App Mesh 的服務連結角色](using-service-linked-roles.md)如需 的詳細資訊 AWS Cloud Map，請參閱 [AWS Cloud Map 開發人員指南](https://docs.aws.amazon.com/cloud-map/latest/dg/)。
   + **無** – 如果您的虛擬節點未預期任何傳入流量，請選取 。

1. 

**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 接聽程式會繫結至所有 `IPv4`和 `IPv6` 地址。
   + IPv4 偏好
     + Envoy 的 DNS 解析程式偏好`IPv4`並回復為 `IPv6`。
     + 如果 AWS Cloud Map 可用，我們會使用 傳回`IPv4`的地址，並回復為使用該`IPv6`地址。
     + 為本機應用程式建立的端點會使用 `IPv4`地址。
     + Envoy 接聽程式會繫結至所有 `IPv4`和 `IPv6` 地址。
   + 僅限 IPv6 
     + Envoy 的 DNS 解析程式僅使用 `IPv6`。
     + 只會 AWS Cloud Map 使用 傳回`IPv6`的地址。如果 AWS Cloud Map 傳回`IPv4`地址，則不會使用 IP 地址，並將空白結果傳回至 Envoy。
     + 為本機應用程式建立的端點會使用 `IPv6`地址。
     + Envoy 接聽程式會繫結至所有 `IPv4`和 `IPv6` 地址。
   + 僅限 IPv4 
     + Envoy 的 DNS 解析程式僅使用 `IPv4`。
     + 只會 AWS Cloud Map 使用 傳回`IPv4`的地址。如果 AWS Cloud Map 傳回`IPv6`地址，則不會使用 IP 地址，並將空白結果傳回至 Envoy。
     + 為本機應用程式建立的端點會使用 `IPv4`地址。
     + Envoy 接聽程式會繫結至所有 `IPv4`和 `IPv6` 地址。

1. 

**（選用） **用戶端政策預設值** – 在與後端虛擬服務通訊時設定預設需求。**
**注意**  
如果您想要為現有的虛擬節點啟用 Transport Layer Security (TLS)，建議您建立新的虛擬節點，其代表與要啟用 TLS 的現有虛擬節點相同的服務。然後使用虛擬路由器和路由逐漸將流量轉移到新的虛擬節點。如需建立路由和調整轉換權重的詳細資訊，請參閱 [路由](routes.md)。如果您使用 TLS 更新現有的流量服務虛擬節點，下游用戶端 Envoy 代理可能會先收到 TLS 驗證內容，然後您更新之虛擬節點的 Envoy 代理才會收到憑證。這可能會導致下游 Envoy 代理發生 TLS 交涉錯誤。
必須為與後端服務虛擬節點所代表的應用程式一起部署的 Envoy 代理啟用[代理授權](proxy-authorization.md)。我們建議您啟用代理授權時，只能存取此虛擬節點正在通訊的虛擬節點。
   + （選用） 如果您想要要求虛擬節點使用 Transport Layer Security **(TLS) 與所有後端通訊，請選取強制執行** TLS。
   + （選用） 如果您只想要對一或多個特定連接埠使用 TLS，請在**連接埠**中輸入數字。若要新增其他連接埠，請選取**新增連接埠**。如果您未指定任何連接埠，則會對所有連接埠強制執行 TLS。
   + 針對**驗證方法**，選取下列其中一個選項。您指定的憑證必須已存在且符合特定需求。如需詳細資訊，請參閱[憑證需求](tls.md#virtual-node-tls-prerequisites)。
     + **AWS 私有憑證授權單位** 託管 – 選取一或多個現有的**憑證**。如需使用 ACM 憑證加密搭配範例應用程式部署網格的完整end-to-end演練，請參閱 GitHub 上的[使用 AWS Certificate Manager 設定 TLS](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/tls-with-acm)。
     + **Envoy Secret Discovery Service (SDS)** 託管 – 輸入 Envoy 將使用 Secret Discovery Service 擷取的秘密名稱。
     + **本機檔案託管** – 在部署 Envoy 的檔案系統上指定**憑證鏈**檔案的路徑。如需使用本機檔案加密搭配範例應用程式部署網格的完整end-to-end演練，請參閱[在 GitHub 上使用檔案提供的 TLS 憑證設定 TLS](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-tls-file-provided)。 GitHub
   + （選用） 輸入**主體別名**。若要新增其他 SANs，請選取**新增 SAN**。SANs必須為 FQDN 或 URI 格式。
   + （選用） 選取**提供用戶端憑證**和下列其中一個選項，以在伺服器請求時提供用戶端憑證，並啟用交互 TLS 身分驗證 。若要進一步了解交互 TLS，請參閱 App Mesh [Mutual TLS 身分驗證](https://docs.aws.amazon.com/app-mesh/latest/userguide/mutual-tls.html)文件。
     + **Envoy Secret Discovery Service (SDS)** 託管 – 輸入 Envoy 將使用 Secret Discovery Service 擷取的秘密名稱。
     + **本機檔案託管** – 在部署 Envoy 的檔案系統上指定**憑證鏈**檔案的路徑，以及**私有金鑰**。

1. 

**（選用） **服務後端** – 指定虛擬節點將與其通訊的 App Mesh 虛擬服務。**
   + 為虛擬節點通訊的虛擬服務輸入 App Mesh 虛擬服務名稱或完整的 Amazon Resource Name (ARN)。
   + （選用） 如果您想要為後端設定唯一的 TLS 設定，請選取 **TLS 設定**，然後選取**覆寫預設值**。
     + （選用） 如果您想要要求虛擬節點使用 **TLS 與所有後端通訊，請選取強制執行** TLS。
     + （選用） 如果您只想要對一或多個特定連接埠使用 TLS，請在**連接埠**中輸入數字。若要新增其他連接埠，請選取**新增連接埠**。如果您未指定任何連接埠，則會對所有連接埠強制執行 TLS。
     + 針對**驗證方法**，選取下列其中一個選項。您指定的憑證必須已存在且符合特定需求。如需詳細資訊，請參閱[憑證需求](tls.md#virtual-node-tls-prerequisites)。
       + **AWS 私有憑證授權單位** 託管 – 選取一或多個現有的**憑證**。
       + **Envoy Secret Discovery Service (SDS)** 託管 – 輸入 Envoy 將使用 Secret Discovery Service 擷取的秘密名稱。
       + **本機檔案託管** – 在部署 Envoy 的檔案系統上指定**憑證鏈**檔案的路徑。
     + （選用） 輸入**主體別名**。若要新增其他 SANs，請選取**新增 SAN**。SANs必須為 FQDN 或 URI 格式。
     + （選用） 選取**提供用戶端憑證**和下列其中一個選項，以在伺服器請求時提供用戶端憑證，並啟用交互 TLS 身分驗證。若要進一步了解交互 TLS，請參閱 App Mesh [Mutual TLS 身分驗證](https://docs.aws.amazon.com/app-mesh/latest/userguide/mutual-tls.html)文件。
       + **Envoy Secret Discovery Service (SDS)** 託管 – 輸入 Envoy 將使用 Secret Discovery Service 擷取的秘密名稱。
       + **本機檔案託管** – 在部署 Envoy 的檔案系統上指定**憑證鏈**檔案的路徑，以及**私有金鑰**。
   + 若要新增其他後端，請選取**新增後端**。

1. （選用） **記錄**

   若要設定日誌記錄，請輸入您希望 Envoy 使用的 HTTP 存取日誌路徑。我們建議您使用 `/dev/stdout` 路徑，以便您可以使用 Docker 日誌驅動程式將您的 Envoy 日誌匯出至 Amazon CloudWatch Logs 等服務。
**注意**  
日誌必須仍然由您的應用程式中的代理程式輸入，並傳送到目的地。這個檔案路徑只是指示 Envoy 將日誌傳送到何處。

1. **接聽程式組態**

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

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

   1. 

**（選用） **啟用連線集區****

      連線集區會限制 Envoy 可與本機應用程式叢集同時建立的連線數量。它旨在保護本機應用程式免於因連線而負擔過重，並可讓您根據應用程式的需求調整流量形狀。

      您可以設定虛擬節點接聽程式的目的地連線集區設定。App Mesh 預設會將用戶端連線集區設定設定為無限，簡化網格組態。
**注意**  
connectionPool 和 portMapping 通訊協定必須相同。如果您的接聽程式通訊協定是 tcp，請僅指定 maxConnections。如果您的接聽程式通訊協定是 grpc 或 http2，請僅指定 maxRequests。如果您的接聽程式通訊協定是 http，您可以同時指定 maxConnections 和 maxPendingRequests。
      + 針對**最大連線**數，指定最大傳出連線數。
      + （選用） 對於**最大待處理請求**，指定 Envoy 將佇列**的最大連線**數之後溢出請求的數量。預設值為 `2147483647`。

   1. 

**（選用） **啟用極端值偵測****

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

      極端值偵測會動態判斷上游叢集中的端點是否執行不同於其他端點，並從運作狀態良好的負載平衡集中將其移除。
**注意**  
為了有效設定伺服器虛擬節點的極端值偵測，該虛擬節點的服務探索方法可以是 AWS Cloud Map 或 DNS，回應類型欄位設定為 `ENDPOINTS`。如果您使用回應類型為 的 DNS 服務探索方法`LOADBALANCER`，Envoy 代理只會選擇單一 IP 地址來路由到上游服務。這會使從一組主機中退出運作狀態不佳主機的極端值偵測行為失效。如需 Envoy 代理行為與服務探索類型相關的詳細資訊，請參閱服務探索方法一節。
      + 對於**伺服器錯誤**，請指定退出所需的連續 5xx 錯誤數目。
      + 針對**異常值偵測間隔**，指定射出掃描分析之間的時間間隔和單位。
      + 針對**基本退出持續時間**，指定要退出主機的基本時間和單位量。
      + 針對**退出百分比**，指定負載平衡集區中可退出的主機百分比上限。

   1. 

**（選用） **啟用運作狀態檢查** – 設定運作狀態檢查政策的設定。**

      運作狀態檢查政策是選用的，但如果您指定運作狀態政策的任何值，則必須指定**運作狀態閾值**、**運作狀態檢查間隔**、**運作狀態檢查通訊協定**、**逾時期間**和**運作狀態不佳閾值**的值。
      + 針對**運作狀態檢查通訊協定**，選擇通訊協定。如果您選擇 **grpc**，則您的服務必須符合 [GRPC 運作狀態檢查通訊協定](https://github.com/grpc/grpc/blob/master/doc/health-checking.md)。
      + 對於 **Health check port (運作狀態檢查連接埠)**，指定應執行運作狀態檢查的連接埠。
      + 對於 **Healthy threshold (運作良好閾值)**，指定在宣告接聽程式運作良好之前，必須達到的運作狀態檢查連續成功次數。
      + 對於 **Health check interval (運作狀態檢查間隔)**，指定每次運作狀態檢查執行之間的時間間隔 (以毫秒為單位)。
      + 對於 **Path (路徑)**，指定運作狀態檢查請求的目的地路徑。只有在**運作狀態檢查通訊協定**為 `http`或 時，才會使用此值`http2`。其他通訊協定會忽略此值。
      + 對於 **Timeout period (逾時期間)**，指定等待收到運作狀態檢查回應的時間 (以秒為單位)。
      + 對於 **Unhealthy threshold (運作不良閾值)**，指定在宣告接聽程式運作不良之前，必須達到的運作狀態檢查連續失敗次數。

   1. 

**（選用） **啟用 TLS 終止** – 設定其他虛擬節點如何使用 TLS 與此虛擬節點通訊。**
      + 針對 **模式**，選取您想要在接聽程式上設定 TLS 的模式。
      + 針對**憑證方法**，選取下列其中一個選項。憑證必須符合特定需求。如需詳細資訊，請參閱[憑證需求](tls.md#virtual-node-tls-prerequisites)。
        + **AWS Certificate Manager 託管** – 選取現有的**憑證**。
        + **Envoy Secret Discovery Service (SDS)** 託管 – 輸入 Envoy 將使用 Secret Discovery Service 擷取的秘密名稱。
        + **本機檔案託管** – 在部署 Envoy 代理的檔案系統上指定**憑證鏈**檔案的路徑，以及**私有金鑰**。
      + （選用） 選取**需要用戶端憑證**和下列其中一個選項，以在用戶端提供憑證時啟用交互 TLS 身分驗證。若要進一步了解交互 TLS，請參閱 App Mesh [Mutual TLS Authentication](https://docs.aws.amazon.com/app-mesh/latest/userguide/mutual-tls.html) 文件。
        + **Envoy Secret Discovery Service (SDS)** 託管 – 輸入 Envoy 將使用 Secret Discovery Service 擷取的秘密名稱。
        + **本機檔案託管** – 在部署 Envoy 的檔案系統上指定**憑證鏈**檔案的路徑。
      + （選用） 輸入**主體別名**。若要新增其他 SANs，請選取**新增 SAN**。SANs必須為 FQDN 或 URI 格式。

   1. 

**（選用） **逾時****
**注意**  
 如果您指定的逾時大於預設值，請務必設定虛擬路由器和逾時大於預設值的路由。不過，如果您將逾時減少為低於預設值的值，您可以選擇是否要在 Route 更新逾時。如需詳細資訊，請參閱[路由](https://docs.aws.amazon.com/app-mesh/latest/userguide/routes.html)。
      + **請求逾時** – 如果您為接聽程式的**通訊協定**選取 **grpc**、**http** 或 **http2**，則可以指定請求逾時。預設值為 15 秒。值為 `0` 會停用逾時。
      + **閒置持續時間** – 您可以指定任何接聽程式通訊協定的閒置持續時間。預設為 300 秒。

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

------
#### [ AWS CLI ]

**使用 建立虛擬節點 AWS CLI。**

使用下列命令和輸入 JSON 檔案建立使用 DNS 進行服務探索的虛擬節點 （使用您自己的值取代*紅色*值）：

1. 

   ```
   aws appmesh create-virtual-node \
   --cli-input-json file://create-virtual-node-dns.json
   ```

1. create-virtual-node-dns.json **範例**的內容：

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

1. 輸出範例：

   ```
   {
       "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 適用於 App Mesh 的 建立虛擬節點的詳細資訊，請參閱 AWS CLI 參考中的 [create-virtual-node](https://docs.aws.amazon.com/cli/latest/reference/appmesh/create-virtual-node.html) 命令。

------

## 刪除虛擬節點
<a name="delete-virtual-node"></a>

**注意**  
如果虛擬節點在任何[路由](routes.md)中指定為目標，或在任何虛擬[服務中指定為供應商，則無法刪除該虛擬](virtual_services.md)節點。

------
#### [ AWS 管理主控台 ]

**使用 刪除虛擬節點 AWS 管理主控台**

1. 在 https：//[https://console.aws.amazon.com/appmesh/](https://console.aws.amazon.com/appmesh/) 開啟 App Mesh 主控台。

1. 選擇您想要從中刪除虛擬節點的網格。會列出您擁有和已與您[共用](sharing.md)的所有網格。

1. 在左側導覽中，選擇 **Virtual nodes (虛擬節點)**。

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

1. 在確認方塊中，輸入 **delete**，然後選取**刪除**。

------
#### [ AWS CLI ]

**使用 刪除虛擬節點 AWS CLI**

1. 使用以下命令刪除您的虛擬節點 （將*紅色*值取代為您自己的值）：

   ```
   aws appmesh delete-virtual-node \
        --mesh-name meshName \
        --virtual-node-name nodeName
   ```

1. 輸出範例：

   ```
   {
       "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 適用於 App Mesh 的 刪除虛擬節點的詳細資訊，請參閱 AWS CLI 參考中的 [delete-virtual-node](https://docs.aws.amazon.com/cli/latest/reference/appmesh/delete-virtual-node.html) 命令。

------