REST Resource: projects.locations.grpcRoutes

资源:GrpcRoute

GrpcRoute 是用于定义由 Mesh 或网关资源路由的 gRPC 流量的路由方式的资源。

JSON 表示法
{
  "name": string,
  "selfLink": string,
  "createTime": string,
  "updateTime": string,
  "labels": {
    string: string,
    ...
  },
  "description": string,
  "hostnames": [
    string
  ],
  "meshes": [
    string
  ],
  "gateways": [
    string
  ],
  "rules": [
    {
      object (RouteRule)
    }
  ]
}
字段
name

string

必需。GrpcRoute 资源的名称。它匹配 projects/*/locations/global/grpcRoutes/<grpc_route_name> 格式

createTime

string (Timestamp format)

仅限输出。创建资源时的时间戳。

时间戳采用 RFC3339 世界协调时间(UTC,即“祖鲁时”)格式,精确到纳秒,最多九个小数位。示例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

updateTime

string (Timestamp format)

仅限输出。更新资源时的时间戳。

时间戳采用 RFC3339 世界协调时间(UTC,即“祖鲁时”)格式,精确到纳秒,最多九个小数位。示例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

labels

map (key: string, value: string)

可选。与 GrpcRoute 资源关联的标签标记集。

包含一系列 "key": value 对的对象。示例:{ "name": "wrench", "mass": "1.3kg", "count": "3" }

description

string

可选。资源的自由文本说明。长度上限为 1024 个字符。

hostnames[]

string

必需。服务主机名,以及此路由描述流量的可选端口。

格式:[:]

Hostname 是网络主机的完全限定域名。这与 RFC 1123 中对主机名的定义一致,但有 2 个值得注意的例外情况:- 不允许使用 IP 地址。- 主机名可以带有前缀通配符 (*.)。通配符标签必须单独显示为第一个标签。

主机名可以是“精确”即不含网络主机终止点的域名(例如 foo.example.com),或“通配符”(以单个通配符标签为前缀的域名,例如 *.example.com)。

请注意,根据 RFC1035 和 RFC1123,标签必须由小写字母数字字符或“-”组成,并以字母数字字符开头和结尾。不允许使用其他标点符号。

与网格或网关关联的路由必须具有唯一的主机名。如果您尝试附加具有冲突主机名的多个路线,系统会拒绝相应配置。

例如,虽然可以将主机名 *.foo.bar.com*.bar.com 的路由与同一路由关联,但无法将两条路由都与 *.bar.com 或同时与 bar.com 关联。

如果指定了端口,则 gRPC 客户端必须使用带有端口的通道 URI(即“xds:///service:123”)才能匹配此规则,否则必须提供不带端口的 URI(即“xds:///service”)。

meshes[]

string

可选。网格定义了此 GrpcRoute 附加的网格的列表,作为路由规则之一,用于路由由网格处理的请求。

每个网格引用都应与模式匹配:projects/*/locations/global/meshes/<mesh_name>

gateways[]

string

可选。Gateways 定义了此 GrpcRoute 附加到的网关列表,作为路由网关所处理请求的路由规则之一。

