无代理 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 支持的 Sidecar 代理进行部署。在目标 gRPC 代理中,将 validateForProxyless 字段设置为 FALSE,以便您可以配置尚不受 gRPC 支持但可使用 Sidecar 代理在 Cloud Service Mesh 中可用的功能。

  • 无代理 gRPC 仅支持轮循和环哈希负载均衡政策。不支持其他负载均衡政策

    • Cloud Service Mesh 向 gRPC 客户端提供本地优先加权列表(一个实例组或一个网络端点组 (NEG))。Cloud Service Mesh 根据最近的可用地区、其容量以及后端服务的平衡模式计算此列表。
    • 对于特定请求,gRPC 客户端会根据优先级和权重选择一个或多个区域,并在这些区域内执行基于后端的轮循或基于哈希的负载均衡。
  • 当前可用区容量低于 50% 时,从一个可用区(位置)到另一个可用区的故障切换即会开始。您无法配置此阈值。

  • 在某些情况下,与目标 gRPC 代理和引用目标 gRPC 代理的转发规则相关的配置命令最长可能需要一分钟。

  • 无代理 gRPC 客户端不支持混合连接 NEG (NON_GCP_PRIVATE_IP_PORT NEG)

网址映射限制

无代理 gRPC 服务支持以下网址映射流量管理功能。

hostRulespathMatcher 支持的功能:

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 服务时,以下网址映射限制适用:

  • 不支持网址映射主机规则和默认规则(包括网址映射中隐式创建的 * 主机规则)中的通配符。完成主机匹配后,系统会跳过此类条目。

  • 不支持以下功能:

    • routeRulesqueryParameterMatches
    • headerActionurlRewriterequestMirrorPolicycorsPolicyurlRedirect 路由操作
    • timeout 路由操作;使用 maxStreamDuration,而不是 timeout
    • retryPolicyperTryTimeout
    • retryPolicyretryConditions,但 cancelleddeadline-exceededinternalresource-exhaustedunavailable 中的一个或多个条件除外
    • 无代理 gRPC 服务不会使用网址映射的 defaultServicedefaultRouteActiondefaultUrlRedirectheaderAction。如果在无代理 gRPC 客户端查找服务名称时未找到匹配的主机规则,Cloud Service Mesh 会返回名称查找错误,而不是使用网址映射的默认服务或操作。
    • weightedBackendServicesheaderAction
  • 在网址映射标头匹配规则中,仅支持用户指定的非二进制自定义元数据content-type 标头。以下传输级标头不能用于标头匹配规则::authority:method:path:schemeuser-agentaccept-encodingcontent-encodinggrpc-accept-encodinggrpc-encodinggrpc-previous-rpc-attemptsgrpc-tags-bingrpc-timeoutgrpc-trace-bin

  • 如果您更新网址映射主机规则以从一项后端服务更改为另一项后端服务,在将新配置推送到客户端时,流量可能会暂时中断。为避免此限制,请配置带有加权后端服务的流量拆分功能。配置流量拆分后,将流量从旧的后端服务缓慢转移到新的后端服务。

目标 gRPC 代理限制

当目标 gRPC 代理引用网址映射时,您无法配置以下网址映射功能。无论您是使用 Sidecar 代理还是无代理 gRPC 服务,均是如此,因为这些特定于 HTTP 协议的功能不适用于 gRPC 协议:

  • queryParameterMatches 个匹配规则
  • urlRewrite 路由操作
  • urlRedirect 路由操作
  • corsPolicy 操作

后端服务限制

带有边车代理的无代理 gRPC 服务不支持以下后端服务功能:

  • localityLbPolicy,但 LEAST_REQUEST(仅限 Java 客户端)、ROUND_ROBINRING_HASH 除外
  • sessionAffinityHEADER_FIELDNONE 除外
  • consistentHashhttpHeaderNameminimumRingSize 字段除外)
  • affinityCookieTtlSec
  • timeoutSec;请改用 maxStreamDuration
  • circuitBreakersmaxRequests 字段除外)

请注意,如果配置了不受支持的值,则 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 服务绑定到后端服务时,您无法对该后端服务配置健康检查。

后续步骤