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

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

虚拟节点

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

新虚拟节点的响应元数据包含与该虚拟节点关联的 Amazon 资源名称(ARN)。将该值设置为APPMESH_RESOURCE_ARNAmazon ECS 任务定义或 Kubernetes Pod 规范中任务组的 Envoy 代理容器的环境变量。例如,值可能为arn:aws:appmesh:us-west-2:111122223333:mesh/myMesh/virtualNode/myVirtualNode. 它随后将映射到 node.idnode.cluster Envoy 参数。你一定在使用1.15.0在设置此变量时 Envoy 映像的更多信息。有关 App Mesh 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. 在左侧导航中选择 Virtual nodes (虚拟节点)

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

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

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

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

      注意

      如果您使用53 号路线,你需要使用负载均衡器.

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

    • None(无)— 如果您的虚拟节点预计不会有任何入站流量,请选择此选项。

  7. IP 版本首选项

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

    注意

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

    • 默认值

      • Envoy 首选 DNS 解析器IPv6然后回退到IPv4.

      • 我们将使用IPv4返回的地址Amazon Cloud Map如果可用,则回退到使用IPv6地址。地址。地址

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

      • Envoy 听众绑定到所有人IPv4地址。地址。地址

    • IPv首首选

      • Envoy 首选 DNS 解析器IPv6然后回退到IPv4.

      • 这些区域有:IPv6返回的地址Amazon Cloud Map如果可用,则使用,然后回退到使用IPv4地址

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

      • Envoy 听众绑定到所有人IPv4IPv6地址。地址。地址

    • IPv首首选项

      • Envoy 首选 DNS 解析器IPv4然后回退到IPv6.

      • 我们将使用IPv4返回的地址Amazon Cloud Map如果可用,则回退到使用IPv6地址。地址。地址

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

      • Envoy 听众绑定到所有人IPv4IPv6地址。地址。地址

    • 仅 IPv6 地址

      • Envoy 的 DNS 解析器仅使用IPv6.

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

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

      • Envoy 听众绑定到所有人IPv4IPv6地址。地址。地址

    • 仅 IPv4 地址

      • Envoy 的 DNS 解析器仅使用IPv4.

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

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

      • Envoy 听众绑定到所有人IPv4IPv6地址。地址。地址

  8. (可选)客户端策略默认值— 配置与后端虚拟服务通信时的默认要求。

    注意
    • 如果您想为现有虚拟节点启用传输层安全 (TLS),则我们建议您创建一个新的虚拟节点,该节点代表与现有虚拟节点相同的服务,并在该节点上启用 TLS。然后使用虚拟路由器和路由逐渐将流量转移到新的虚拟节点。有关创建路径和调整过渡权重的更多信息,请参阅路由. 如果您使用 TLS 更新现有的流量服务虚拟节点,则下游客户端 Envoy 代理可能会在您更新的虚拟节点的 Envoy 代理收到证书之前接收 TLS 验证上下文。这可能会导致下游 Envoy 代理上的 TLS 协商错误。

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

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

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

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

      • Amazon Private Certificate Authority托管 — 选择一个或多个现有的Certificates. 为了完整起见, end-to-end 使用采用 ACM 证书加密的示例应用程序部署网格的演练,请参阅配置 TLSAmazonCertificate Manager上 GitHub.

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

      • 本地文件托管— 指定路径凭证链部署了 Envoy 的文件系统上的文件。为了完整起见, end-to-end 使用使用本地文件加密的示例应用程序部署网格的演练,请参阅使用文件提供的 TLS 证书配置 TLS上 GitHub.

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

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

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

      • 本地文件托管— 指定路径凭证链文件,以及私有密钥,位于部署 Envoy 的文件系统上。

  9. (可选)服务后端— 指定虚拟节点将与之通信的 App Mesh 虚拟服务。

    • 为虚拟节点要与之进行通信的虚拟服务输入 App Mesh 虚拟服务名称或完整 Amazon 资源名称(ARN)。

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

      • (可选)选择Enorce如果你想要求虚拟节点使用 TLS 与所有后端通信。

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

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

        • Amazon Private Certificate Authority托管 — 选择一个或多个现有的Certificates.

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

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

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

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

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

        • 本地文件托管— 指定路径凭证链文件,以及私有密钥,位于部署 Envoy 的文件系统上。

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

  10. (可选)日志记录

    要配置日志记录,请输入您希望 Envoy 要使用的 HTTP 访问日志路径。我们建议/dev/stdout路径,这样你就可以使用 Docker 日志驱动程序将 Envoy 日志导出到亚马逊等服务 CloudWatch 日志。

    注意

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

  11. 侦听器配置

    1. 如果您的虚拟节点需要入站流量,请指定端口协议对于Listener. 这些区域有:htp监听器允许连接转换到 websocket。你可以点击添加侦听器添加多个监听器。这些区域有:删除按钮将删除该监听器。

    2. (可选)启用连接池

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

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

      注意

      ConnectionPool 和 PortMapping 协议必须相同。如果您的监听器协议是 tcp,请仅指定 maxConnection 如果您的监听器协议是 grpc 或 http2,请仅指定 maxRequests。如果您的监听器协议是 http,则可以同时指定 maxConnections 和 maxPendingRequests.

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

      • (可选)对于最大待处理请求数,指定之后的溢出请求数最大连接数特使会排队。默认值为 2147483647

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

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

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

      注意

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

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

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

      • 对于基础弹射持续时间,指定弹出主机的基本时间量和单位。

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

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

      运行状况检查策略是可选的,但是如果您为运行状况策略指定了任何值,则必须为指定值正常阈值,Health 检查间隔,运行状况检查协议,超时周期,以及不正常阈值.

      • 对于运行状况检查协议,请选择协议。如果你选择grorce,那么您的服务必须符合GRPC Health 检查协议.

      • 对于 Health check port (运行状况检查端口),指定应对其运行状况检查的端口。

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

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

      • 对于 Path (路径),指定运行状况检查请求的目标路径。只有在以下情况下才会使用该值运行状况检查协议http要么http2. 其他协议将忽略该值。

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

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

    5. (可选)启用 TLS 终止— 配置其他虚拟节点如何使用 TLS 与该虚拟节点通信。

      • 对于Mode,选择要在侦听器上配置 TLS 的模式。

      • 对于证书方法,请选择以下任一选项。证书必须满足特定要求。有关更多信息,请参阅 证书要求

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

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

        • 本地文件托管— 指定路径凭证链文件,以及私有密钥,位于部署 Envoy 代理的文件系统上。

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

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

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

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

    6. (可选)超时

      注意

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

      • 请求超时— 如果您选择了,则可以指定请求超时grorce,htp,或htp 2 地址为了听众的协议. 默认值为 15 秒。值为0禁用超时。

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

  12. 选择创建虚拟节点终止端口。

