Limitaciones de gRPC sin proxy

En este documento, se describen las limitaciones que se aplican a Cloud Service Mesh con aplicaciones de gRPC sin proxy. Para obtener más información sobre los límites, consulta Cuotas y límites.

Las limitaciones de las reglas de reenvío, los mapas de URL y los proxies de destino solo se aplican a Cloud Service Mesh con las APIs de balanceo de cargas de Google Cloud.

Limitaciones generales

Las limitaciones de Cloud Service Mesh con aplicaciones de gRPC sin proxy incluyen las siguientes:

  • No puedes configurar servicios de backend y mapas de reglas de enrutamiento con el protocolo de gRPC en la consola de Google Cloud. Para estos recursos, la consola de Google Cloud es de solo lectura.

  • gRPC sin proxy es compatible con el descubrimiento de extremos, el enrutamiento, el balanceo de cargas, los informes de carga y muchas características de administración avanzada del tráfico.

    • Si quieres obtener la versión mínima de gRPC necesaria para admitir algunas funciones de la administración avanzada de tráfico, consulta Lenguajes y versiones de gRPC compatibles.

    • Para las aplicaciones de gRPC que necesitan funciones de administración avanzada de tráfico no compatibles, usa el agente de resolución de nombres de DNS en lugar del agente de resolución de xDS y, luego, impleméntalo con proxies de sidecar compatibles con Cloud Service Mesh. En el proxy de gRPC de destino, configura el campo validateForProxyless en FALSE para que puedas configurar las funciones que aún no son compatibles con gRPC, pero que están disponibles en Cloud Service Mesh con el uso de proxies de sidecar.

  • gRPC sin proxy solo admite políticas de balanceo de cargas de anillo de hash y round robin. Otros algoritmos de balanceo de cargas no son compatibles.

    • Cloud Service Mesh proporciona una lista priorizada de localidades (un grupo de instancias o un grupo de extremos de red [NEG]) al cliente de gRPC. Cloud Service Mesh calcula esta lista en función de la zona disponible más cercana, su capacidad y el modo de balanceo del servicio de backend.
    • Para una solicitud en particular, el cliente de gRPC elige una o más localidades según la prioridad y el peso, y realiza un balanceo de cargas basado en anillo de hash y en round robin para los backends dentro de esas localidades.
  • La conmutación por error de una zona (localidad) a otra comienza cuando la capacidad de la zona actual es inferior al 50%. No puedes configurar este umbral.

  • En algunos casos, los comandos de configuración relacionados con un proxy de gRPC de destino y una regla de reenvío que hacen referencia a un proxy de gRPC de destino pueden tardar hasta un minuto.

  • Los NEG de conectividad híbrida (NEG de NON_GCP_PRIVATE_IP_PORT) no son compatibles con los clientes de gRPC sin proxy.

Limitaciones de mapas de URL

Las siguientes funciones de administración de tráfico de mapas de URL son compatibles con los servicios de gRPC sin proxy.

Funciones compatibles en pathMatcher de hostRules:

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

Las siguientes limitaciones de mapas de URL se aplican cuando usas servicios de gRPC sin proxy:

  • No se admiten los caracteres comodín en las reglas de host y las reglas predeterminadas de un mapa de URL, incluida la regla de host * de un mapa de URL creada de forma implícita. Esas entradas se omiten cuando se realiza la coincidencia del host.

  • Las siguientes funciones no son compatibles:

    • queryParameterMatches en routeRules
    • Acciones de ruta headerAction, urlRewrite, requestMirrorPolicy, corsPolicy y urlRedirect
    • Acción de ruta timeout; usa maxStreamDuration en lugar de timeout
    • perTryTimeout en retryPolicy
    • retryConditions en retryPolicy, excepto una o más condiciones de cancelled, deadline-exceeded, internal, resource-exhausted y unavailable
    • Los servicios de gRPC sin proxy no usan defaultService, defaultRouteAction, defaultUrlRedirect y headerAction del mapa de URL. Si no se encuentra una regla de host que coincida cuando un cliente de gRPC sin proxy busca un nombre de servicio, la malla de servicios de Cloud muestra un error de búsqueda de nombre en lugar de usar el servicio o la acción predeterminados del mapa de URL.
    • headerAction en weightedBackendServices
  • En las reglas de coincidencia de encabezado de mapa de URL, solo se admiten los metadatos personalizados no binarios especificados por el usuario y el encabezado content-type. Los siguientes encabezados de nivel de transporte no se pueden usar en las reglas de coincidencia de encabezado: :authority, :method, :path, :scheme, user-agent, accept-encoding, content-encoding, grpc-accept-encoding, grpc-encoding, grpc-previous-rpc-attempts, grpc-tags-bin, grpc-timeout y grpc-trace-bin.

  • Cuando actualizas una regla de host de mapa de URL para cambiar de un servicio de backend a otro, puede que el tráfico se interrumpa de manera temporal mientras se envía la configuración nueva a los clientes. Para evitar esta limitación, configura la división del tráfico con servicios de backend ponderados. Después de configurar la división del tráfico, cambia con lentitud el tráfico del servicio de backend anterior al servicio de backend nuevo.

