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

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

路由

路由与虚拟路由与相关联。该路由用于匹配对虚拟路由器的请求并将流量分配到其关联的虚拟节点。如果路由与请求匹配,它可以将流量分配到一个或多个目标虚拟节点。您可以为每个虚拟节点指定相对权重。本主题可帮助您处理服务网格中的路由。

创建路由

Amazon Web Services Management Console
使用创建路由Amazon Web Services Management Console
  1. 通过 https://console.aws.amazon.com/appmesh/ 打开 App Mesh 控制台。

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

  3. 在左侧导航中选择 Virtual routers (虚拟路由器)

  4. 选择要与新路由关联的虚拟路由。如果没有列出任何 VPC,则需要先创建虚拟路由

  5. Routes (路由) 表中,选择 Create route (创建路由)。要创建路由,必须将您的账户 ID 列为该路径的资源所有者

  6. 对于 Route name (路由名称),指定要用于您的路由的名称。

  7. 对于路由类型,选择要路由的协议。您选择的协议必须与您为虚拟路由器选择的侦听器协议和要将流量路由到的虚拟节点相匹配。

  8. (可选)对于路径优先级,请指定一个介于 0-1000 之间的优先级以用于您的路径。路由会根据指定的值进行匹配,其中 0 是最高优先级。

  9. (可选)选择其他配置。从下面的协议中,选择您为路由类型选择的协议,然后根据需要在控制台中指定设置。

  10. 对于目标配置,选择现有的 App Mesh 虚拟节点以将流量路由到并指定权重。您可以选择添加目标来添加其他目标。所有目标的百分比相加必须等于100。如果没有列出虚拟节点,则必须先创建一个。如果所选虚拟节点有多个侦听器,则需要目标端口

  11. 对于比赛配置,请指定:

    比赛配置不适用于tcp

    • 如果 http/http2 是选定的类型:

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

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

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

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

          注意

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

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

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

        • Regex match-用于描述多个网址实际上可以识别网站上的单个页面的模式。

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

      • (可选)标头-指定 htt phttp2 的标头。它应该匹配传入的请求以路由到目标虚拟服务。

    • 如果 grpc 是选定的类型:

      • 服务名称-与请求相匹配的目标服务。

      • 方法名称-与请求匹配的目标方法。

      • (可选)元数据-Match 根据元数据的存在进行指定。必须全部匹配才能处理请求。

  12. 选择创建路线

Amazon CLI

使用创建路由Amazon CLI

使用以下命令创建 gRPC 路由并输入 JSON(用你自己的值替换红色值):

  1. aws appmesh create-route \ --cli-input-json file://create-route-grpc.json
  2. 示例 create-route-grpc .json 的内容

    { "meshName" : "meshName", "routeName" : "routeName", "spec" : { "grpcRoute" : { "action" : { "weightedTargets" : [ { "virtualNode" : "nodeName", "weight" : 100 } ] }, "match" : { "metadata" : [ { "invert" : false, "match" : { "prefix" : "123" }, "name" : "myMetadata" } ], "methodName" : "nameOfmethod", "serviceName" : "serviceA.svc.cluster.local" }, "retryPolicy" : { "grpcRetryEvents" : [ "deadline-exceeded" ], "httpRetryEvents" : [ "server-error", "gateway-error" ], "maxRetries" : 3, "perRetryTimeout" : { "unit" : "s", "value" : 15 }, "tcpRetryEvents" : [ "connection-error" ] } }, "priority" : 100 }, "virtualRouterName" : "routerName" }
  3. 输出示例:

    { "route": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualRouter/routerName/route/routeName", "createdAt": "2022-04-06T13:48:20.749000-05:00", "lastUpdatedAt": "2022-04-06T13:48:20.749000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "routeName": "routeName", "spec": { "grpcRoute": { "action": { "weightedTargets": [ { "virtualNode": "nodeName", "weight": 100 } ] }, "match": { "metadata": [ { "invert": false, "match": { "prefix": "123" }, "name": "myMetadata" } ], "methodName": "nameOfMehod", "serviceName": "serviceA.svc.cluster.local" }, "retryPolicy": { "grpcRetryEvents": [ "deadline-exceeded" ], "httpRetryEvents": [ "server-error", "gateway-error" ], "maxRetries": 3, "perRetryTimeout": { "unit": "s", "value": 15 }, "tcpRetryEvents": [ "connection-error" ] } }, "priority": 100 }, "status": { "status": "ACTIVE" }, "virtualRouterName": "routerName" } }

有关使用 for App Mesh 创建路径Amazon CLI的更多信息,请参阅Amazon CLI参考资料中的 creat e-route 命令。

(可选)比赛

  • (可选)输入与请求相匹配的目标服务的服务名称。如果您不指定名称,则会匹配对任何服务的请求。

  • (可选)输入与请求相匹配的目标方法的方法名称。如果您不指定名称,则会匹配对任何方法的请求。如果指定方法名称,则必须指定服务名称。

(可选)元数据

选择 Add metadata(添加元数据)。

  • (可选)输入要根据其路由的元数据名称,选择匹配类型,然后输入匹配值。选择 “反向” 将匹配相反的结果。例如,如果您将元数据名称指定为myMetadata匹配类型为 Exact、Match 值为,然后选择 Invert,则对于元数据名称以外的任何其他名称开头的任何请求,该路由都将匹配123123

  • (可选)选择添加元数据最多可添加十个元数据项目。

