虚拟节点 - Amazon App Mesh
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

虚拟节点

虚拟节点充当特定任务组的逻辑指针,如 Amazon ECS 服务或 Kubernetes 部署。当您创建虚拟节点时,必须为任务组指定服务发现方法。您的虚拟节点预计的任何入站流量被指定为侦听器。虚拟节点向其发送出站流量的任何虚拟服务均指定为后端

新虚拟节点的响应元数据包含与该虚拟节点关联的 Amazon 资源名称 (ARN)。在 Amazon ECS 任务定义或容器组 (pod) 规范中将此值设置为任务组的 Envoy 代理容器的 APPMESH_RESOURCE_ARN 环境变量。例如,值可能为 arn:aws:appmesh:us-west-2:111122223333:mesh/myMesh/virtualNode/myVirtualNode。它随后将映射到 node.idnode.cluster Envoy 参数。在设置该变量时,您必须使用 1.15.0 或更高版本的 Envoy 映像。有关 App Mesh Envoy 变量的更多信息,请参阅 Envoy 镜像

注意

默认情况下,当 Envoy 在指标和跟踪中引用自身时,App Mesh 使用您在 APPMESH_RESOURCE_ARN 中指定的资源的名称。您可以通过使用自己的名称设置 APPMESH_RESOURCE_CLUSTER 环境变量来覆盖此行为。

创建虚拟节点

