网关路由 - 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

网关路由附加到虚拟网关,并将流量路由到现有虚拟服务。如果路由与请求匹配,它可以将流量分配到目标虚拟服务。本主题可帮助您处理服务网格中的网关路由。

创建网关路由

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

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

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

  4. 选择要与新网关路由关联的虚拟网关。如果没有列出任何网关,则需要先创建一个虚拟网关。您只能为您的账户列为资源所有者的虚拟网关创建网关路由。

  5. 网关路由表中,选择创建网关路由

  6. 对于网关路由名称,指定要用于您网关路由的名称。

  7. 对于网关路由类型,请选择 httphttp2 或 grpc。

  8. 选择现有的虚拟服务名称。如果没有列出任何虚拟服务,则需要先创建一个虚拟服务列表。

  9. 虚拟服务提供商端口选择与目标相对应的端口。当所选虚拟服务的提供商(路由器或节点)有多个侦听器时,需要使用虚拟服务提供商端口。

  10. (可选)在优先级中,指定此网关路由的优先级。

  11. 对于匹配配置,请指定:

    • 如果所选类型为 http/http2

      • (可选)方法 ‐ 指定要在传入的 http/http2 请求中匹配的方法标头。

      • (可选)端口匹配 - 匹配传入流量的端口。如果此虚拟网关有多个侦听器,则需要匹配端口。

      • (可选)精确/后缀主机名 - 指定在路由到目标虚拟服务的传入请求上应匹配的主机名。

      • (可选)前缀/精确/正则表达式路径——匹配路径的方法。URL

        • 前缀匹配 - 默认情况下,网关路由的匹配请求将重写为目标虚拟服务的名称,匹配的前缀将重写为 /。根据您配置虚拟服务的方式,它可能会使用虚拟路由器根据特定的前缀或标头将请求路由到不同的虚拟节点。

          重要
          • 您不能为前缀匹配指定 /aws-appmesh*/aws-app-mesh*。这些前缀保留供将来的 App Mesh 内部使用。

          • 如果定义了多条网关路由,则会将请求与前缀最长的路由相匹配。例如,如果存在两条网关路由,其中一条的前缀为 /chapter,一条的前缀为 /,则请求 www.example.com/chapter/ 将带 /chapter 前缀的网关路由进行匹配。

          注意

          如果您启用基于路径/前缀的匹配,App Mesh 会启用路径标准化(normalize_path 和 merge_slashes),以最大限度地减少出现路径混淆漏洞的可能性。

          当参与请求的各方使用不同的路径表示形式时,就会出现路径混淆漏洞。

        • 精确匹配-exact 参数禁用路径的部分匹配,并确保只有当路径与当前URL路径EXACT匹配时,它才会返回路径。

        • 正则表达式匹配 ——用于描述多个模式实际上URLs可以识别网站上的单个页面。

      • (可选)查询参数 - 此字段允许您匹配查询参数。

      • (可选)标头 ‐ 指定 httphttp2 的标头。它应该与传入的请求相匹配,以路由到目标虚拟服务。

    • 如果选择了 grpc 类型:

      • 主机名匹配类型和(可选)精确/后缀匹配 - 指定在路由到目标虚拟服务的传入请求上应匹配的主机名。

      • grpc 服务名称-grpc 服务充当您的应用程序API的服务,定义为。 ProtoBuf

        重要

        您不能为服务名称指定 /aws.app-mesh*aws.appmesh。这些服务名称保留供将来 App Mesh 内部使用。

      • (可选)元数据 - 指定 grpc 的元数据。它应该与传入的请求相匹配,以路由到目标虚拟服务。

  12. (可选)对于重写配置:

    • 如果所选类型为 http/http2

      • 如果 前缀 是选定的匹配类型:

        • 覆盖主机名的自动重写 - 默认情况下,主机名将重写为目标虚拟服务的名称。

        • 覆盖前缀的自动重写 - 开启后, Prefix rewrite 会指定重写前缀的值。

      • 如果精确路径是选定的匹配类型:

        • 覆盖主机名的自动重写 - 默认情况下,主机名将重写为目标虚拟服务的名称。

        • 路径重写 - 指定重写路径的值。没有默认路径。

      • 如果正则表达式路径是选定的匹配类型:

        • 覆盖主机名的自动重写 - 默认情况下,主机名将重写为目标虚拟服务的名称。

        • 路径重写 - 指定重写路径的值。没有默认路径。

    • 如果选择了 grpc 类型:

      • 覆盖主机名的自动重写 - 默认情况下,主机名将重写为目标虚拟服务的名称。

  13. 选择创建网关路由以完成。

AWS CLI

使用 AWS CLI创建网关路由。

使用以下命令和输入创建网关路由JSON(替换 red 用你自己的价值观):

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

    { "spec": { "httpRoute" : { "match" : { "prefix" : "/" }, "action" : { "target" : { "virtualService": { "virtualServiceName": "serviceA.svc.cluster.local" } } } } } }
  3. 输出示例:

    { "gatewayRoute": { "gatewayRouteName": "gatewayRouteName", "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualGateway/virtualGatewayName/gatewayRoute/gatewayRouteName", "createdAt": "2022-04-06T11:05:32.100000-05:00", "lastUpdatedAt": "2022-04-06T11:05:32.100000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "httpRoute": { "action": { "target": { "virtualService": { "virtualServiceName": "serviceA.svc.cluster.local" } } }, "match": { "prefix": "/" } } }, "status": { "status": "ACTIVE" }, "virtualGatewayName": "gatewayName" } }

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

删除网关路由

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

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

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

  4. 选择要从中删除网关路由的虚拟网关。

  5. 网关路由表中,选择要删除的网关路由,然后选择删除。只有当您的账户被列为资源所有者时,您才能删除网关路由。

  6. 在确认框中,键入 delete,然后单击删除

AWS CLI
要使用删除网关路由 AWS CLI
  1. 使用以下命令删除您的网关路由(替换 red 用你自己的价值观):

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

    { "gatewayRoute": { "gatewayRouteName": "gatewayRouteName", "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualGateway/virtualGatewayName/gatewayRoute/gatewayRouteName", "createdAt": "2022-04-06T11:05:32.100000-05:00", "lastUpdatedAt": "2022-04-07T10:36:33.191000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "spec": { "httpRoute": { "action": { "target": { "virtualService": { "virtualServiceName": "serviceA.svc.cluster.local" } } }, "match": { "prefix": "/" } } }, "status": { "status": "DELETED" }, "virtualGatewayName": "virtualGatewayName" } }

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