Amazon CLI

要创建虚拟节点,请使用Amazon CLI.

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

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

有关使用以下命令创建虚拟节点的更多信息Amazon CLI有关 App Mesh 的,请参阅create-virtual-node命令在Amazon CLI引用。

删除虚拟节点

注意

如果在任何虚拟节点中将其指定为目标,则无法删除该虚拟节点路线或者作为任何领域的提供商虚拟服务.

Amazon Web Services Management Console

使用以下命令删除虚拟节点Amazon Web Services Management Console

  1. 在以下位置打开 App Mesh 控制台https://console.aws.amazon.com/appmesh/.

  2. 选择要从中删除虚拟节点的网格。你拥有的所有网格和过去的网格共享的和你在一起被列出。

  3. 在左侧导航中选择 Virtual nodes (虚拟节点)

  4. 虚拟节点表,请选择要删除的虚拟节点,然后选择Delete. 要删除虚拟节点,您的账户 ID 必须在以下任一位置列出网格所有者或者Resoure虚拟节点的列。

  5. 在确认对话框中,键入delete然后选择Delete.

Amazon CLI

使用以下命令删除虚拟节点Amazon 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" } }

有关使用以下命令删除虚拟节点的更多信息Amazon CLI有关 App Mesh 的,请参阅delete-virtual-node命令在Amazon CLI引用。