En esta arquitectura de referencia, se describen los beneficios de exponer las aplicaciones de forma externa a través de las puertas de enlace de Google Kubernetes Engine (GKE) que se ejecutan en varios clústeres de GKE dentro de una malla de servicios. Esta guía está dirigida a los administradores de la plataforma.
Puedes aumentar la resiliencia y la redundancia de los servicios si implementas las aplicaciones de manera coherente en varios clústeres de GKE, en los que cada clúster se convierte en un dominio con fallas adicional. Por ejemplo, un servicio con un objetivo de nivel de servicio (SLO) del 99.9% cuando se implementa en un solo clúster de GKE alcanza un SLO del 99.9999% cuando se implementa en dos clústeres de GKE (1 - (0.001) 2). También puedes proporcionar a los usuarios una experiencia en la que las solicitudes entrantes se dirijan de forma automática a la puerta de enlace de entrada de la malla menos latente y disponible.
Si te interesan los beneficios de exponer las aplicaciones habilitadas para la malla de servicios que se ejecutan en un solo clúster, consulta Del perímetro a la malla: Exposición de aplicaciones de la malla de servicios a través de GKE Gateway.
Arquitectura
En el siguiente diagrama de arquitectura, se muestra cómo fluyen los datos a través de la entrada de la nube y de la malla:
En el diagrama anterior, se muestran las siguientes situaciones de flujo de datos:
- Desde el cliente que finaliza en el balanceador de cargas de Google Cloud con su propio certificado TLS administrado por Google
- Desde el balanceador de cargas de Google Cloud hasta el proxy de entrada de la malla mediante su propio certificado TLS autofirmado
- Desde el proxy de la puerta de enlace de entrada de la malla hasta los proxies de sidecar de la carga de trabajo mediante la mTLS habilitada para la malla de servicios
Esta arquitectura de referencia contiene las siguientes dos capas de entrada:
- Entrada de la nube: en esta arquitectura de referencia, debes usar la API de Gateway de Kubernetes (y el controlador de GKE Gateway) para programar la capa de balanceo de cargas de HTTP(S) externa de varios clústeres. El balanceador de cargas comprueba los proxies de entrada de la malla en varias regiones y envía solicitudes al clúster en buen estado más cercano. También implementa una política de seguridad de Google Cloud Armor.
- Entrada de la malla: en la malla, debes realizar verificaciones de estado directamente en los backends, de modo que puedas ejecutar el balanceo de cargas y la administración de tráfico de forma local.
Cuando se usan las capas de entrada juntas, existen roles complementarios para cada capa. Para lograr los siguientes objetivos, Google Cloud optimiza las funciones más apropiadas de la capa de entrada de la nube y de la capa de entrada de la malla:
- Proporciona una latencia baja
- Aumenta la disponibilidad.
- Usa las funciones de seguridad de la capa de entrada de la nube.
- Usa las funciones de seguridad, autorización y observabilidad de la capa de entrada de la malla.
Entrada de la nube
Cuando se combina con la entrada de la malla, es más conveniente usar la capa de entrada de la nube para la seguridad perimetral y el balanceo de cargas global. Debido a que la capa de entrada de la nube está integrada en los siguientes servicios, se destaca en la ejecución de esos servicios en el perímetro, fuera de la malla:
- Protección contra DDoS
- Firewalls de Cloud
- Autenticación y autorización
- Encriptación
La lógica de enrutamiento suele ser sencilla en la capa de entrada de la nube. Sin embargo, puede ser más complejo para entornos de varios clústeres y multirregionales.
Debido a la función crítica de los balanceadores de cargas orientados a Internet, es probable que la capa de entrada de la nube se administre mediante un equipo de plataforma que tenga un control exclusivo sobre cómo se exponen y protegen las aplicaciones en Internet. Este control hace que esta capa sea menos flexible y dinámica que una infraestructura controlada por desarrolladores. Ten en cuenta estos factores cuando determines los derechos de acceso de administrador a esta capa y cómo proporcionas ese acceso.
Entrada de la malla
Cuando se combina con la entrada de la nube, la capa de entrada de la malla proporciona un punto de entrada para que el tráfico ingrese a la malla de servicios. La capa también proporciona mTLS de backend, políticas de autorización y coincidencia flexible de regex.
Implementar el balanceo de cargas de aplicaciones externo fuera de la malla con una capa de entrada de la malla ofrece ventajas significativas, en especial para la administración del tráfico de Internet. Aunque la malla de servicios y las puertas de enlace de entrada de Istio proporcionan enrutamiento avanzado y administración del tráfico en la malla, algunas funciones se entregan mejor en el perímetro de la red. Aprovechar las herramientas de redes del perímetro de Internet a través del balanceador de cargas de aplicaciones externo de Google Cloud puede proporcionar importantes beneficios de rendimiento, confiabilidad o seguridad en la entrada basada en la malla.
Productos y funciones utilizados
En la siguiente lista, se resumen todos los productos y las funciones de Google Cloud que usa esta arquitectura de referencia:
- GKE Enterprise: Un servicio de Kubernetes administrado que puedes usar para implementar y operar aplicaciones alojadas en contenedores a gran escala en la infraestructura de Google Para los fines de esta arquitectura de referencia, cada uno de los clústeres de GKE que entregan una aplicación debe estar en la misma flota.
- Flotas y Gateways de varios clústeres: Servicios que se usan para crear aplicaciones en contenedores a escala empresarial con la infraestructura de Google y GKE Enterprise.
- Google Cloud Armor: Un servicio que te ayuda a proteger tus aplicaciones y sitios web contra ataques web y de denegación del servicio.
- Cloud Service Mesh: una malla de servicios completamente administrada basada en Istio y Envoy
- Balanceador de cargas de aplicaciones: Un balanceador de cargas L7 basado en proxy que te permite ejecutar y escalar tus servicios.
- Administrador de certificados: Un servicio que te permite adquirir y administrar certificados TLS para usar con Cloud Load Balancing.
Flotas
Para administrar implementaciones de varios clústeres, GKE Enterprise y Google Cloud usan flotas para agrupar y normalizar clústeres de Kubernetes de forma lógica.
El uso de una o más flotas puede ayudarte a mejorar la administración de clústeres individuales a grupos completos de clústeres. Para reducir las dificultades de la administración de clústeres, usa el principio de flota de similitud de espacio de nombres. Para cada clúster de GKE de una flota, asegúrate de configurar todas las puertas de enlace de entrada de la malla de la misma manera.
Además, implementa servicios de aplicación de manera coherente para que el lector de balanceo de servicios en la cuenta de espacio de nombres se relacione con un servicio idéntico en cada clúster de GKE en la flota. Los principios de similitud y confianza que se suponen dentro de una flota son los que te permiten usar la gama completa de funciones habilitadas para la flota en GKE Enterprise y Google Cloud.
Las reglas de enrutamiento este-oeste dentro de la malla de servicios y las políticas de tráfico se controlan en la capa de entrada de la malla. La capa de entrada de la malla se implementa en cada clúster de GKE de la flota. Configura cada puerta de enlace de entrada de la malla de la misma manera y cumple con el principio de similitud de espacio de nombres de la flota.
Aunque hay un solo clúster de configuración para GKE Gateway, debes sincronizar tus opciones de configuración de GKE Gateway en todos los clústeres de GKE de la flota.
Si necesitas nominar un clúster de configuración nuevo, usa ConfigSync. ConfigSync ayuda a garantizar que todas esas opciones de configuración estén sincronizadas en todos los clústeres de GKE de la flota y ayuda a evitar la conciliación con una configuración no actual.
Puerta de enlace de entrada de la malla
En Istio 0.8, se agregó la puerta de enlace de entrada de la malla. La puerta de enlace proporciona un conjunto exclusivo de proxies cuyos puertos están expuestos al tráfico que proviene del exterior de la malla de servicios. Gracias a estos proxies de entrada de la malla, puedes controlar por separado el comportamiento de exposición de red y el comportamiento de enrutamiento de la aplicación.
Los proxies también te permiten aplicar enrutamiento y políticas al tráfico externo a la malla antes de que llegue a un proxy de sidecar de la aplicación. La entrada de la malla define el tratamiento del tráfico cuando llega a un nodo en la malla, pero los componentes externos deben definir cómo llega el tráfico primero a la malla.
Para administrar el tráfico externo, necesitas un balanceador de cargas externo a la malla. Para automatizar la implementación, esta arquitectura de referencia usa Cloud Load Balancing, que se aprovisiona a través de recursos de puerta de enlace de GKE.
Servicios de GKE Gateway y de varios clústeres
Hay muchas formas de proporcionar acceso a las aplicaciones a los clientes que se encuentran fuera del clúster. GKE Gateway es una implementación de la API de Gateway de Kubernetes. GKE Gateway evoluciona y mejora el recurso Ingress.
A medida que implementas recursos de GKE Gateway en tu clúster de GKE, el controlador de GKE Gateway observa los recursos de la API de la puerta de enlace. El controlador concilia los recursos de Cloud Load Balancing para implementar el comportamiento de red especificado por los recursos de Gateway.
Cuando usas la puerta de enlace de GKE, el tipo de balanceador de cargas que usas para exponer aplicaciones a los clientes depende en gran medida de los siguientes factores:
- Si los servicios de backend se encuentran en un solo clúster de GKE o se distribuyen en varios clústeres de GKE (en la misma flota).
- El estado de los clientes (externos o internos).
- Las capacidades necesarias del balanceador de cargas, incluida la capacidad de integrarse a las políticas de seguridad de Google Cloud Armor.
- Los requisitos de intervalo de la malla de servicios. Las mallas de servicios pueden abarcar varios clústeres de GKE o pueden estar incluidas en un solo clúster.
En Gateway, este comportamiento se controla mediante la especificación de la GatewayClass adecuada.
Cuando se hace referencia a clases de puerta de enlace, esas clases que se pueden usar en situaciones de varios clústeres tienen un nombre de clase que termina en -mc
.
En esta arquitectura de referencia, se analiza cómo exponer los servicios de la aplicación de forma externa a través de un balanceador de cargas de aplicaciones externo. Sin embargo, cuando usas la puerta de enlace, también puedes crear un balanceador de cargas de aplicaciones interno regional de varios clústeres.
Para implementar servicios de aplicaciones en situaciones de varios clústeres, puedes definir los componentes del balanceador de cargas de Google Cloud de las siguientes dos maneras:
- Ingress de varios clústeres y recursos de MultiClusterService
- Puerta de enlace de varios clústeres y Servicios de varios clústeres
Si deseas obtener más información sobre estos dos enfoques para implementar servicios de aplicaciones, consulta Elige la API de balanceo de cargas de varios clústeres para GKE.
Ingress de varios clústeres se basa en la creación de recursos MultiClusterService
. La puerta de enlace de varios clústeres se basa en crear recursos ServiceExport
y hacer referencia a recursos ServiceImport
.
Cuando usas una puerta de enlace de varios clústeres, puedes habilitar las capacidades adicionales del balanceador de cargas de Google Cloud subyacente mediante la creación de Políticas. En la guía de implementación asociada con esta arquitectura de referencia, se muestra cómo configurar una política de seguridad de Google Cloud Armor para ayudar a proteger los servicios de backend de las secuencias de comandos entre sitios.
Estos recursos de políticas se orientan a los servicios de backend de la flota que se exponen en varios clústeres. En situaciones de varios clústeres, todas esas políticas deben hacer referencia al recurso ServiceImport
y al grupo de API.
Verificaciones de estado
Una dificultad del uso de dos capas de balanceo de cargas de L7 es la verificación de estado. Debes configurar cada balanceador de cargas para verificar el estado de la siguiente capa. GKE Gateway verifica el estado de los proxies de entrada de la malla, y la malla, a su vez, verifica el estado de los backends de la aplicación.
- Entrada de la nube: en esta arquitectura de referencia, debes configurar el balanceador de cargas de Google Cloud a través de GKE Gateway para verificar el estado de los proxies de entrada de la malla en sus puertos de verificación de estado expuestos. Si un proxy de la malla no funciona o si el clúster, la malla o la región no están disponibles, el balanceador de cargas de Google Cloud detecta esta condición y no envía tráfico al proxy de la malla. En este caso, el tráfico se enrutaría a un proxy de malla alternativo en un clúster o una región de GKE diferente.
- Entrada de la malla: en la aplicación de la malla, debes realizar verificaciones de estado directamente en los backends, de modo que puedas ejecutar el balanceo de cargas y la administración de tráfico de forma local.
Consideraciones del diseño
En esta sección, se proporciona orientación para ayudarte a usar esta arquitectura de referencia para desarrollar una arquitectura que cumpla con tus requisitos específicos de seguridad y cumplimiento, confiabilidad y costo.
Security, privacy, and compliance
El diagrama de arquitectura de este documento contiene varios elementos de seguridad. Los elementos más importantes son la forma de configurar la encriptación y la implementación de certificados. GKE Gateway se integra en el Administrador de certificados para estos fines de seguridad.
Los clientes de Internet se autentican con los certificados públicos y se conectan al balanceador de cargas externo como el primer salto en la nube privada virtual (VPC). Puedes hacer referencia a un Administrador de certificados CertificateMap
en tu definición de puerta de enlace.
El siguiente salto se encuentra entre Google Front End (GFE) y el proxy de entrada de la malla.
Ese salto está encriptado de forma predeterminada.
La encriptación a nivel de la red entre GFE y sus backends se aplica de forma automática. Sin embargo, si tus requisitos de seguridad determinan que el propietario de la plataforma retiene la propiedad de las claves de encriptación, puedes habilitar HTTP/2 con encriptación TLS entre la puerta de entrada del clúster (GFE) y la entrada de la malla (la instancia del proxy de envoy).
Cuando habilitas HTTP/2 con encriptación TLS entre la puerta de enlace del clúster y la entrada de la malla, puedes usar un certificado autofirmado o público para encriptar el tráfico. Puedes usar un certificado autofirmado o público, ya que GFE no se autentica con él. Esta capa adicional de encriptación se demuestra en la guía de implementación asociada con esta arquitectura de referencia.
Para evitar el manejo inadecuado de certificados, no vuelvas a usar certificados públicos. Usa certificados separados para cada balanceador de cargas en la malla de servicios.
Para ayudar a crear entradas de DNS externas y certificados TLS, en la guía de implementación de esta arquitectura de referencia, se usa Cloud Endpoints.
Usar Cloud Endpoints te permite crear un subdominio cloud.goog
disponible de forma externa. En situaciones de nivel empresarial, usa un nombre de dominio más apropiado y crea un registro A que apunte a la dirección IP del balanceador de cargas de aplicaciones global en tu proveedor de servicios de DNS.
Si la malla de servicios que usas exige TLS, se encripta todo el tráfico entre los proxies de sidecar y todo el tráfico a la entrada de la malla. En el diagrama de arquitectura, se ilustra la encriptación HTTPS del cliente al balanceador de cargas de Google Cloud, del balanceador de cargas al proxy de entrada de la malla y del proxy de entrada al proxy de sidecar.
Confiabilidad y resiliencia
Una ventaja principal del patrón de perímetro a malla multirregional y de varios clústeres es que puede usar todas las características de la malla de servicios para el balanceo de cargas este-oeste, como el tráfico entre los servicios de la aplicación.
En esta arquitectura de referencia, se usa una puerta de enlace de GKE de varios clústeres para enrutar el tráfico de entrada de la nube entrante a un clúster de GKE. El sistema selecciona un clúster de GKE según su proximidad al usuario (según la latencia) y su disponibilidad y estado. Cuando el tráfico llega a la puerta de enlace de entrada de Istio (la entrada de la malla), se enruta a los backends adecuados a través de la malla de servicios.
Un enfoque alternativo para controlar el tráfico de este a oeste es mediante servicios de varios clústeres para todos los servicios de aplicaciones implementados en los clústeres de GKE. Cuando se usan servicios de varios clústeres en clústeres de GKE en una flota, los extremos del servicio se recopilan juntos en una ClusterSet
.
Si un servicio necesita llamar a otro servicio, puede orientarse a cualquier extremo en buen estado para el segundo servicio. Debido a que los extremos se eligen de forma rotativa, el extremo seleccionado puede estar en una zona o región diferente.
Una ventaja clave de usar la malla de servicios para el tráfico de este a oeste en lugar de usar servicios de varios clústeres es que la malla de servicios puede usar el balanceo de cargas de localidad.
El balanceo de cargas de localidad no es una función de los servicios de varios clústeres, pero puedes configurarlo a través de una DestinationRule
.
Una vez configurada, una llamada de un servicio a otro primero intenta llegar a un extremo de servicio en la misma zona y, luego, intenta en la misma región que el servicio que realiza la llamada. Por último, la llamada solo se orienta a un extremo en otra región si un extremo de servicio en la misma zona o región no está disponible.
Optimización de costos
Cuando se adopta esta arquitectura de varios clústeres de forma amplia en una empresa, Cloud Service Mesh y la puerta de enlace de varios clústeres se incluyen en Google Kubernetes Engine (GKE) Enterprise Edition. Además, GKE Enterprise incluye muchas funciones que te permiten administrar y administrar clústeres, aplicaciones y otros procesos de GKE a gran escala.
Implementación
Para implementar esta arquitectura, consulta Del perímetro a la malla de varios clústeres: Implementa aplicaciones distribuidas de forma global a través de GKE Gateway y Cloud Service Mesh.
¿Qué sigue?
- Obtén más información sobre las otras funciones que ofrece GKE Gateway que puedes usar con la malla de servicios.
- Obtén más información sobre los distintos tipos de balanceo de cargas en la nube disponibles para GKE.
- Obtén información sobre las características y funciones que ofrece Cloud Service Mesh.
- Para obtener más información sobre las arquitecturas de referencia, los diagramas y las prácticas recomendadas, explora Cloud Architecture Center.
Colaboradores
Autores:
- Alex Mattson | Ingeniero especialista en aplicaciones
- Mark Chilvers | Ingeniero especialista en aplicaciones
Otros colaboradores:
- Abdelfettah Sghiouar | Cloud Developer Advocate
- Arunkumar Jayaraman | Ingeniero principal
- Greg Bray | Ingeniero de Atención al cliente
- Megan Yahya | Gerente de producto
- Paul Revello | Arquitecto de soluciones de nube
- Valavan Rajakumar | Arquitecto empresarial clave
- Maridi Raju Makaraju | Líder de Tecnología de Asistencia