本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
路由
路由与虚拟路由器关联。该路由用于匹配对虚拟路由器的请求并将流量分发到其关联的虚拟节点。如果路由与请求匹配,它可以将流量分配到一个或多个目标虚拟节点。您可以为每个虚拟节点指定相对权重。本主题可以帮助您处理服务网格中的路由。
创建路由
- AWS Management Console
-
使用 AWS Management Console 创建路由
-
打开 App Mesh 控制台,网址为 https://console.aws.amazon.com/appmesh/。
-
选择要在其中创建路由的网格。列出了您拥有的所有网格以及已与您共享的所有网格。
-
在左侧导航中,选择虚拟路由器。
-
选择要将新路由与之关联的虚拟路由器。如果没有列出任何路由器,则需要先创建一个虚拟路由器。
-
在路由表中,选择创建路由。要创建路由,必须将您的账户 ID 列为该路径的资源所有者。
-
对于路由名称,指定要用于您的路由的名称。
-
对于路由类型,选择您要路由的协议。您选择的协议必须与您为虚拟路由器选择的侦听器协议和要将流量路由到的虚拟节点相匹配。
-
(可选)在路由优先级中,从 0-1000 中选择一个优先级以用于您的路由。路由会根据指定的值进行匹配,其中 0 是最高优先级。
-
(可选)选择其他配置。从下面的协议中,选择您为路由类型选择的协议,并根据需要在控制台中指定设置。
-
对于目标配置,选择要将流量路由到的现有 App Mesh 虚拟节点并指定权重。您可以选择添加目标来添加其他目标。所有目标相加必须等于100。如果没有列出虚拟节点,则必须先创建一个。如果所选虚拟节点有多个侦听器,则需要目标端口。
-
对于匹配配置,请指定:
匹配配置不适用于 tcp
-
如果所选类型为 http/http2:
-
(可选)方法 ‐ 指定要在传入的 http/http2 请求中匹配的方法标头。
-
(可选)端口匹配 — 匹配传入流量的端口。如果此虚拟路由器有多个侦听器,则需要匹配端口。
-
(可选)前缀/精确/正则表达式路径 — 匹配网址路径的方法。
-
前缀匹配 — 默认情况下,网关路由的匹配请求将重写为目标虚拟服务的名称,匹配的前缀将重写为 /
。根据您配置虚拟服务的方式,它可能会使用虚拟路由器根据特定的前缀或标头将请求路由到不同的虚拟节点。
-
精确匹配 — exact 参数会禁用路径的部分匹配,并确保只有当路径与当前 url 完全匹配时,才会返回路由。
-
正则表达式匹配 — 用于描述多个网址实际上可以识别网站上的单个页面的模式。
-
(可选)查询参数 — 此字段允许您匹配查询参数。
-
(可选)标头 ‐ 指定 http 和 http2 的标头。它应该与传入的请求相匹配,以路由到目标虚拟服务。
-
-
选择创建路由。
- AWS CLI
-
使用 AWS CLI 创建路由。
使用以下命令创建 gRPC 路径并输入 JSON(用您自己的值替换红色
值):
-
aws appmesh create-route \
--cli-input-json file://create-route-grpc.json
-
示例 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"
}
-
输出示例:
{
"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"
}
}
有关使用适用于 App Mesh 的 AWS CLI 创建路径的更多信息,请参阅 AWS CLI 参考资料中的 create-ro ute 命令。
(可选)重试策略
重试策略使客户端可以保护自己免受间歇性网络故障或间歇性服务器端故障的影响。重试策略是可选的,但我们建议您这样做。重试超时值定义每次重试尝试(包括初次尝试)的超时时间。如果您未定义重试策略,那么 App Mesh 可能会自动为每条路由创建默认策略。有关更多信息,请参阅 默认路由重试策略。
-
对于重试超时,输入超时持续时间的单位数。如果您选择任何协议重试事件,则必须输入一个值。
-
在重试超时单位中,选择一个单位。如果您选择任何协议重试事件,则必须输入一个值。
-
对于最大重试次数,输入请求失败时进行的最大重试次数。如果您选择任何协议重试事件,则必须输入一个值。我们建议至少将值设置为2。
-
选择一个或多个 HTTP 重试事件。我们建议至少选择流错误和网关错误。
-
选择 TCP 重试事件。
-
选择一个或多个 gRPC 重试事件。我们建议至少选择已取消且不可用。
(可选)重试策略
重试策略使客户端可以保护自己免受间歇性网络故障或间歇性服务器端故障的影响。重试策略是可选的,但我们建议您这样做。重试超时值定义每次重试尝试(包括初次尝试)的超时时间。如果您未定义重试策略,那么 App Mesh 可能会自动为每条路由创建默认策略。有关更多信息,请参阅 默认路由重试策略。
-
对于重试超时,输入超时持续时间的单位数。如果您选择任何协议重试事件,则必须输入一个值。
-
在重试超时单位中,选择一个单位。如果您选择任何协议重试事件,则必须输入一个值。
-
对于最大重试次数,输入请求失败时进行的最大重试次数。如果您选择任何协议重试事件,则必须输入一个值。我们建议至少将值设置为2。
-
选择一个或多个 HTTP 重试事件。我们建议至少选择流错误和网关错误。
-
选择 TCP 重试事件。
如果您指定的超时时间大于默认值,请确保为所有虚拟节点参与者侦听器指定的超时时间也大于默认值。但是,如果您将超时时间缩短到低于默认值的值,则可以选择更新虚拟节点的超时时间。有关更多信息,请参阅虚拟节点。
(可选)超时
-
空闲时长 — 默认值为 300 秒。
-
0
值禁用超时。
删除路由
- AWS Management Console
-
使用 AWS Management Console 删除路由表
-
打开 App Mesh 控制台,网址为 https://console.aws.amazon.com/appmesh/。
-
选择要从中删除路径的网格。列出了您拥有的所有网格以及已与您共享的所有网格。
-
在左侧导航中,选择虚拟路由器。
-
选择要从中删除路由的路由器。
-
在路径表中,选择要删除的路线,然后选择右上角的删除。
-
在确认框中,键入 delete
,然后单击删除。
- AWS CLI
-
使用 AWS CLI 删除路由表
-
使用以下命令删除您的路线(用您自己的值替换红色
值):
aws appmesh delete-route \
--mesh-name meshName
\
--virtual-router-name routerName
\
--route-name routeName
-
输出示例:
{
"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"
}
}
有关使用适用于 App Mesh 删除路径 AWS CLI 的更多信息,请参阅 AWS CLI 参考资料中的 delete-route 命令。