(可选)重试策略

重试策略使客户端可以保护自己免受间歇性网络故障或间歇性服务器端故障的影响。重试策略是可选的,但我们建议您这样做。重试超时值定义了每次重试(包括初次尝试)的超时时间。如果您未定义重试策略,则 App Mesh 可能会自动为每条路由创建默认策略。有关更多信息,请参阅默认路由重试策略

  • 对于 “重试超时”,输入超时持续时间的单位数。如果选择任何协议重试事件,则需要一个值。

  • 对于 “重试超时单位”,选择一个单位。如果选择任何协议重试事件,则需要一个值。

  • 对于最大重试次数,输入请求失败时的最大重试次数。如果选择任何协议重试事件,则需要一个值。我们建议将值设置为至少两种。

  • 选择一个或多个 HTTP 重试事件。我们建议至少选择 stream-errorgateway-error

  • 选择 T CP 重试事件

  • 选择一个或多个 gRPC 重试事件。我们建议至少选择 “已取消不可用”。

(可选)超时

  • 默认值为 15 秒。如果您指定了重试策略,则在此处指定的持续时间应始终大于或等于重试持续时间乘以您在重试策略中定义的最大重试数,这样重试策略才能完成。如果您指定的持续时间大于 15 秒,请确保为任何虚拟节点 T ar get 的侦听器指定的超时也大于 15 秒。有关更多信息,请参阅虚拟节点

  • 值为0禁用超时。

  • 路由可以空闲的最长时间。

(可选)比赛

  • 指定路由应匹配的前缀。例如,如果您的虚拟服务名称为 service-b.local,并且您希望路由将请求匹配到 service-b.local/metrics,则前缀应为 /metrics。指定所有流量的/路由。

  • (可选)选择一种方法

  • (可选)选择方案。仅适用于 HTTP2 路由。

(可选)标题

  • (可选)选择添加标题。输入要依据的标题名称,选择匹配类型,然后输入匹配值。选择 “反向” 将匹配相反的结果。例如,如果您指定名为 PrefclientRequestId i x 的标头123,并选择 Invert,则该路由将匹配任何以外任何标头开头的请求123

  • (可选)选择添加标题。您最多可以添加十个标题。

(可选)重试策略

重试策略使客户端可以保护自己免受间歇性网络故障或间歇性服务器端故障的影响。重试策略是可选的,但我们建议您这样做。重试超时值定义了每次重试(包括初次尝试)的超时时间。如果您未定义重试策略,则 App Mesh 可能会自动为每条路由创建默认策略。有关更多信息,请参阅默认路由重试策略

  • 对于 “重试超时”,输入超时持续时间的单位数。如果选择任何协议重试事件,则需要一个值。

  • 对于 “重试超时单位”,选择一个单位。如果选择任何协议重试事件,则需要一个值。

  • 对于最大重试次数,输入请求失败时的最大重试次数。如果选择任何协议重试事件,则需要一个值。我们建议将值设置为至少两种。

  • 选择一个或多个 HTTP 重试事件。我们建议至少选择 stream-errorgateway-error

  • 选择 T CP 重试事件

(可选)超时

  • 请求超时-默认值为 15 秒。如果您指定了重试策略,则在此处指定的持续时间应始终大于或等于重试持续时间乘以您在重试策略中定义的最大重试数,这样重试策略才能完成。

  • 空闲持续时间 — 默认值为 300 秒。

  • 值为0禁用超时。

注意

如果您指定的超时时间大于默认超时,请确保为所有虚拟节点参与者的侦听器指定的超时也大于默认超时。但是,如果您将超时时间减少到低于默认值的值,则可以选择更新虚拟节点的超时时间。有关更多信息,请参阅虚拟节点

(可选)超时

  • 空闲持续时间 — 默认值为 300 秒。

  • 值为0禁用超时。

删除路由

Amazon Web Services Management Console
使用删除路由Amazon Web Services Management Console
  1. 通过 https://console.aws.amazon.com/appmesh/ 打开 App Mesh 控制台。

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

  3. 在左侧导航中选择 Virtual routers (虚拟路由器)

  4. 选择要从中删除路由的路由。

  5. 路由表中,选择要删除的路由,然后选择右上角的删除

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

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

    aws appmesh delete-route \ --mesh-name meshName \ --virtual-router-name routerName \ --route-name routeName
  2. 输出示例:

    { "route": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualRouter/routerName/route/routeName", "createdAt": "2022-04-06T13:46:54.750000-05:00", "lastUpdatedAt": "2022-04-07T10:43:57.152000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "routeName": "routeName", "spec": { "grpcRoute": { "action": { "weightedTargets": [ { "virtualNode": "nodeName", "weight": 100 } ] }, "match": { "metadata": [ { "invert": false, "match": { "prefix": "123" }, "name": "myMetadata" } ], "methodName": "methodName", "serviceName": "serviceA.svc.cluster.local" }, "retryPolicy": { "grpcRetryEvents": [ "deadline-exceeded" ], "httpRetryEvents": [ "server-error", "gateway-error" ], "maxRetries": 3, "perRetryTimeout": { "unit": "s", "value": 15 }, "tcpRetryEvents": [ "connection-error" ] } }, "priority": 100 }, "status": { "status": "DELETED" }, "virtualRouterName": "routerName" } }

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