Descripción general de las APIs de enrutamiento de servicios de Cloud Service Mesh

Este documento está dirigido a administradores de mallas o plataformas y a desarrolladores que tienen un nivel intermedio a avanzado de familiaridad Conceptos de Cloud Service Mesh y malla de servicios, y quiénes implementan la Malla de servicios de Cloud en Compute Engine con instancias de VM. Este documento se aplica a con clientes de Envoy y gRPC. Para obtener más información Conceptos de Cloud Service Mesh, consulta la descripción general.

Cloud Service Mesh proporciona capacidades de redes de servicios a tu aplicaciones, incluida la administración avanzada del tráfico, la observabilidad y seguridad. Sin embargo, configurar y operar una malla de servicios es una tarea compleja para los administradores de malla y los desarrolladores de servicios.

En este documento, se describen las APIs de enrutamiento de servicios para configurar la malla de servicios en la nube. Estas APIs están diseñadas para simplificar y mejorar tu de configuración de malla general.

El modelo de enrutamiento de servicios usa recursos de API llamados Mesh, Gateway y Route. Estos recursos proporcionan una configuración contextualmente relevante la experiencia cuando defines tu plano de control de redes de servicios.

En este documento se presentan los siguientes recursos y el modelo de API de enrutamiento de servicios:

  • Meshrecurso
    • Administración de tráfico de servicio a servicio (de este a oeste) y configuración de seguridad para proxies de sidecar de Envoy y clientes de gRPC sin proxy.
  • Gatewayrecurso

    • Administración del tráfico y configuración de seguridad para proxies de Envoy que actúan como puertas de enlace de entrada, lo que permite que los clientes externos se conecten a la malla de servicios (de norte a sur).
  • Recursos Route con los siguientes tipos:

La consola de Google Cloud no es compatible con el enrutamiento de servicios APIs Debes implementar estos recursos de API con Google Cloud CLI o APIs de REST.

Casos de uso y beneficios

Las APIs de enrutamiento de servicios te permiten configurar Cloud Service Mesh las implementaciones de proxy de Envoy y gRPC sin proxy. El modelo de la API de Service Enrutamiento permite varios beneficios clave.

En el siguiente diagrama, un recurso Mesh conecta dos servicios de la malla de servicios. Los dos recursos HTTPRoute configuran el enrutamiento. La malla administrador de plataforma gestiona el recurso Mesh, y los dos propietarios del servicio crean el de enrutamiento de los servicios.

Tráfico de servicio a servicio de este a oeste en una malla de servicios
Tráfico de servicio a servicio de oeste a servicio en una malla de servicios (haz clic para ampliar)

El diseño de una API orientada a los roles permite una separación clara de las responsabilidades

Las APIs de enrutamiento de servicios te permiten separar la configuración de malla de seguridad en función de los roles de la organización:

  • Los administradores de malla pueden definir la malla lógica y la infraestructura de la puerta de enlace de entrada.
  • Los propietarios de los servicios (desarrolladores de aplicaciones) pueden definir patrones de acceso para sus servicios de manera independiente. También pueden definir y aplicar políticas de administración de tráfico para sus servicios.

En el siguiente diagrama, Cloud Load Balancing y un recurso Gateway proporcionan una puerta de enlace de entrada para el tráfico que ingresa a la malla desde un cliente que no está en la malla. El administrador de malla configura y administra el recurso Gateway, mientras que los propietarios de servicios configuran y administran sus propios servicios y el enrutamiento de tráfico.

Tráfico de norte a sur en la malla a través de una puerta de enlace
Tráfico de norte a sur en la malla a través de una puerta de enlace (haz clic para ampliar)

Confiabilidad mejorada con el modelo de servicio automático

Las APIs de enrutamiento de servicio usan recursos por protocolo y por ruta que se pueden que están configurados y son propiedad de propietarios de servicios independientes. Este enfoque tiene varios algunas ventajas clave.

  • Los propietarios del servicio tienen autonomía sobre cómo quieren configurar y la administración de tráfico para sus servicios.
  • La actualización de un recurso Route no afecta a otros recursos Route en la malla. El proceso de actualización es más confiable, ya que los propietarios del servicio administrar pequeñas configuraciones.
  • El propietario del servicio que es responsable del nombre de host o el servicio de destino posee cada recurso Route.
  • Los propietarios del servicio no tienen que depender de los administradores de la malla para la actualización. de alto rendimiento.

