Información general
Puedes controlar cómo fluye el tráfico de red en tu clúster de GKE con la función de dirección de servicios de GKE. Puede definir reglas para dirigir tipos específicos de tráfico a las funciones de red que haya implementado en su clúster. La dirección de servicios de GKE es similar al enrutamiento basado en políticas, donde se anula la ruta normal del tráfico de red.
Terminología y conceptos
En esta página se utilizan los siguientes conceptos:
Función de servicio (SF)
Una función de servicio es un componente de software que trabaja con los paquetes de datos recibidos. Una capa de servicio puede operar en cualquier capa del modelo OSI a partir de la capa 2 (capa de enlace de datos).
Las funciones de servicio se pueden clasificar en las siguientes categorías:
- Cortafuegos para la seguridad
- Proxies para controlar el acceso
- Aceleración de WAN para mejorar la velocidad.
- Inspección profunda de paquetes (DPI) para analizar el contenido
- Interceptación legal (LI) para la vigilancia y la investigación
- Traductor de direcciones de red (NAT) para direcciones IP privadas y públicas
- HTTP para el enriquecimiento de encabezados
- Balanceadores de carga para distribuir el tráfico de forma eficiente
Entre las terminologías alternativas de las funciones de servicio se incluyen las siguientes:
- Electrodomésticos con contenedores
- Dispositivos virtuales
- Funciones de red virtualizadas (NFVs)
- Funciones de red en contenedores (CNFs)
- Funciones de red nativas de la nube (CNFs)
En Service Steering, un objeto Service representa una función de servicio (SF).
Cadena de funciones de servicio (SFC)
Una cadena de funciones de servicio (SFC) es una serie de funciones de servicio, como cortafuegos, proxies o balanceadores de carga, que se vinculan para procesar el tráfico de red en un orden específico. Esta cadena funciona como una canalización, donde cada función de servicio realiza una tarea concreta en el tráfico antes de pasarlo a la siguiente función.
La cadena de funciones de servicio (SFC) también se denomina cadena de servicio (SC).
En Service Steering, el objeto ServiceFunctionChain
representa una cadena de funciones de servicio (SFC).
Una función de servicio opera de forma independiente a cualquier cadena de funciones de servicio. Por lo general, la función de servicio no sabe de qué cadenas de funciones de servicio forma parte.
Dirección de servicios
El direccionamiento de servicios enruta los paquetes a la función de servicio seleccionada de forma totalmente transparente para el origen y el destino. Este concepto se conoce a veces como "enrutamiento basado en políticas", "redirección de tráfico" o "reenvío de funciones de servicio". Service Steering consigue el enrutamiento transparente mediante la encapsulación Geneve + NSH (consulta RFC 8926, RFC 8300 y Borrador de IETF de Geneve + NSH).
Estas son algunas de las características importantes de la dirección de servicios:
- Balanceo de carga entre los pods de backend de una función de servicio: las funciones de servicio suelen ejecutarse en varios pods para mejorar la escalabilidad y la fiabilidad. Service Steering distribuye el tráfico de red entrante de forma uniforme entre estos pods para evitar que se sobrecargue alguno de ellos.
- Compatibilidad con la afinidad de flujo de quíntupla (todos los saltos intermedios deben ser estables para un flujo determinado): un flujo de quíntupla es una forma de identificar un flujo específico de tráfico de red basado en la dirección IP de origen, el puerto de origen, la dirección IP de destino, el puerto de destino y el protocolo. El direccionamiento de servicios asegura que todos los paquetes de un mismo flujo se dirijan de forma coherente al mismo conjunto de funciones de servicio (saltos).
- Habilitar una ruta de datos de retorno simétrica: una ruta de datos de retorno simétrica significa que el tráfico de respuesta sigue la misma ruta de vuelta a la fuente que el tráfico de solicitud original. Service Steering asegura esta simetría, que es importante para algunos protocolos y aplicaciones de red.
En el caso del tráfico de red que se dirige mediante el servicio, los pods de función de servicio intermedios gestionan todos los paquetes de ese tráfico de red concreto, lo que asegura saltos intermedios coherentes y una ruta predecible. Los mismos pods de función de servicio reciben el tráfico de retorno para asegurar un flujo de tráfico simétrico. Si el tráfico original se envía a un destino del mismo clúster, el tráfico de retorno encontrará automáticamente el camino de vuelta a través de la misma cadena de servicios. Si el tráfico original está fuera del clúster, la función de servicio final de la cadena atrae el tráfico hacia sí misma mediante la traducción de direcciones de red de origen (SNAT) o un proxy, que actúa como intermediario.
Casos prácticos
GKE Service Steering integra el enrutamiento basado en políticas en tus clústeres. Esto permite los siguientes casos prácticos principales:
Servicios de seguridad autogestionados:
Las organizaciones pueden crear su propia infraestructura de seguridad mediante funciones de red en contenedores (CNFs), como cortafuegos virtuales (vFWs), cortafuegos virtuales de nueva generación (vNG-FWs) y sistemas de detección de intrusiones virtuales (vIDSs). El direccionamiento de servicios asegura que el tráfico se enrute a través de estas CNFs antes de llegar a su destino, lo que proporciona una capa de protección y control.
Proveedores de seguridad gestionada (MSPs):
Los proveedores de servicios gestionados pueden usar la función de dirección de servicios de GKE para enrutar tu tráfico a través de sus cadenas de servicios de seguridad basadas en la nube. Esto les permite ofrecer soluciones de seguridad integrales, como pasarelas web seguras (SWGs), SASE (Secure Access Service Edge) y SD-WAN (red de área amplia definida por software).
Telecomunicaciones y redes 5G:
Service Steering gestiona los flujos de tráfico de varias funciones de red en infraestructuras de telecomunicaciones y 5G. Puedes orquestar routers virtuales (vRouters), controladores de borde de sesión virtuales (vSBCs) y funciones de red central 5G para asegurar una gestión eficiente del tráfico, el balanceo de carga y la aplicación de políticas de seguridad o calidad del servicio específicas.
Cómo funciona la dirección de servicios
En esta sección se describe cómo funcionan los distintos componentes de Service Steering.
Función de servicio
Identifica el flujo de tráfico de red: GKE Service Steering identifica cada conexión de red mediante un ID de flujo único, un hash de quíntupla de la dirección IP de origen, el puerto de origen, la dirección IP de destino, el puerto de destino y el protocolo del paquete.
Asegura la afinidad de flujo: Service Steering asegura la afinidad de flujo dirigiendo todos los paquetes con el mismo ID de flujo a través de la misma ruta de funciones de servicio (SFs).
Modifica los paquetes para crear nuevos flujos: si una función de servicio modifica alguno de los campos de la tupla de 5 elementos de un paquete. Por ejemplo, si NAT cambia la dirección IP de origen, se crea un nuevo flujo.
Selecciona el tráfico de los nuevos flujos: el proceso de selección de tráfico evalúa el nuevo flujo para determinar su ruta a través de los
Service Functions
restantes, por lo que puede tomar una ruta diferente a la del flujo original.Gestiona los proxies y los NATs como dos flujos: el tráfico a través de proxies o NATs se considera como dos flujos independientes: desde la fuente al proxy o NAT, y desde el proxy o NAT al destino. Service Steering no garantiza la misma ruta para estos dos flujos.
Valida la dirección de origen: los SFs siempre están sujetos a la validación de la dirección de origen, incluso en el caso del tráfico que no se dirige mediante la dirección de servicio. Si un ServiceFunction inicia un nuevo flujo con una dirección IP de origen que no coincide, esos paquetes se descartarán a menos que se permitan explícitamente.
Mantiene la transparencia de la encapsulación: Service Steering usa la encapsulación Geneve para el tráfico entre SFs, pero los pods de funciones de servicio no lo saben. Los paquetes se desencapsulan antes de entrar en el pod, lo que simplifica el desarrollo de funciones de servicio.
Conexiones actuales
Cuando creas un TrafficSelector
, Service Steering lo aplica automáticamente a las conexiones que coincidan con los criterios del selector. Redirige los paquetes de estas conexiones a las funciones de servicio correspondientes. La propia función de servicio se encarga de gestionar estas conexiones en curso. Un enfoque habitual es descartar los paquetes y confiar en que el cliente inicie una nueva conexión, que se integra perfectamente en la cadena de servicios desde el principio.
Ciclo de vida de los recursos
Los recursos de TrafficSelector
y ServiceFunctionChain
se eliminan inmediatamente después de que se marquen para su eliminación. No hay webhooks ni finalizadores que impidan o retrasen la eliminación de recursos.
Tráfico de pod a servicio
Service Steering selecciona el tráfico después de resolver la dirección IP virtual del servicio. El tráfico dirigido a un servicio mediante su ClusterIP se puede seleccionar para la dirección de servicios si la dirección IP del pod de destino se encuentra dentro del CIDR especificado en el campo .egress.to.ipBlock
después de que se resuelva la dirección IP virtual.
Implementación de NetworkPolicy
La dirección de servicios no elude NetworkPolicy
. La política de salida del pod de origen y la política de entrada del pod de destino se siguen aplicando al tráfico seleccionado para la dirección de servicios. Sin embargo, no está sujeta a la NetworkPolicy
en la entrada o salida de una función de servicio. Esto se debe a que las reglas de entrada o salida de NetworkPolicy
están bien definidas para los pods de origen y destino, pero no para los reenviadores de paquetes.
Ventajas
La adopción de GKE Service Steering, junto con la transición a tecnologías nativas de la nube, ofrece las siguientes ventajas:
- Oferta de Marketplace: los terceros pueden ofrecer su producto contenedorizado en Google Cloud Marketplace y usar las APIs de Service Steering. Pueden proporcionar una guía de despliegue basada en la API integrada de Kubernetes proporcionada y gestionada por GKE.
- Granularidad de Kubernetes: puedes controlar el tráfico de tu clúster de Kubernetes. Puede clasificar el tráfico que quiera dirigir. Puedes seleccionar las cargas de trabajo en las que quieras aplicar Service Steering de forma selectiva.
- Bidireccionalidad: la función de dirección de servicios de GKE es bidireccional. Esto significa que, en un flujo determinado, la ruta de retorno es simétrica a la ruta de avance. Esto es importante cuando las funciones de servicio (SFs) se implementan como un grupo de réplicas. Asegúrate de que el mismo flujo pase por el mismo conjunto de réplicas para mantener el estado.
- Compatibilidad con varias redes: la mayoría de las funciones de servicio requieren varias interfaces de pod para separar el plano de datos del plano de control y gestión. Algunas funciones de servicio tienen varias interfaces como parte de su arquitectura. La función de direccionamiento de servicios de GKE incluye la integración con la función de varias redes en pods. De esta forma, un usuario puede crear un Service Steering en una red de pods específica.
- Envío de paquetes sin procesar a la aplicación: Service Steering de GKE encapsula el paquete original y lo envía directamente al pod. De esta forma, no tienes que hacer ninguna desencapsulación y tu aplicación puede actuar directamente sobre el paquete original.