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

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

虚拟网关

虚拟网关允许网格外的资源与网格内的资源进行通信。虚拟网关代表在 Amazon ECS 服务、Kubernetes 服务或 Amazon EC2 实例中运行的某个 Envoy 代理。与虚拟节点(代表使用应用程序运行的某个 Envoy)不同,虚拟网关代表自己部署的某个 Envoy。

外部资源必须能够将 DNS 名称解析为分配给运行 Envoy 的服务或实例的 IP 地址。然后,Envoy 可以访问网格内部资源的所有 App Mesh 配置。在虚拟网关处处理传入请求的配置使用以下指定网关路由.

重要

带有 HTTP 或 HTTP2 侦听器的虚拟网关将传入请求的主机名重写为网关路由目标虚拟服务的名称,并将来自网关路由的匹配前缀重写为/,默认情况下。例如,如果您已将网关路由匹配前缀配置为/chapter,并且,如果传入的请求是/chapter/1,请求将被重写为/1. 要配置重写,请参阅创建网关路由来自网关路由的部分。

创建虚拟网关时,proxyConfigurationuser不应配置。

完成一个 end-to-end 演练,请参阅配置入站网关.

创建虚拟网关

注意

创建虚拟网关时,必须添加带有标签的命名空间选择器,以标识用于将网关路由与创建的虚拟网关关联的命名空间列表。

Amazon Web Services Management Console

要创建虚拟网关,请使用Amazon Web Services Management Console

  1. 打开 App Mesh 控制台https://console.aws.amazon.com/appmesh/.

  2. 选择要在其中创建虚拟网关的网格体。你拥有的所有网格和过去的网格共享的和你在一起被列出。

  3. 选择虚拟网关在左侧导航栏中。

  4. 选择创建虚拟网关.

  5. 对于虚拟网关,输入虚拟网关的名称。

  6. (可选,但推荐)配置默认客户端策略.

    1. (可选)select强制执行 TLS如果您希望网关仅使用传输层安全性协议(TLS)与虚拟服务进行通信。

    2. (可选)对于端口,指定要强制与虚拟服务进行 TLS 通信的一个或多个端口。

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

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

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

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

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

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

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

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

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

    注意

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

  8. 配置Listener.

    1. 选择一个协议并指定端口Envoy 在哪个上面监听流量。这些区域有:htp监听器允许连接转换到 websocket。你可以点击添加侦听器添加多个监听器。这些区域有:删除按钮将删除该监听器。

    2. (可选)启用连接池

      连接池限制了 Virtual Gateway Envoy 可以同时建立的连接数。它旨在保护您的 Envoy 实例免受连接不堪重负,并允许您根据应用程序的需求调整流量调整。

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

      注意

      这些区域有:connectionPoolconnectionPool端口映射协议必须相同。如果你的监听器协议是grpc要么http2,请指定maxRequests仅限 。如果你的监听器协议是http,您可以同时指定两者maxConnectionsmaxPendingRequests.

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

      • 对于最大请求数,指定可使用 Virtual Gateway Envoy 建立的最大parallel 请求数。

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

    3. (可选)如果要为监听器配置运行状况检查,请选择启用运行状况检查.

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

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

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

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

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

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

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

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

    4. (可选)如果要指定客户端是否使用 TLS 与此虚拟网关通信,请选择启用 TLS 终止.

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

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

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

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

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

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

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

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

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

  9. 选择创建虚拟网关完成。

Amazon CLI

要创建虚拟网关,请使用Amazon CLI.

使用以下命令创建虚拟网关并输入 JSON(替换Red您自己的值):

  1. aws appmesh create-virtual-gateway \ --mesh-name meshName \ --virtual-gateway-name virtualGatewayName \ --cli-input-json file://create-virtual-gateway.json
  2. 的内容示例 create-virtual-gateway.json:

    { "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] } }
  3. 输出示例:

    { "virtualGateway": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:123456789012:mesh/meshName/virtualGateway/virtualGatewayName", "createdAt": "2022-04-06T10:42:42.015000-05:00", "lastUpdatedAt": "2022-04-06T10:42:42.015000-05:00", "meshOwner": "123456789012", "resourceOwner": "123456789012", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] }, "status": { "status": "ACTIVE" }, "virtualGatewayName": "virtualGatewayName" } }

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

部署虚拟网关

部署仅包含以下内容的亚马逊 ECS 或 Kubernetes 服务特使容器. 另外,您可以在 Amazon EC2 实例中部署 Envoy 容器。有关更多信息,请参阅App Mesh 和 Amazon EC2 入门. 有关如何在 Amazon ECS 上部署的更多信息,请参阅App Mesh 和 Amazon ECS 入门要么开始使用AmazonApp Mesh 和 Kubernetes部署到 Kubernetes。您需要设置APPMESH_RESOURCE_ARN环境变量为mesh/mesh-name/virtualGateway/virtual-gateway-name而且你不能指定代理配置,这样代理的流量就不会被重定向到自身。默认情况下,当 Envoy 在指标和跟踪中引用自身时,App Mesh 使用您在 APPMESH_RESOURCE_ARN 中指定的资源的名称。您可以通过使用自己的名称设置 APPMESH_RESOURCE_CLUSTER 环境变量来覆盖此行为。

我们建议您部署容器的多个实例,并设置Network Load Balancer 以对流向实例的流量进行负载均衡。负载均衡器的服务发现名称是您希望外部服务用来访问网格中的资源的名称,例如myapp.example.com. 有关更多信息,请参阅创建 Network Load Balancer(亚马逊 ECS),创建外部Load Balancer(Kubernetes),或教程:提高应用程序在 Amazon EC2 上的可用性. 另外,您可以在我们的中找到更多示例和演练App Mesh(.

为 Envoy 启用代理授权。有关更多信息,请参阅 Envoy 代理授权

删除虚拟网关

Amazon Web Services Management Console

要删除虚拟网关,请使用Amazon Web Services Management Console

  1. 打开 App Mesh 控制台https://console.aws.amazon.com/appmesh/.

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

  3. 选择虚拟网关在左侧导航栏中。

  4. 选择要删除的虚拟网关,然后选择Delete. 如果虚拟网关有任何关联的网关路由,则无法将其删除。您必须先删除所有关联的网关路由。您只能删除您的账户列出的虚拟网关资源拥有者.

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

Amazon CLI

要删除虚拟网关,请使用Amazon CLI

  1. 使用以下命令删除虚拟网关(替换Red您自己的值):

    aws appmesh delete-virtual-gateway \ --mesh-name meshName \ --virtual-gateway-name virtualGatewayName
  2. 输出示例:

    { "virtualGateway": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:123456789012:mesh/meshName/virtualGateway/virtualGatewayName", "createdAt": "2022-04-06T10:42:42.015000-05:00", "lastUpdatedAt": "2022-04-07T10:57:22.638000-05:00", "meshOwner": "123456789012", "resourceOwner": "123456789012", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] }, "status": { "status": "DELETED" }, "virtualGatewayName": "virtualGatewayName" } }

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