Habilita una malla de servicios que abarque varios proyectos en entornos de VPC compartida

El modelo de la API de enrutamiento de servicios permite que los propietarios del servicio participen en una malla compartida infraestructura mediante una VPC compartida y otros medios de conectividad, mantienen un control independiente sobre sus servicios. Por ejemplo, los propietarios de servicios pueden definir los recursos Route en sus propios proyectos. Los administradores de la plataforma pueden definir un Mesh en un proyecto host administrado de forma central y, luego, otorgar permisos de IAM a los propietarios de servicio para conectar sus recursos Route a una Mesh o Gateway compartida. En el siguiente diagrama, se muestra un ejemplo con una VPC compartida.

Referencia entre proyectos con VPC compartida
Referencia entre proyectos con VPC compartida (haz clic para ampliar)

Las APIs de enrutamiento de servicios también permiten conectar a los clientes de la malla de servicios a diferentes redes con intercambio de tráfico entre redes de VPC.

Enrutamiento del tráfico según el indicador de nombre del servidor

El recurso TLSRoute te permite enrutar el tráfico encriptado con TLS según la indicación del nombre del servidor (SNI) en el protocolo de enlace TLS. Puedes configurar el tráfico de TLS para que se enrute a los servicios de backend correspondientes si configuras la coincidencia de SNI en el recurso TLSRoute. En estas implementaciones, los proxies solo enrutan el tráfico y la sesión de TLS se finaliza en la instancia de backend de destino.

El recurso TLSRoute solo es compatible con los proxies de Envoy que se implementan como proxies de sidecar o puertas de enlace.

Recurso TLSRoute conectado a un recurso Mesh

La implementación que se muestra en el siguiente diagrama enruta cualquier tráfico de malla de servicios en el que la extensión de SNI tiene el valor service1 para el servicio de backend service1. Además, el tráfico de la malla de servicios en el que la extensión de SNI tenga el valor service2 se enruta al servicio de backend service2. El valor de la extensión de SNI y el nombre del servicio de backend son independientes entre sí.

Recurso TLSRoute y recurso Mesh
El recurso TLSRoute y el recurso Mesh (haz clic para ampliar)

Recurso TLSRoute conectado a un recurso Gateway

La implementación que se muestra en el siguiente diagrama enruta cualquier tráfico entrante al recurso Gateway en el que la extensión de SNI tenga el valor serviceA al servicio de backend serviceA. Además, cualquier tráfico entrante a Gateway en el que la extensión SNI tenga el valor serviceB se enruta al servicio de backend serviceB. El valor de la extensión de SNI y el nombre del servicio de backend son independientes entre sí. El valor de la extensión de SNI y el encabezado en las solicitudes HTTP también son independientes.

El recurso Gateway no finaliza la conexión TLS en el proxy Envoy de Gateway. En cambio, la conexión TLS finaliza en el servicio de backend correspondiente. El Gateway no puede inspeccionar información encriptada en la capa TLS, excepto ver ClientHello, que contiene una extensión de SNI de texto sin formato. La Gateway realiza la transferencia de TLS en este modo. Ten en cuenta que ClientHello encriptado no es compatible.

Recurso TLSRoute y recurso Gateway
El recurso TLSRoute y el recurso Gateway (haz clic para ampliar)

Compatibilidad principal con gRPC

Puedes configurar clientes de gRPC sin proxy con los atributos principales de gRPC. como la coincidencia por método.

División del tráfico para el tráfico de TCP

Puedes implementar la división de tráfico basada en el peso para el tráfico de TCP múltiples servicios de backend. Puedes configurar patrones como lanzamientos de versión canary (azul-verde) cuando actualizas tu servicio. La división del tráfico también te permite migrar el tráfico de forma controlada sin tiempo de inactividad.

Intercepción del tráfico

