无代理 gRPC 限制

本文档介绍适用于 Cloud Service Mesh 的限制, 无代理 gRPC 应用。如需了解限制,请参阅配额和限制

转发规则、网址映射和目标代理的限制仅适用于 Cloud Service Mesh 与 Google Cloud 负载均衡 API。

一般限制

具有无代理 gRPC 应用的 Cloud Service Mesh 的限制包括:

  • 您无法在 Google Cloud 控制台中使用 gRPC 协议配置后端服务和路由规则映射。对于这些资源,Google Cloud 控制台处于只读状态。

  • 无代理 gRPC 支持端点发现、路由、负载均衡、负载报告以及许多高级流量管理功能。

    • 如需了解支持某些高级流量管理功能所需的最低 gRPC 版本,请参阅支持的 gRPC 版本和语言

    • 适用于需要不受支持的高级流量的 gRPC 应用 管理功能,请使用 DNS 名称解析器而非 xDS 解析器 并使用 Cloud Service Mesh 支持的 Sidecar 代理进行部署。 在目标 gRPC 代理中,将 validateForProxyless 字段设置为 FALSE 以便您可以配置 gRPC 尚不支持但 Cloud Service Mesh 中可用的所有功能。

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

    • Cloud Service Mesh 提供 位置 - 一个实例组或一个网络端点组 (NEG) - 发送到 gRPC 客户端。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 服务(使用 Sidecar 代理)不支持以下后端服务功能:

  • localityLbPolicyLEAST_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 服务绑定到后端时 服务,则无法对该后端服务配置健康检查。

后续步骤