虚拟网关 - AWS App Mesh

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

虚拟网关

重要

终止支持通知:2026 年 9 月 30 日, AWS 将停止对的支持。 AWS App Mesh 2026 年 9 月 30 日之后,您将无法再访问 AWS App Mesh 控制台或 AWS App Mesh 资源。如需了解更多信息,请访问此博客文章从迁移 AWS App Mesh 到 Amazon S ECS ervice Connect

虚拟网关允许网格之外的资源与网格内部的资源进行通信。虚拟网关代表在亚马逊ECS服务、Kubernetes 服务或亚马逊实例上运行的 Envoy 代理。EC2与代表运行应用程序的 Envoy 的虚拟节点不同,虚拟网关代表自己部署的 Envoy。

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

重要

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

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

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

创建虚拟网关

注意

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

AWS Management Console
要使用创建虚拟网关 AWS Management Console
  1. 打开 App Mesh 控制台,网址为https://console.aws.amazon.com/appmesh/

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

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

  4. 选择创建虚拟网关

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

  6. (可选,但建议使用)配置客户端策略默认值

    1. (可选)TLS如果您希望网关仅使用传输层安全(TLS)与虚拟服务通信,请选择强制

    2. (可选)在 “端口” 中,指定要强制与虚拟服务TLS通信的一个或多个端口。

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

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

      • E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入 Envoy 使用秘密发现服务获取的机密的名称。

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

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

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

      • E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入 Envoy 使用秘密发现服务获取的机密的名称。

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

  7. (可选)要配置日志记录,请选择日志记录。输入你希望 Envoy 使用的HTTP访问日志路径。我们推荐使用该/dev/stdout路径,以便您可以使用 Docker 日志驱动程序将您的 Envoy 日志导出到诸如 Amazon Lo CloudWatch gs 之类的服务。

    注意

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

  8. 配置侦听器

    1. 选择协议并指定 Envoy 侦听流量的端口http 侦听器允许连接转换到 websockets。您可以单击添加侦听器来添加多个侦听器。移除按钮将移除该侦听器。

    2. (可选)启用连接池

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

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

      注意

      connectionPoolconnectionPoolportMapping 协议必须相同。如果您的侦听器协议为 grpchttp2,则仅指定 maxRequests。如果您的侦听器协议为 http,则可以同时指定 maxConnectionsmaxPendingRequests

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

      • 对于最大请求数,指定可与虚拟网关 Envoy 建立的最大并行请求数。

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

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

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

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

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

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

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

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

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

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

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

      • 在 “模式” 中,选择TLS要在监听器上配置的模式。

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

        • AWS Certificate Manager 托管-选择现有证书

        • E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入 Envoy 使用秘密发现服务获取的机密的名称。

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

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

        • E@@ nvoy Secret Discovery Service (SDS) 托管 — 输入 Envoy 使用秘密发现服务获取的机密的名称。

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

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

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

AWS CLI

使用 AWS 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" } }

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

部署虚拟网关

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

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

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

删除虚拟网关

AWS Management Console
要删除虚拟网关,请使用 AWS Management Console
  1. 打开 App Mesh 控制台,网址为https://console.aws.amazon.com/appmesh/

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

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

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

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

AWS CLI
要删除虚拟网关,请使用 AWS 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" } }

有关使用 for App Mesh 删除虚拟网关的更多信息,请参阅 AWS CLI 参考中的delete-virtual-gateway命令。 AWS CLI