Cuando usas los recursos Mesh y Gateway de la API de Service Enrutamiento, todo el tráfico se intercepta automáticamente. Si deseas obtener más información, consulta Opciones para la configuración de VM de Compute Engine con implementación automática de Envoy.

Arquitectura y recursos

En esta sección, se describe el modelo de API de enrutamiento de servicios y sus recursos, comprenderás cómo funcionan juntos los recursos de la API de Service Enrutamiento.

Mesh recurso

El recurso Mesh representa una instancia de una malla de servicios. Se usa para crear una malla de servicios lógica en tu proyecto. Cada recurso Mesh debe tener un nombre único en el proyecto. Después de crear un recurso Mesh, su nombre no se puede modificar.

Recurso de API de malla con implementaciones de gRPC sin proxy y sidecar de Envoy
Mesh Recurso de API con implementaciones de gRPC sin proxy y sidecar de Envoy (haz clic para ampliar)

Se hace referencia al recurso Mesh en el recurso Route a fin de agregar rutas para los servicios que forman parte de la malla.

Los clientes con proxy de Envoy y gRPC sin proxy reciben la configuración de Cloud Service Mesh une la malla de servicios que identifica Mesh nombre del recurso. El recurso Mesh admite las siguientes implementaciones de plano de datos:

  • Envoy que se ejecuta junto con la aplicación como proxies de sidecar
  • Clientes gRPC sin proxy
  • Combinación clientes de gRPC sin proxy y sidecar de Envoy

Route recurso

El recurso Route se usa para configurar el enrutamiento a los servicios. Existen cuatro tipos diferentes de recursos de API Route. Definen el protocolo que se usa para enrutar el tráfico a un servicio de backend.

  • HTTPRoute
  • GRPCRoute
  • TCPRoute
  • TLSRoute

La API no contiene una API de Route textual. Los únicos recursos de API que se pueden configurar son HTTPRoute, GRPCRoute, TCPRoute y TLSRoute.

El recurso Route hace referencia a uno o más recursos Mesh y Gateway para agregar las rutas que forman parte de la configuración Mesh o Gateway correspondiente. Un recurso Route puede hacer referencia a recursos Gateway y Mesh.

El recurso Route también hace referencia a uno o más. servicio de backend de Google Cloud. Los servicios se configuran con la API del servicio de backend. Tú crear un recurso de servicio de backend que apunte a uno o más backends de MIG o NEG

En el siguiente diagrama, se muestran las relaciones entre Mesh, Gateway y y Route, además del recurso de servicio de backend y sus backends.

Recursos de API Route
Recursos de API Route (haz clic para ampliar)

Puedes definir otras capacidades de administración de tráfico en los recursos Route, como el enrutamiento, las modificaciones de encabezado, los tiempos de espera y la división de tráfico basada en el peso. Por ejemplo, en el siguiente diagrama, un recurso HTTPRoute define una división de tráfico del 70% / 30% entre dos servicios de backend.

División de tráfico basada en el peso
División del tráfico basada en el peso (haz clic para ampliar)

Para simplificar la administración de tu malla de servicios, puedes enumerar todos los Route recursos vinculados a un recurso Mesh o Gateway.

TLSRoute recurso

Usa el recurso TLSRoute para enrutar el tráfico TLS a los servicios de backend según los nombres de host de SNI y el nombre de la negociación del protocolo de capa de aplicación (ALPN). La configuración de TLSRoute implica la transferencia de TLS, en la que el proxy de Envoy no finaliza el tráfico de TLS.

El recurso TLSRoute hace referencia a uno o más recursos Mesh y Gateway para agregar las rutas que forman parte de la configuración de la malla o puerta de enlace correspondiente.

El recurso TLSRoute también hace referencia a uno o más recursos de servicio de backend. Los servicios se configuran mediante el recurso de API del servicio de backend.

Gateway recurso