每个网关引用都应匹配以下格式:projects/*/locations/global/gateways/<gateway_name>

rules[]

object (RouteRule)

必需。用于定义如何路由流量的详细规则列表。

在单个 GrpcRoute 中,将执行与第一个匹配的 GrpcRoute.RouteRule 关联的 GrpcRoute.RouteAction。必须提供至少一条规则。

RouteRule

描述如何路由流量。

JSON 表示法
{
  "matches": [
    {
      object (RouteMatch)
    }
  ],
  "action": {
    object (RouteAction)
  }
}
字段
matches[]

object (RouteMatch)

可选。匹配定义用于将规则与传入的 gRPC 请求进行匹配的条件。每项匹配都是独立的,也就是说,只要满足其中任一匹配条件,系统就会匹配此规则。如果未指定任何 matches 字段,此规则将无条件匹配流量。

action

object (RouteAction)

必需。用于定义如何路由流量的详细规则。此字段为必填字段。

RouteMatch

匹配流量的条件。如果所有提供的字段都匹配,系统会将 RouteMatch 视为匹配。

JSON 表示法
{
  "headers": [
    {
      object (HeaderMatch)
    }
  ],
  "method": {
    object (MethodMatch)
  }
}
字段
headers[]

object (HeaderMatch)

可选。指定要匹配的标头集合。

method

object (MethodMatch)

可选。要匹配的 gRPC 方法。如果此字段为空或省略,则将匹配所有方法。

MethodMatch

指定方法的匹配项。

JSON 表示法
{
  "type": enum (Type),
  "grpcService": string,
  "grpcMethod": string,
  "caseSensitive": boolean
}
字段
type

enum (Type)

可选。指定如何与名称进行匹配。如果未指定,则默认值为“EXACT”。

grpcService

string

必需。要匹配的服务的名称。如果未指定该项,则与所有服务进行匹配。

grpcMethod

string

必需。要匹配的方法的名称。如果未指定该项,则与所有方法进行匹配。

caseSensitive

boolean

可选。指定匹配时区分大小写。默认值为 true。caseSensitive 不得与 REGULAR_EXPRESSION 类型搭配使用。

类型

匹配的类型。

枚举
TYPE_UNSPECIFIED 未指定。
EXACT 仅与提供的确切名称匹配。
REGULAR_EXPRESSION 将 grpcMethod 和 grpcService 解读为正则表达式。支持 RE2 语法。

HeaderMatch

与标头集合的匹配。

JSON 表示法
{
  "type": enum (Type),
  "key": string,
  "value": string
}
字段
type

enum (Type)

可选。指定如何与标头的值匹配。如果未指定,则使用默认值 EXACT。

key

string

必需。标头的键。

value

string

必需。标头的值。

类型

匹配类型。

枚举
TYPE_UNSPECIFIED 未指定。
EXACT 将仅与提供的值完全匹配。
REGULAR_EXPRESSION 将匹配符合由值指定的前缀的路径。支持 RE2 语法。

RouteAction

指定如何路由匹配的流量。

JSON 表示法
{
  "destinations": [
    {
      object (Destination)
    }
  ],
  "faultInjectionPolicy": {
    object (FaultInjectionPolicy)
  },
  "timeout": string,
  "retryPolicy": {
    object (RetryPolicy)
  },
  "statefulSessionAffinity": {
    object (StatefulSessionAffinityPolicy)
  },
  "idleTimeout": string
}
字段
destinations[]

object (Destination)

可选。应将流量转发到的目标服务。如果指定了多个目的地,流量将根据这些目的地的权重字段在后端服务之间拆分。

faultInjectionPolicy

object (FaultInjectionPolicy)

可选。用于向流量注入故障的规范,以测试客户端对目标服务故障的弹性。在故障注入过程中,当客户端向目的地发送请求时,系统可能会对部分请求引入延迟,然后再将这些请求发送到目的地服务。同样,可以对一定比例的请求取消来自客户端的请求。

配置了 faultInjectionPolicy 的客户端将忽略超时和重试政策

timeout

string (Duration format)

可选。指定所选路由的超时时间。超时的计算时间为:从请求已完全处理(即视频流结束)开始,直到响应完全处理为止。超时包括所有重试。

该时长以秒为单位,最多包含九个小数位,以“s”结尾。示例:"3.5s"

retryPolicy

object (RetryPolicy)

可选。指定与此路由关联的重试政策。

statefulSessionAffinity

object (StatefulSessionAffinityPolicy)

可选。指定基于 Cookie 的有状态会话亲和性。

idleTimeout

string (Duration format)

可选。指定选定路由的空闲超时时间。空闲超时是指没有在上行或下行连接上发送或接收字节的时间段。如果未设置,默认空闲超时时间为 1 小时。如果设置为 0 秒,则会停用超时。

该时长以秒为单位,最多包含九个小数位,以“s”结尾。示例:"3.5s"

目标

流量将路由到的目的地。

JSON 表示法
{

  // Union field destination_type can be only one of the following:
  "serviceName": string
  // End of list of possible types for union field destination_type.
  "weight": integer
}
字段
联合字段 destination_type。指定流量将路由到的目标类型。destination_type 只能是下列其中一项:
serviceName

string

必需。要将流量路由到的目标服务的网址。必须引用 BackendService 或 ServiceDirectoryService。

weight

integer

可选。指定转发到 serviceName 字段所引用的后端的请求比例。计算方式如下:- 权重/总和(此目的地列表中的权重)。对于非零值,此处定义的确切比例可能会与实际比例存在一些误差,具体取决于实现支持的精度。

如果仅指定一个 serviceName 且其权重大于 0,则系统会将 100% 的流量转发到该后端。

如果为任何服务名称指定了权重,则需要为所有服务名称指定权重。

如果没有为所有服务指定权重,流量将按等比例分配给所有服务。

FaultInjectionPolicy

引入到流量中的故障注入规范,用于测试客户端对目标服务故障的弹性。在故障注入过程中,当客户端向目的地发送请求时,在将这些请求发送到目标服务之前,一定比例的请求可能会出现延迟。同样,系统也可以根据请求百分比来终止来自客户端的请求。

JSON 表示法
{
  "delay": {
    object (Delay)
  },
  "abort": {
    object (Abort)
  }
}
字段
delay

object (Delay)

用于向客户端请求注入延迟的规范。

abort

object (Abort)

用于中止客户端请求的规范。

延迟

规范了在发送到目的地之前,客户端请求在故障注入过程中的延迟方式。

JSON 表示法
{
  "fixedDelay": string,
  "percentage": integer
}
字段
fixedDelay

string (Duration format)

在转发请求之前指定固定的延迟时间。

该时长以秒为单位,最多包含九个小数位,以“s”结尾。示例:"3.5s"

percentage

integer

将注入延迟时间的流量百分比。

该值必须介于 [0, 100] 之间

取消

指定如何在将客户端请求发送到目标位置之前作为故障注入的一部分取消客户端请求。

JSON 表示法
{
  "httpStatus": integer,
  "percentage": integer
}
字段
httpStatus

integer

用于终止请求的 HTTP 状态代码。

该值必须介于 200 到 599 之间(含 200 和 599)。

percentage

integer

将被中止的流量所占的百分比。

值必须介于 [0, 100] 之间

RetryPolicy

重试的规范。

JSON 表示法
{
  "retryConditions": [
    string
  ],
  "numRetries": integer
}
字段
retryConditions[]

string

  • connect-failure:路由器在连接到后端服务失败时(例如由于连接超时)会重试。
  • refused-stream:如果后端服务使用 REFUSED_STREAM 错误代码重置流,则路由器将重试。此重置类型表示可以放心地重试。
  • 已取消:如果响应标头中的 gRPC 状态代码设置为“cancel”,路由器将重试
  • limit-exceeded:如果响应标头中的 gRPC 状态代码设置为截止时间-exceeded,则路由器将重试
  • 资源耗尽:如果响应标头中的 gRPC 状态代码设置为资源耗尽,路由器将重试
  • 不可用:如果响应标头中的 gRPC 状态代码设置为“不可用”,路由器将重试
numRetries

integer (uint32 format)

指定允许的重试次数。此数字必须大于 0。如果未指定,则默认为 1。

StatefulSessionAffinityPolicy

基于 Cookie 的有状态会话亲和性规范,其中日期平面提供“会话 Cookie”名为“GSSA”该方法会对特定目标主机进行编码,只要目标主机保持正常运行且健康状况良好,包含该 Cookie 的每个请求就会定向到该主机。

gRPC 无代理网格库或 Sidecar 代理将管理会话 Cookie,但客户端应用代码负责将 Cookie 从会话中的每个 RPC 复制到下一个 RPC。

JSON 表示法
{
  "cookieTtl": string
}
字段
cookieTtl

string (Duration format)

必需。数据平面生成的 Set-Cookie 标头的 Cookie TTL 值。Cookie 的生命周期可以设置为 1 到 86400 秒(24 小时,含)之间的值。

该时长以秒为单位,最多包含九个小数位,以“s”结尾。示例:"3.5s"

方法

create

在给定的项目和位置中创建新的 GrpcRoute。

delete

删除单个 GrpcRoute。

get

获取单个 GrpcRoute 的详细信息。

list

列出给定项目和位置中的 GrpcRoute。

patch

更新单个 GrpcRoute 的参数。