Amazon Web Services Management Console
使用 Amazon Web Services Management Console 创建虚拟节点。
  1. 打开 App Mesh 控制台,网址为 https://console.aws.amazon.com/appmesh/

  2. 选择要在其中创建虚拟节点的网格。列出了您拥有的所有网格以及已与您共享的所有网格。

  3. 在左侧导航中选择虚拟节点

  4. 选择创建虚拟节点,然后为您的虚拟节点指定设置。

  5. 对于虚拟节点名称,输入虚拟节点名称。

  6. 对于服务发现方法,选择以下选项之一:

    • DNS-指定虚拟节点所代表的实际服务的 DNS 主机名。Envoy 代理部署在亚马逊 VPC 中。代理向为 VPC 配置的 DNS 服务器发送名称解析请求。如果主机名解析,则 DNS 服务器返回一个或多个 IP 地址。有关 VPC DNS 设置的更多信息,请参阅将 DNS 与您的 VPC 一起使用。对于 DNS 响应类型(可选),指定 DNS 解析器返回的端点类型。负载均衡器表示 DNS 解析器返回一组负载均衡的端点。端点意味着 DNS 解析器正在返回所有端点。默认情况下,假定响应类型为 负载均衡器

      注意

      如果您使用 Route53,则需要使用负载均衡器

    • Amazon Cloud Map— 指定现有的服务名称和 HTTP 命名空间。或者,您也可以通过选择添加行并指定来指定 App Mesh 可以查询 Amazon Cloud Map 的属性。只会返回匹配所有键/值对的实例。要使用 Amazon Cloud Map,您的账户必须具有AWSServiceRoleForAppMesh服务相关角色。有关 Amazon Cloud Map 的更多信息,请参阅《Amazon Cloud Map 开发人员指南》

    • — 如果您的虚拟节点不希望任何入口流量,请选择该项。

  7. IP 版本首选项

    通过切换覆盖默认 IP 版本行为,控制网格内的流量应使用哪个 IP 版本。默认情况下,App Mesh 使用各种 IP 版本。

    注意

    在虚拟节点上设置 IP 首选项只会覆盖为该特定节点上的网格设置的 IP 首选项。

    • 默认值

      • Envoy 的 DNS 解析器优先使用 IPv6 并在必要时回退到 IPv4

      • 我们会优先使用 Amazon Cloud Map 返回的 IPv4 地址(如果有),并在必要时回退到使用 IPv6 地址。

      • 为本地应用程序创建的端点使用 IPv4 地址。

      • Envoy 侦听器绑定到所有 IPv4 地址。

    • 首选 IPv6

      • Envoy 的 DNS 解析器优先使用 IPv6 并在必要时回退到 IPv4

      • Amazon Cloud Map 返回的 IPv6 地址如果可用,则使用该地址,并在必要时回退到使用 IPv4 地址

      • 为本地应用程序创建的端点使用 IPv6 地址。

      • Envoy 侦听器绑定到所有 IPv4IPv6 地址。

    • 首选 IPv4

      • Envoy 的 DNS 解析器优先使用 IPv4 并在必要时回退到 IPv6

      • 我们会优先使用 Amazon Cloud Map 返回的 IPv4 地址(如果有),并在必要时回退到使用 IPv6 地址。

      • 为本地应用程序创建的端点使用 IPv4 地址。

      • Envoy 侦听器绑定到所有 IPv4IPv6 地址。

    • 仅 IPv6

      • Envoy 的 DNS 解析器仅使用 IPv6

      • 仅使用 Amazon Cloud Map 返回的 IPv6 地址。如果 Amazon Cloud Map 返回 IPv4 地址,则不使用 IP 地址,并将空结果返回给 Envoy。

      • 为本地应用程序创建的端点使用 IPv6 地址。

      • Envoy 侦听器绑定到所有 IPv4IPv6 地址。

    • 仅 IPv4

      • Envoy 的 DNS 解析器仅使用 IPv4

      • 仅使用 Amazon Cloud Map 返回的 IPv4 地址。如果 Amazon Cloud Map 返回 IPv6 地址,则不使用 IP 地址,并将空结果返回给 Envoy。

      • 为本地应用程序创建的端点使用 IPv4 地址。

      • Envoy 侦听器绑定到所有 IPv4IPv6 地址。

  8. (可选)客户端策略默认值 - 配置与后端虚拟服务通信时的默认要求。
    注意
    • 如果要为现有虚拟节点启用传输层安全性协议 (TLS),则建议您创建一个新的虚拟节点,来代表与现有虚拟节点相同的服务,以便在其上启用 TLS。然后使用虚拟路由器和路由逐渐将流量转移到新的虚拟节点。有关创建路由和调整过渡权重的更多信息,请参阅 路由。如果您使用 TLS 更新现有提供流量的虚拟节点,则下游客户端 Envoy 代理可能会在您更新的虚拟节点的 Envoy 代理收到证书之前收到 TLS 验证上下文。这可能会导致下游 Envoy 代理上出现 TLS 协商错误。

    • 必须为使用由后端服务的虚拟节点表示的应用程序部署的 Envoy 代理启用代理授权。我们建议您在启用代理授权时,将访问权限限制为仅访问该虚拟节点正在与之通信的虚拟节点。

    • (可选)如果要求虚拟节点使用传输层安全性协议 (TLS) 与所有后端通信,请选择强制使用 TLS

    • (可选)如果您只想要求对一个或多个特定端口使用 TLS,请在端口中输入一个数字。要添加其他端口,请选择添加端口。如果您未指定任何端口,则会对所有端口强制执行 TLS。

    • 对于验证方法,选择下列选项之一。您指定的证书必须已存在且符合特定要求。有关更多信息,请参阅 证书要求

      • Amazon Private Certificate Authority托管 - 选择一个或多个现有证书。有关使用带有 ACM 证书加密的示例应用程序部署网格的完整端到端演练,请参阅 GitHub 上的 Amazon Certificate Manager 配置 TLS

      • Envoy 密钥发现服务 (SDS) 托管 – 输入 Envoy 将使用密钥发现服务获取的密钥名称。

      • 本地文件托管 – 指定 Envoy 部署所在文件系统上的证书链文件的路径。有关使用本地文件加密的示例应用程序部署网格的完整端到端演练,请参阅 GitHub 上使用文件提供的 TLS 证书配置 TLS。

    • (可选)输入主题备用名称。要添加其他 SAN,请选择添加 SAN。SAN 必须采用 FQDN 或 URI 格式。

    • (可选)选择提供客户端证书和以下选项之一,以便在服务器请求客户端证书时提供该证书并启用双向 TLS 身份验证。要了解有关双向 TLS 的更多信息,请参阅 App Mesh 双向 TLS 身份验证文档。

      • Envoy 密钥发现服务 (SDS) 托管 – 输入 Envoy 将使用密钥发现服务获取的密钥名称。

      • 本地文件托管 - 指定 Envoy 部署所在文件系统上的证书链文件和私钥的路径。

  9. (可选)服务后端 - 指定虚拟节点将与之通信的 App Mesh 虚拟服务。
    • 输入您的虚拟节点与之通信的虚拟服务的 App Mesh 虚拟服务名称或完整 Amazon 资源名称 (ARN)。

    • (可选)如果要为后端设置唯一的 TLS 设置,请选择 TLS 设置,然后选择覆盖默认值

      • (可选)如果要求虚拟节点使用 TLS 与所有后端通信,请选择强制使用 TLS

      • (可选)如果您只想要求对一个或多个特定端口使用 TLS,请在端口中输入一个数字。要添加其他端口,请选择添加端口。如果您未指定任何端口,则会对所有端口强制执行 TLS。

      • 对于验证方法,选择下列选项之一。您指定的证书必须已存在且符合特定要求。有关更多信息,请参阅 证书要求

        • Amazon Private Certificate Authority托管 — 选择一个或多个现有证书

        • Envoy 密钥发现服务 (SDS) 托管 — 输入 Envoy 将使用密钥发现服务获取的密钥名称。

        • 本地文件托管 — 指定 Envoy 部署所在文件系统上的证书链文件的路径。

      • (可选)输入主题备用名称。要添加其他 SAN,请选择添加 SAN。SAN 必须采用 FQDN 或 URI 格式。

      • (可选)选择提供客户端证书和以下选项之一,以便在服务器请求客户端证书时提供该证书并启用双向 TLS 身份验证。要了解有关双向 TLS 的更多信息,请参阅 App Mesh 双向 TLS 身份验证文档。

        • Envoy 密钥发现服务 (SDS) 托管 — 输入 Envoy 将使用密钥发现服务获取的密钥名称。

        • 本地文件托管 — 指定 Envoy 部署所在文件系统上的证书链文件和私钥的路径。

    • 要添加其他后端,请选择添加后端

  10. (可选)日志记录

    要配置日志记录,请输入您希望 Envoy 要使用的 HTTP 访问日志路径。建议您使用 /dev/stdout 路径,以便您可以使用 Docker 日志驱动程序来将 Envoy 日志导出至某个服务,如 Amazon CloudWatch Logs。

    注意

    日志必须仍由您应用程序中的代理进行接收并发送至目标。此文件路径仅指示 Envoy 要发送日志的位置。

  11. 侦听器配置

    侦听器支持HTTPHTTP/2GRPCTCP协议。不支持 HTTPS

    1. 如果您的虚拟节点需要入站流量,请为侦听器指定端口协议http 侦听器允许连接转换到 websockets。您可以单击添加侦听器来添加多个侦听器。移除按钮将移除该侦听器。

    2. (可选)启用连接池

      连接池限制 Envoy 可同时与本地应用程序集群建立的连接数。它旨在保护您的本地应用程序免受连接不堪重负,并允许您根据应用程序的需求调整流量整形。

      您可以为虚拟节点侦听器配置目标端连接池设置。App Mesh 默认将客户端连接池设置为无限,从而简化了网格配置。

      注意

      连接池和端口映射协议必须相同。如果您的侦听器协议为 tcp,则仅指定 maxConnections。如果您的侦听器协议为 grpc 或 http2,则仅指定 maxRequests。如果您的侦听器协议为 http,您可以同时指定 maxConnections 和 maxPendingRequests。

      • 对于最大连接数,请指定最大出站连接数。

      • (可选)在最大待处理请求数中,指定在达到最大连接数之后,Envoy 队列中将排列的溢出请求数。默认值为 2147483647

    3. (可选)启用异常值检测

      在客户端 Envoy 上应用的异常值检测允许客户端对观察到的已知不良故障的连接采取近乎立即的操作。它是一种断路器实现形式,用于跟踪上游服务中各个主机的运行状况。

      异常值检测会动态确定上游集群中端点的性能是否与其他集群中的端点不同,并将其从运行正常的负载平衡集中移除。

      注意

      要有效地为服务器虚拟节点配置异常值检测,该虚拟节点的服务发现方法可以 Amazon Cloud Map 是 DNS,响应类型字段设置为 ENDPOINTS。如果您使用响应类型为 DNS 服务发现方法 LOADBALANCER,则 Envoy 代理只会选择一个 IP 地址来路由到上游服务。这会使从一组主机中弹出运行状况不佳的主机的异常值检测行为无效。有关 Envoy 代理与服务发现类型相关的行为的更多详细信息,请参阅服务发现方法部分。

      • 对于服务器错误,请指定弹出所需的连续 5xx 错误数。

      • 对于异常值检测间隔,请指定弹射扫描分析之间的时间间隔和单位。

      • 对于基本摘除持续时间,指定摘除主机的基本时间和单位。

      • 对于摘除百分比,指定负载平衡池中可摘除的主机的最大百分比。

    4. (可选)启用运行状况检查 — 配置运行状况检查策略的设置。

      运行状况检查策略是可选的,但是如果您为运行状况策略指定任何值,则必须为正常阈值、运行状况检查间隔、运行状况检查协议超时时间运行状况不佳阈值指定值。

      • 对于 运行状况检查协议,请选择一个协议。如果选择 grpc,您的服务必须符合 GRPC 运行状况检查协议

      • 对于运行状况检查端口,指定应对其运行状况检查的端口。

      • 对于正常阈值,指定在声明侦听器运行状况良好之前,必须出现的连续成功的运行状况检查次数。

      • 对于运行状况检查间隔,指定执行每次运行状况检查间隔的时间(毫秒)。

      • 对于路径,指定运行状况检查请求的目标路径。仅当运行状况检查协议httphttp2 时才使用此值。其他协议将忽略此值。

      • 对于超时周期,指定接收来自运行状况检查的响应时要等待的时间(毫秒)。

      • 对于不正常阈值,指定在声明侦听器运行状况不正常之前,必须出现的连续失败的运行状况检查次数。

    5. (可选)启用 TLS 终止 — 配置其他虚拟节点如何使用 TLS 与该虚拟节点通信。
      • 对于模式,选择要在侦听器上配置 TLS 的模式。

      • 对于 Certificate method,执行下列操作之一:证书必须满足具体要求。有关更多信息,请参阅 证书要求

        • Amazon Certificate Manager托管 — 选择现有证书

        • Envoy 密钥发现服务 (SDS) 托管 — 输入 Envoy 将使用密钥发现服务获取的密钥名称。

        • 本地文件托管 — 在部署 Envoy 代理的文件系统上指定证书链文件的路径以及私钥

      • (可选)选择需要客户端证书和以下选项之一,以便在客户端提供证书时启用双向 TLS 身份验证。要了解有关双向 TLS 的更多信息,请参阅 App Mesh 双向 TLS 身份验证文档。

        • Envoy 密钥发现服务 (SDS) 托管 — 输入 Envoy 将使用密钥发现服务获取的密钥名称。

        • 本地文件托管 – 指定 Envoy 部署所在文件系统上的证书链文件的路径。

      • (可选)输入主题备用名称。要添加其他 SAN,请选择添加 SAN。SAN 必须采用 FQDN 或 URI 格式。

    6. (可选)超时
      注意

      如果您指定的超时时间大于默认值,请务必设置虚拟路由器和超时时间大于默认值的路由。但是,如果您将超时时间缩短到低于默认值的值,则可以选择更新 Route 的超时时间。有关更多信息,请参阅 路由表

      • 请求超时 — 如果您为侦听器的协议选择了 grpchttphttp2,则可以指定请求超时。默认值为 15 秒。0 值禁用超时。

      • 空闲时长 — 您可以为任何侦听器协议指定空闲时长。默认值为 300 秒。

  12. 选择创建虚拟节点以完成。