Limitaciones del proxy de gRPC de destino

Cuando un proxy de gRPC de destino hace referencia a un mapa de URL, no puedes configurar las siguientes funciones del mapa de URL. Esto se aplica si usas un proxy de sidecar o un servicio de gRPC sin proxy porque estas funciones específicas del protocolo HTTP no se aplican al protocolo de gRPC:

  • queryParameterMatches regla de coincidencia
  • Acción de ruta urlRewrite
  • Acción de ruta urlRedirect
  • Acción corsPolicy

Limitaciones del servicio de backend

Las siguientes funciones del servicio de backend no son compatibles con los servicios de gRPC sin proxy con un proxy de sidecar:

  • localityLbPolicy, excepto LEAST_REQUEST (solo con clientes Java), ROUND_ROBIN y RING_HASH
  • sessionAffinity, excepto HEADER_FIELD y NONE
  • consistentHash, excepto los campos httpHeaderName y minimumRingSize
  • affinityCookieTtlSec
  • timeoutSec; Utiliza maxStreamDuration en lugar de esta función.
  • circuitBreakers, excepto el campo maxRequests

Ten en cuenta que un cliente de gRPC generará un NACK en la configuración de Cloud Service Mesh cuando se configuren valores no compatibles. Esto hará que el cliente rechace la configuración de todos los servicios de backend porque, por el momento, el protocolo xDS requiere que se rechacen todos los recursos en una respuesta determinada, en lugar de solo rechazar un recurso individual de la respuesta. Esto hará que el canal del cliente entre en estado de error transitorio hasta que se corrija la configuración. Debido a esta limitación, debes asegurarte de que todos los clientes admitan el valor requerido antes de configurar una función para un servicio. Por ejemplo, si cambias la política ROUND_ROBIN a RING_HASH, debes asegurarte de que todos los clientes se actualicen a una versión compatible con RING_HASH.

Limitaciones de la administración del tráfico avanzada

Con Cloud Service Mesh, no puedes configurar algunas funciones avanzadas de administración de tráfico para servicios de gRPC sin proxy. Para conocer las funciones compatibles, consulta lo siguiente:

Limitaciones con el Directorio de servicios

  • El Directorio de servicios y Cloud Service Mesh no garantizan la accesibilidad de la red para los clientes.
  • Un servicio de backend solo puede hacer referencia a uno de los siguientes elementos:

    • Grupo de instancias administrado o grupo de instancias no administrado
    • Grupo de extremos de red
    • Vinculaciones del servicio
  • Los servicios del Directorio de servicios solo se pueden usar con servicios de backend globales con load-balancing-scheme=INTERNAL_SELF_MANAGED.

  • Se puede borrar un servicio del Directorio de servicios al que hace referencia una vinculación del servicio. Si se borra el servicio subyacente del Directorio de servicios al que se adjunta el servicio de backend, las aplicaciones que usan Cloud Service Mesh no pueden enviar tráfico a este servicio y, por lo tanto, las solicitudes fallan. Consulta Observabilidad y depuración para conocer las prácticas recomendadas.

  • Cuando vinculas un servicio del Directorio de servicios a un servicio de backend, no puedes configurar una verificación de estado en ese servicio de backend.

¿Qué sigue?