无代理 gRPC 限制
本文档介绍适用于具有无代理 gRPC 应用的 Cloud Service Mesh 的限制。如需了解限制,请参阅配额和限制。
转发规则、网址映射和目标代理的限制仅适用于与 Google Cloud 负载均衡 API 搭配使用的 Cloud Service Mesh。
一般限制
具有无代理 gRPC 应用的 Cloud Service Mesh 的限制包括:
您无法在 Google Cloud 控制台中使用 gRPC 协议配置后端服务和路由规则映射。对于这些资源,Google Cloud 控制台处于只读状态。
无代理 gRPC 支持端点发现、路由、负载均衡、负载报告以及许多高级流量管理功能。
如需了解支持某些高级流量管理功能所需的最低 gRPC 版本,请参阅支持的 gRPC 版本和语言。
对于需要不受支持的高级流量管理功能的 gRPC 应用,请使用 DNS 名称解析器(而非 xDS 解析器),并使用 Cloud Service Mesh 支持的边车代理进行部署。在目标 gRPC 代理中,将
validateForProxyless
字段设置为FALSE
,以便您可以配置 gRPC 尚不支持但 Cloud 服务网格中可通过使用边车代理提供的功能。
无代理 gRPC 仅支持轮循和环哈希负载均衡政策。不支持其他负载均衡政策。
- Cloud Service Mesh 会向 gRPC 客户端提供位置的优先加权列表,即一个实例组或一个网络端点组 (NEG)。Cloud Service Mesh 根据最近的可用可用区、其容量和后端服务的均衡模式计算此列表。
- 对于特定请求,gRPC 客户端会根据优先级和权重选择一个或多个区域,并在这些区域内执行基于后端的轮循或基于哈希的负载均衡。
当前可用区容量低于 50% 时,将开始从一个可用区故障切换到另一个可用区。您无法配置此阈值。
在某些情况下,与目标 gRPC 代理和引用目标 gRPC 代理的转发规则相关的配置命令最长可能需要一分钟。
无代理 gRPC 客户端不支持混合连接 NEG (
NON_GCP_PRIVATE_IP_PORT
NEG)。
网址映射限制
无代理 gRPC 服务支持以下网址映射流量管理功能。
hostRules
的 pathMatcher
支持的功能:
pathMatcher
name
description
defaultService
defaultRouteAction
weightedBackendServices
backendService
weight
retryPolicy
retryConditions
numRetries
faultInjectionPolicy
maxStreamDuration
pathRules
service
routeAction
weightedBackendServices
backendService
weight
retryPolicy
retryConditions
numRetries
faultInjectionPolicy
maxStreamDuration
paths
routeRules
priority
description
matchRules
prefixMatch
fullPathMatch
headerMatches
metadataFilters
service
routeAction
weightedBackendServices
backendService
weight
retryPolicy
retryConditions
numRetries
faultInjectionPolicy
maxStreamDuration
使用无代理 gRPC 服务时,以下网址映射限制适用:
不支持网址映射主机规则和默认规则(包括网址映射中隐式创建的
*
主机规则)中的通配符。完成主机匹配后,系统会跳过此类条目。不支持以下功能:
routeRules
:queryParameterMatches
headerAction
、urlRewrite
、requestMirrorPolicy
、corsPolicy
、urlRedirect
路由操作timeout
路由操作;使用maxStreamDuration
,而不是timeout
retryPolicy
:perTryTimeout
retryPolicy
:retryConditions
,但cancelled
、deadline-exceeded
、internal
、resource-exhausted
和unavailable
中的一个或多个条件除外- 无代理 gRPC 服务不会使用网址映射的
defaultService
、defaultRouteAction
、defaultUrlRedirect
、headerAction
。如果系统在无代理 gRPC 客户端查找服务名称时找不到匹配的 hostRule,则 Cloud Service Mesh 会返回名称查找错误,而不是使用网址映射的默认服务或操作。 weightedBackendServices
:headerAction
在网址映射标头匹配规则中,系统仅支持用户指定的非二进制自定义元数据和
content-type
标头。以下传输级标头不能用于标头匹配规则::authority
、:method
、:path
、:scheme
、user-agent
、accept-encoding
、content-encoding
、grpc-accept-encoding
、grpc-encoding
、grpc-previous-rpc-attempts
、grpc-tags-bin
、grpc-timeout
、grpc-trace-bin
。如果您更新网址映射主机规则以从一项后端服务更改为另一项后端服务,在将新配置推送到客户端时,流量可能会暂时中断。为避免此限制,请配置带有加权后端服务的流量拆分功能。配置流量拆分后,将流量从旧的后端服务缓慢转移到新的后端服务。
目标 gRPC 代理限制
当目标 gRPC 代理引用网址映射时,您无法配置以下网址映射功能。无论您是使用边车代理还是无代理 gRPC 服务,情况都是如此,因为这些特定于 HTTP 协议的功能不适用于 gRPC 协议:
queryParameterMatches
个匹配规则urlRewrite
路由操作urlRedirect
路由操作corsPolicy
操作
后端服务限制
无代理 gRPC 服务(使用边车代理)不支持以下后端服务功能:
localityLbPolicy
,但LEAST_REQUEST
(仅限 Java 客户端)、ROUND_ROBIN
和RING_HASH
除外sessionAffinity
,HEADER_FIELD
和NONE
除外consistentHash
(httpHeaderName
和minimumRingSize
字段除外)affinityCookieTtlSec
timeoutSec
;请改用maxStreamDuration
circuitBreakers
(maxRequests
字段除外)
请注意,配置不支持的值时,gRPC 客户端将对 Cloud Service Mesh 中的配置进行 NACK。这将导致客户端拒绝所有后端服务的配置,因为 xDS 协议要求拒绝给定响应中的所有资源,而不是只能拒绝响应中的个别资源。这会导致客户端通道进入暂时性错误状态,直到配置得到修复。由于此限制,您必须确保所有客户端都支持所需值,然后再为服务配置功能。例如,如果将 ROUND_ROBIN
政策更改为 RING_HASH
,则必须确保所有客户端都升级到支持 RING_HASH
的版本。
高级流量管理限制
您无法为使用 Cloud Service Mesh 的无代理 gRPC 服务配置某些高级流量管理功能。如需了解支持的功能,请参阅以下内容:
Service Directory 的限制
- Service Directory 和 Cloud Service Mesh 不保证客户端的网络可达性。
后端服务只能引用以下其中一项:
- 代管式实例组或非代管式实例组
- 网络端点组
- 服务绑定
Service Directory 服务只能与满足
load-balancing-scheme=INTERNAL_SELF_MANAGED
的全局后端服务一起使用。可以删除服务绑定引用的 Service Directory 服务。如果后端服务附加的底层 Service Directory 服务被删除,则使用 Cloud Service Mesh 的应用无法将流量发送到此服务,因此请求会失败。如需了解最佳做法,请参阅可观测性和调试。
将 Service Directory 服务绑定到后端服务时,您无法在该后端服务上配置健康检查。
后续步骤
- 如需了解适用于 Cloud Service Mesh 的限制(包括高级流量管理限制),请参阅 Cloud Service Mesh 限制。
- 如需查找无代理 gRPC 服务的使用场景和架构模式,请参阅无代理 gRPC 服务概览。