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

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

网关路由

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

创建网关路由

Amazon Web Services Management Console
使用 Amazon Web Services 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 请求中匹配的方法标头。

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

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

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

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

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

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

          注意

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

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

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

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

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

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

    • 如果选择了 grpc 类型:

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

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

        重要

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

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

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

    • 如果所选类型为 http/http2

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

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

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

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

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

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

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

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

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

    • 如果选择了 grpc 类型:

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

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

Amazon CLI

使用 Amazon CLI 创建网关路由。

使用以下命令创建网关路由,然后输入 JSON(用您自己的值替换红色值):

  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" } }

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

删除网关路由

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

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

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

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

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

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

Amazon CLI
使用 Amazon CLI 删除网关路由
  1. 使用以下命令删除您的网关路由(用您自己的值替换红色值):

    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" } }

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