El recurso Gateway se usa para representar proxies de Envoy que actúan como puertas de enlace de entrada, lo que permite que los clientes externos se conecten a la malla de servicios (tráfico de norte a sur). Este recurso tiene puertos de escucha junto con un parámetro scope. El proxy de Envoy que actúa como una puerta de enlace de entrada se vincula a los puertos especificados y a 0.0.0.0, que representa todas las direcciones IP en la VM local. En el siguiente diagrama, se muestran los proxies de Envoy implementados como un servicio de entrada y configurados por el recurso Gateway. En este ejemplo en particular, los proxies de Envoy están configurados para detectar las conexiones entrantes de los clientes en el puerto 80.

El recurso de la API Gateway solo es compatible con el plano de datos del proxy de Envoy. No admite gRPC sin proxy. gRPCRoutes son compatibles con el recurso Gateway, pero el proxy de Envoy enruta el tráfico de gRPC y actúa como un proxy intermedio.

Entrada de la malla de servicios a través de un recurso Gateway.
Entrada de la malla de servicios a través de un recurso Gateway (haz clic para ampliar)
Recurso de puerta de enlace
Recurso Gateway (haz clic para ampliar)

¿Qué son los alcances de Gateway y las configuraciones de Gateway combinadas?

Una instancia de recurso Gateway representa los puertos y la configuración específica del tráfico recibido en esos puertos. El recurso de API Gateway tiene un parámetro, scope, que se usa para agrupar y combinar de forma lógica la configuración de dos o más recursos Gateway.

Por ejemplo, si deseas que los proxies Gateway escuchen en los puertos 80 y 443 para recibir tráfico HTTP y HTTPS respectivamente, crea dos recursos Gateway. Configura un recurso Gateway con el puerto 80 para el tráfico HTTP y el otro con el puerto 443 para el tráfico HTTPS. Asigna el mismo valor al campo scope de cada uno. Cloud Service Mesh combina de forma dinámica los parámetros de configuración individuales de todos Puertas de enlace que tienen el mismo permiso. En el lado del plano de datos, los proxies de Envoy que se ejecutan en el modo de puerta de enlace de entrada también deben presentar el mismo parámetro de permiso a Cloud Service Mesh para recibir la configuración de Gateway. Ten en cuenta que especificas el alcance cuando creas el recurso Gateway y especificas el mismo alcance que el parámetro de arranque para los proxies.

Comportamiento de combinación de recursos de puerta de enlace
Comportamiento de combinación de recursos Gateway (haz clic para ampliar)

Las siguientes son consideraciones clave para el recurso Gateway:

  • El parámetro de alcance Gateway es obligatorio. Especifica el permiso en el recurso Gateway y en la configuración de arranque de los proxies de Envoy incluso cuando solo exista un Gateway.
  • La creación de un recurso Gateway no implementa un servicio con un proxy de Envoy. La implementación del proxy de Envoy es un paso independiente.
  • El recurso Gateway tiene un type que representa el tipo de implementación de entrada. Este campo está reservado para uso futuro. El único valor admitido por el momento es OPEN_MESH, que es el valor predeterminado y no se puede modificar.

Implementaciones de malla con protocolos combinados y planos de datos

Puedes tener una implementación de plano de datos combinada con el proxy de Envoy y gRPC sin proxy en la misma malla. Cuando crees esas implementaciones, ten en cuenta lo siguiente.

  • Las implementaciones de sidecar de Envoy admiten todas las rutas (HTTPRoute, GRPCRoute, TCPRoute y TLSRoute).
  • Las implementaciones de gRPC sin proxy solo son compatibles con GRPCRoute.
  • GRPCRoute se limita a las funciones que solo admiten implementaciones sin proxy de gRPC.

Topologías compatibles en entornos de VPC compartida de varios proyectos

Cloud Service Mesh admite la adición de recursos Route que se definen en otras proyectos a un recurso Mesh o Gateway definido en una administración centralizada en un proyecto final. Los propietarios de servicios autorizados pueden agregar directamente su configuración de enrutamiento de servicio a Mesh o Gateway.

Referencia entre proyectos entre los recursos de malla y de ruta
Referencia entre proyectos entre Mesh y Route (haz clic para agrandar)

