本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
虚拟节点
重要
终止支持通知:2026 年 9 月 30 日, AWS 将停止对的支持。 AWS App Mesh 2026 年 9 月 30 日之后,您将无法再访问 AWS App Mesh 控制台或 AWS App Mesh 资源。如需了解更多信息,请访问此博客文章从迁移 AWS App Mesh 到 Amazon S ECS ervice Connect
虚拟节点充当指向特定任务组(例如 Amazon ECS 服务或 Kubernetes 部署)的逻辑指针。当您创建虚拟节点时,必须为任务组指定服务发现方法。您的虚拟节点预计的任何入站流量被指定为侦听器。虚拟节点向其发送出站流量的任何虚拟服务都被指定为后端。
您的新虚拟节点的响应元数据包含与该虚拟节点关联的 Amazon 资源名称 (ARN)。在亚马逊任务定义或 Kubernetes 容器规范中,将此值设置为ECS任务组的 Envoy 代理容器的APPMESH_RESOURCE_ARN
环境变量。例如,值可能为 arn:aws:appmesh:
。它随后将映射到 us-west-2
:111122223333
:mesh/myMesh
/virtualNode/myVirtualNode
node.id
和 node.cluster
Envoy 参数。在设置该变量时,您必须使用 1.15.0
或更高版本的 Envoy 映像。有关 App Mesh Envoy 变量的更多信息,请参阅 Envoy 镜像。
注意
默认情况下,当 Envoy 在指标和跟踪中引用自身时,App Mesh 使用您在 APPMESH_RESOURCE_ARN
中指定的资源的名称。您可以通过使用自己的名称设置 APPMESH_RESOURCE_CLUSTER
环境变量来覆盖此行为。
创建虚拟节点
- AWS Management Console
-
要使用创建虚拟节点 AWS Management Console
-
打开 App Mesh 控制台,网址为https://console.aws.amazon.com/appmesh/
。 -
选择要在其中创建虚拟节点的网格。列出了您拥有的所有网格以及已与您共享的所有网格。
-
在左侧导航中选择虚拟节点。
-
选择创建虚拟节点,然后为您的虚拟节点指定设置。
-
对于虚拟节点名称,输入虚拟节点名称。
-
对于服务发现方法,选择以下选项之一:
-
DNS— 指定虚拟节点所代表的实际服务的DNS主机名。Envoy 代理部署在亚马逊中VPC。代理向为配置的DNS服务器发送名称解析请求VPC。如果主机名解析,DNS服务器将返回一个或多个 IP 地址。有关VPCDNS设置的更多信息,请参阅DNS与您的一起使用VPC。对于DNS响应类型(可选),请指定DNS解析器返回的端点类型。Load B alancer 表示DNS解析器返回一组负载均衡的端点。端点意味着解DNS析器正在返回所有端点。默认情况下,假定响应类型为 负载均衡器。
注意
如果您使用 Route53,则需要使用负载均衡器。
-
AWS Cloud Map— 指定现有的服务名称和HTTP命名空间。或者,您也可以通过选择添加行并指定键和值来指定 App Mesh 可以查询 AWS Cloud Map 的属性。只会返回匹配所有键/值对的实例。要使用 AWS Cloud Map,您的账户必须具有
AWSServiceRoleForAppMesh
服务相关角色。有关的更多信息 AWS Cloud Map,请参阅《AWS Cloud Map 开发人员指南》。 -
无— 如果您的虚拟节点不希望任何入口流量,请选择该项。
-
-
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
-
返回的地
IPv6
址将在可用 AWS Cloud Map 时使用,然后回退为使用该IPv4
地址 -
为本地应用程序创建的端点使用
IPv6
地址。 -
Envoy 侦听器绑定到所有
IPv4
和IPv6
地址。
-
IPv4首选
-
Envoy 的DNS解析器更喜欢
IPv4
然后回退到。IPv6
-
AWS Cloud Map 如果有的
IPv4
话,我们会使用返回的地址,然后回过头来使用该IPv6
地址。 -
为本地应用程序创建的端点使用
IPv4
地址。 -
Envoy 侦听器绑定到所有
IPv4
和IPv6
地址。
-
IPv6只有
-
Envoy 的DNS解析器仅使用
IPv6
。 -
仅使用返回
IPv6
AWS Cloud Map 的地址。如果 AWS Cloud Map 返回IPv4
地址,则不使用 IP 地址,并将空结果返回给 Envoy。 -
为本地应用程序创建的端点使用
IPv6
地址。 -
Envoy 侦听器绑定到所有
IPv4
和IPv6
地址。
-
IPv4只有
-
Envoy 的DNS解析器仅使用
IPv4
。 -
仅使用返回
IPv4
AWS Cloud Map 的地址。如果 AWS Cloud Map 返回IPv6
地址,则不使用 IP 地址,并将空结果返回给 Envoy。 -
为本地应用程序创建的端点使用
IPv4
地址。 -
Envoy 侦听器绑定到所有
IPv4
和IPv6
地址。
-
(可选)客户端策略默认值 - 配置与后端虚拟服务通信时的默认要求。
注意
-
如果要为现有虚拟节点启用传输层安全 (TLS),则我们建议您创建一个新的虚拟节点,该虚拟节点代表与现有虚拟节点相同的服务,并在其上启用TLS。然后使用虚拟路由器和路由逐渐将流量转移到新的虚拟节点。有关创建路由和调整过渡权重的更多信息,请参阅 路线。如果您使用更新现有的、提供流量的虚拟节点TLS,则下游客户端 Envoy 代理可能会在您更新的虚拟节点的 Envoy 代理收到证书之前收到TLS验证上下文。这可能会导致下游 Envoy 代理出现TLS协商错误。
-
必须为使用由后端服务的虚拟节点表示的应用程序部署的 Envoy 代理启用代理授权。我们建议您在启用代理授权时,将访问权限限制为仅访问该虚拟节点正在与之通信的虚拟节点。
-
(可选)TLS如果要要求虚拟节点使用传输层安全性(TLS)与所有后端通信,请选择 “强制”。
-
(可选)如果您只想要求使用一个或多个特定端口,请在 “端口” 中输入一个数字。TLS要添加其他端口,请选择添加端口。如果您未指定任何端口,TLS则对所有端口强制执行。
-
对于验证方法,选择下列选项之一。您指定的证书必须已经存在且符合特定要求。有关更多信息,请参阅 证书要求。
-
AWS Private Certificate Authority托管 — 选择一个或多个现有证书。有关使用ACM证书加密来 end-to-end部署带有示例应用程序的网格的完整演练,请参阅开启 Certificate Manager TLS 进行 AWS 配置
GitHub。 -
E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入特使将使用秘密发现局获取的秘密姓名。
-
本地文件托管 – 指定 Envoy 部署所在文件系统上的证书链文件的路径。有关使用本地文件加密的示例应用程序部署网格的完整演练,请参阅使用文件提供的TLS证书TLS进行配置
GitHub。 end-to-end
-
-
(可选)输入主题备用名称。要添加其他内容SANs,请选择添加SAN。SANs必须是FQDN或URI格式化。
-
(可选)选择提供客户端证书和以下选项之一,以便在服务器请求客户端证书时提供该证书并启用双向TLS身份验证。要了解有关相互身份验证的更多信息TLS,请参阅 App Mesh 双向TLS身份验证文档。
-
E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入特使将使用秘密发现局获取的秘密姓名。
-
本地文件托管 - 指定 Envoy 部署所在文件系统上的证书链文件和私钥的路径。
-
-
(可选)服务后端 - 指定虚拟节点将与之通信的 App Mesh 虚拟服务。
-
输入 App Mesh 虚拟服务名称或与您的虚拟节点通信的虚拟服务的完整亚马逊资源名称 (ARN)。
-
(可选)如果要为后端设置唯一TLS设置,请选择TLS设置,然后选择覆盖默认值。
-
(可选)TLS如果要要求虚拟节点使用TLS与所有后端通信,请选择 “强制”。
-
(可选)如果您只想要求使用一个或多个特定端口,请在 “端口” 中输入一个数字。TLS要添加其他端口,请选择添加端口。如果您未指定任何端口,TLS则对所有端口强制执行。
-
对于验证方法,选择下列选项之一。您指定的证书必须已经存在且符合特定要求。有关更多信息,请参阅 证书要求。
-
AWS Private Certificate Authority托管 — 选择一个或多个现有证书。
-
E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入特使将使用秘密发现局获取的秘密姓名。
-
本地文件托管 – 指定 Envoy 部署所在文件系统上的证书链文件的路径。
-
-
(可选)输入主题备用名称。要添加其他内容SANs,请选择添加SAN。SANs必须是FQDN或URI格式化。
-
(可选)选择提供客户端证书和以下选项之一,以便在服务器请求客户端证书时提供该证书并启用双向TLS身份验证。要了解有关相互身份验证的更多信息TLS,请参阅 App Mesh 双向TLS身份验证文档。
-
E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入特使将使用秘密发现局获取的秘密姓名。
-
本地文件托管 — 指定 Envoy 部署所在文件系统上的证书链文件和私钥的路径。
-
-
要添加其他后端,请选择添加后端。
-
-
(可选)日志记录
要配置日志记录,请输入您希望 Envoy 使用的HTTP访问日志路径。我们推荐使用该
/dev/stdout
路径,以便您可以使用 Docker 日志驱动程序将您的 Envoy 日志导出到诸如 Amazon Lo CloudWatch gs 之类的服务。注意
日志必须仍由您应用程序中的代理进行接收并发送至目标。此文件路径仅指示 Envoy 要发送日志的位置。
-
侦听器配置
侦听器支持
HTTP
、HTTP/2
、GRPC
和TCP
协议。不支持HTTPS
。-
如果您的虚拟节点需要入站流量,请为侦听器指定端口和协议。http 侦听器允许连接转换到 websockets。您可以单击添加侦听器来添加多个侦听器。移除按钮将移除该侦听器。
(可选)启用连接池
连接池限制 Envoy 可以同时与本地应用程序集群建立的连接数量。它旨在保护您的本地应用程序免受连接不堪重负,并允许您根据应用程序的需求调整流量整形。
您可以为虚拟节点侦听器配置目标端连接池设置。App Mesh 默认将客户端连接池设置为无限,从而简化了网格配置。
注意
connectionPool 和 portMapping 协议必须相同。如果您的监听器协议是 tcp,请 maxConnections 仅指定。如果您的监听器协议是 grpc 或 http2,请仅指定。 maxRequests 如果您的监听器协议是 http,则可以同时指定maxConnections和 maxPendingRequests。
-
对于最大连接数,请指定最大出站连接数。
-
(可选)在最大待处理请求数中,指定在达到最大连接数之后,Envoy 队列中将排列的溢出请求数。默认值为
2147483647
。
-
(可选)启用异常值检测
应用于客户端 Envoy 的异常值检测允许客户端对观察到的已知不良故障的连接立即采取行动。它是一种断路器实现形式,用于跟踪上游服务中各个主机的运行状况。
异常值检测会动态确定上游集群中端点的性能是否与其他集群中的端点不同,并将其从运行正常的负载平衡集中移除。
注意
要有效地为服务器虚拟节点配置异常值检测,该虚拟节点的服务发现方法可以是 AWS Cloud Map 或DNS将响应类型字段设置为
ENDPOINTS
。如果您使用响应类型为的DNS服务发现方法LOADBALANCER
,Envoy 代理只会选择一个 IP 地址来路由到上游服务。这会使从一组主机中弹出运行状况不佳的主机的异常值检测行为无效。有关 Envoy 代理与服务发现类型相关的行为的更多详细信息,请参阅服务发现方法部分。-
对于服务器错误,请指定弹出所需的连续 5xx 错误数。
-
对于异常值检测间隔,请指定弹射扫描分析之间的时间间隔和单位。
-
对于基本摘除持续时间,指定摘除主机的基本时间和单位。
-
对于摘除百分比,指定负载平衡池中可摘除的主机的最大百分比。
-
(可选)启用运行状况检查 — 配置运行状况检查策略的设置。
运行状况检查策略是可选的,但是如果您为运行状况策略指定任何值,则必须为正常阈值、运行状况检查间隔、运行状况检查协议、超时时间和运行状况不佳阈值指定值。
-
对于 运行状况检查协议,请选择一个协议。如果您选择 grpc,则您的服务必须符合 Healt GRPCh Checking 协议
。 -
对于运行状况检查端口,指定应对其运行状况检查的端口。
-
对于正常阈值,指定在声明侦听器运行状况良好之前,必须出现的连续成功的运行状况检查次数。
-
对于运行状况检查间隔,指定执行每次运行状况检查间隔的时间(毫秒)。
-
对于路径,指定运行状况检查请求的目标路径。仅当运行状况检查协议为
http
或http2
时才使用此值。对于其他协议,该值将被忽略。 -
对于超时周期,指定接收来自运行状况检查的响应时要等待的时间(毫秒)。
-
对于不正常阈值,指定在声明侦听器运行状况不正常之前,必须出现的连续失败的运行状况检查次数。
-
(可选)启用TLS终止-使用配置其他虚拟节点与该虚拟节点通信的方式TLS。
-
对于模式,选择TLS要在监听器上配置的模式。
-
对于 Certificate method,执行下列操作之一:证书必须满足具体要求。有关更多信息,请参阅 证书要求。
-
AWS Certificate Manager 托管-选择现有证书。
-
E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入特使将使用秘密发现局获取的秘密姓名。
-
本地文件托管 — 在部署 Envoy 代理的文件系统上指定证书链文件的路径以及私钥。
-
-
(可选)选择 “需要客户端证书” 和以下选项之一,以便在客户端提供证书时启用双向TLS身份验证。要了解有关相互身份验证的更多信息TLS,请参阅 App Mesh 双向TLS身份验证文档。
-
E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入特使将使用秘密发现局获取的秘密姓名。
-
本地文件托管 – 指定 Envoy 部署所在文件系统上的证书链文件的路径。
-
-
(可选)输入主题备用名称。要添加其他内容SANs,请选择添加SAN。SANs必须是FQDN或URI格式化。
-
-
-
选择创建虚拟节点以完成。
-
- AWS CLI
-
使用 AWS CLI创建虚拟节点。
使用以下命令和输入JSON文件创建DNS用于服务发现的虚拟节点(替换
red
用你自己的价值观):-
aws appmesh create-virtual-node \ --cli-input-json file://
create-virtual-node-dns
.json -
create-virtual-node-dns.json 示例的内容:
{ "meshName": "meshName", "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ], "serviceDiscovery": { "dns": { "hostname": "serviceBv1.svc.cluster.local" } } }, "virtualNodeName": "nodeName" }
-
输出示例:
{ "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" } }
有关使用 for App Mesh 创建虚拟节点的更多信息,请参阅 AWS CLI 参考中的create-virtual-node命令。 AWS CLI
-
删除虚拟节点
- AWS Management Console
-
要使用删除虚拟节点 AWS Management Console
-
打开 App Mesh 控制台,网址为https://console.aws.amazon.com/appmesh/
。 -
选择要从中删除虚拟节点的虚拟网格。列出了您拥有的所有网格以及已与您共享的所有网格。
-
在左侧导航中选择虚拟节点。
-
在虚拟节点表中,选择要删除的虚拟节点,然后选择删除。要删除虚拟节点,您的账户 ID 必须列在虚拟节点的网格所有者或资源所有者列中。
-
在确认框中,键入
delete
,然后选择删除。
-
- AWS CLI
-
要使用删除虚拟节点 AWS CLI
-
使用以下命令删除您的虚拟节点(替换
red
用你自己的价值观):aws appmesh delete-virtual-node \ --mesh-name
meshName
\ --virtual-node-namenodeName
-
输出示例:
{ "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" } }
有关使用 for App Mesh 删除虚拟节点的更多信息,请参阅 AWS CLI 参考中的delete-virtual-node命令。 AWS CLI
-