Amazon CLI

使用 Amazon CLI 创建虚拟节点。

使用以下命令和输入 JSON 文件创建使用 DNS 进行服务发现的虚拟节点(用您自己的值替换红色值):

  1. aws appmesh create-virtual-node \ --cli-input-json file://create-virtual-node-dns.json
  2. 示例 create-virtual-nod e-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" } }

有关使用针对 App Mesh 的Amazon CLI 创建虚拟节点的更多信息,请参阅 Amazon CLI 参考资料中的 create-virtual-node 命令。

删除虚拟节点

注意

如果虚拟节点在任何路由中被指定为目标或在任何虚拟服务中指定为提供者,则无法将其删除。

Amazon Web Services Management Console
要使用 Amazon Web Services Management Console 删除虚拟节点
  1. 打开 App Mesh 控制台,网址为 https://console.aws.amazon.com/appmesh/

  2. 选择要从中删除虚拟节点的虚拟网格。列出了您拥有的所有网格以及已与您共享的所有网格。

  3. 在左侧导航中选择虚拟节点

  4. 虚拟节点表中,选择要删除的虚拟节点,然后选择删除。要删除虚拟节点,您的账户 ID 必须列在虚拟节点的网格所有者或资源所有者列中。

  5. 在确认框中,键入 delete,然后选择删除

Amazon CLI
要使用 Amazon CLI 删除虚拟节点
  1. 使用以下命令删除您的虚拟节点(用您自己的值替换红色值):

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

有关使用针对 App Mesh 的 Amazon CLI 删除虚拟节点的更多信息,请参阅 Amazon CLI 参考资料中的 delete-virtual-node 命令。