En una situación entre proyectos típica, se elige un proyecto (proyecto host o proyecto de administración controlado centralmente) como el proyecto de administración de malla en el que se crea Un recurso Mesh El propietario del proyecto de administración de la malla autoriza Route recursos de otros que hagan referencia al recurso Mesh, lo que permite la configuración de enrutamiento de otros proyectos para que formen parte de la malla. Un plano de datos de malla, ya sea Envoy o gRPC, solicita la configuración del proyecto de administración y recibe una unión de todas de las rutas adjuntas a Mesh. En el caso de una Gateway, las rutas también se combinan en todas las Gateways que usan el mismo alcance.

El proyecto de administración Mesh puede ser cualquier proyecto que elijas. configuración funciona siempre y cuando los proyectos subyacentes tengan VPC conectividad de red, ya sea a través de una VPC compartida o Intercambio de tráfico entre redes de VPC.

Permisos y roles de IAM

Los siguientes son los permisos de IAM que son necesarios para obtener, crear, actualizar, borrar, enumerar y usar de forma segura los recursos Mesh y Route.

  • Los administradores de malla deben tener los permisos networkservices.mesh.*.
  • Los administradores de la puerta de enlace deben tener los permisos networkservices.gateways.*.
  • Los propietarios de servicios deben tener los permisos de networkservices.grpcRoutes.*, networkservices.httpRoutes.* o networkservices.tcpRoutes.*.

Los administradores de la malla deben otorgar el permiso networkservices.mesh.use para que el servicio propietarios para que los propietarios del servicio puedan conectar sus recursos Route a la Mesh recurso. El mismo modelo se aplica a los recursos Gateway.

Para ver todos los permisos de IAM de los recursos de Mesh, ve a la Página de referencia de permisos de IAM y busca meshes.

No se requieren roles predefinidos adicionales. El rol existente predefinido Administrador de la red de Compute (roles/compute.networkAdmin) tiene los permisos networkservices.* de forma predeterminada. Es posible que debas agregar los permisos descritos anteriormente a tus roles personalizados.

Consideraciones y limitaciones

  • La consola de Google Cloud no es compatible con las APIs de enrutamiento de servicios.
  • Usa el Versión 3 de la API de xDS o una fecha posterior.
    • La versión mínima de Envoy es 1.20.0 (ya que las APIs de enrutamiento de servicios son solo compatible con xDS versión 3)
    • La versión del generador de arranque de gRPC debe ser v0.14.0 como mínimo
  • El recurso TLSRoute solo es compatible con los proxies de Envoy que se implementan como proxies de sidecar o puertas de enlace.
  • Solo se admiten las VM de Compute Engine con implementación automática de Envoy y los Pods de GKE con inserción automática de Envoy. No puedes usar la implementación manual con las APIs de enrutamiento de servicios.
  • Las APIs de enrutamiento de servicios no son retrocompatibles con las APIs anteriores.
  • Cuando se conecta un recurso TCPRoute a un recurso Mesh, el puerto que se usa para hacer coincidir el tráfico de TCP no puede usarse a fin de entregar nada, excepto el tráfico que se describe en esta TCPRoute.
    • Por ejemplo, tus implementaciones pueden incluir un recurso TCPRoute que coincida con el puerto “8000” y un recurso HttpRoute. Cuando ambos están conectados al mismo recurso Mesh, el tráfico que enruta el recurso HTTPRoute no puede usar el puerto 8000, incluso cuando las direcciones IP subyacentes son diferentes. Esta limitación proviene de la implementación del proxy de Envoy, que prioriza primero la ruta a la que coincide el puerto.
  • El recurso Gateway no aprovisiona un balanceador de cargas administrado y no crea un servicio de Envoy de forma dinámica.
  • Los Envoy que se implementan de forma automática y funcionan como puertas de enlace de entrada no deben tener el argumento serving_ports en la marca --service-proxy.
  • El Envoy implementado de forma automática no admite la entrega de un número de proyecto diferente del proyecto de la VM.

¿Qué sigue?

  • Para obtener información sobre cómo mostrar una lista de recursos de ruta asociados con una Mesh o Recurso Gateway, consulta Lista de recursos Route. Esta función está en vista previa.
  • Para obtener información sobre las APIs de enrutamiento de servicios, consulta la documentación de las APIs de servicios de red.