Kubernetes es una herramienta poderosa para la gestión de contenedores en la nube, y entender los tipos de servicios que ofrece es fundamental para optimizar la comunicación dentro de los clústeres. A continuación, exploramos los tipos principales de servicios que Kubernetes proporciona, y cuándo es mejor utilizarlos.
¿Qué es el Cluster IP?
El Cluster IP es uno de los servicios base en Kubernetes. Al utilizar Cluster IP, se asigna una dirección IP interna a un servicio, permitiendo que sea accesible solo dentro del clúster de Kubernetes. Es especialmente útil para servicios que no necesitan comunicarse con el exterior, como sucede en aplicaciones como Online Boutique, donde solo el frontend expone su servicio hacia afuera. Los servicios internos se comunican entre sí, como el inventario, moneda y checkout, usando Cluster IP.
¿Cómo funciona el NodePort?
Cuando necesitas que servicios sean accesibles desde fuera del clúster, pero no deseas crear un Load Balancer, la opción NodePort mapea un puerto en cada nodo del clúster a un servicio específico. Las peticiones que llegan a cualquier nodo pueden ser redirigidas a un pod específico mediante reglas de IP Tables configuradas por QProxy. Aunque puede ser menos eficiente que otras soluciones, es adecuado para entornos internos como una Virtual Private Cloud (VPC).
¿Por qué usar Load Balancer?
Para exponer un servicio directamente a la internet, el tipo de servicio Load Balancer es la solución más sencilla. En Google Kubernetes Engine (GKE), esto genera un balanceador de carga de Google Cloud con una IP única, permitiendo dirigir tráfico desde internet a tus servicios. Sin embargo, es importante ser consciente de los costos, ya que cada servicio expuesto con un Load Balancer incurrirá en cargos por la IP y el servicio de equilibrado.
¿Qué es y cómo se utiliza el Ingress?
El Ingress no es en sí un tipo de servicio, sino un recurso que ofrece reglas inteligentes para gestionar el tráfico. Se comporta como un router, permitiendo una entrada única al clúster y es capaz de manejar rutas basadas en encabezados, nombres de host o URLs.
¿Cómo configurar un Ingress Gateway?
Configurar un Ingress Gateway en GKE es un proceso sencillo. Primero, se define el nombre del gateway en los metadatos, lo que será crucial para pasos posteriores. Se utiliza un selector para vincular un puerto específico. El Ingress Gateway también ofrece características avanzadas como SSL y reglas de autorización. Usualmente deberás establecer un wildcard para entornos de demostración o pruebas y especificar servicios virtuales para el enrutado del tráfico.
Las Destination Rules permiten definir políticas sobre cómo se debe gestionar el tráfico hacia un servicio. Esto es útil para realizar despliegues canarios, distribuyendo tráfico entre diferentes versiones de un servicio. Las Destination Rules facilitan especificar reglas sobre cómo y cuánto tráfico debe ir a cada versión.
¿Cómo se monitorean los servicios en Kubernetes?
La observabilidad es clave en la gestión de servicios en Kubernetes. Tools como Anthor Service Mesh proporcionan consolas donde se pueden examinar:
Golden Signals: como la tasa de peticiones, errores, latencias y recursos usados (CPU, memoria, disco).
Gráficas de topología: para visualizar dónde están desplegados los servicios y cómo se interconectan.
Métricas: detalladas, mostrando peticiones por segundo, errores y latencias.
Observando estas métricas, los desarrolladores pueden realizar ajustes críticos en la escalabilidad y asegurarse que el sistema funcione eficientemente incluso ante picos de demanda.
Es fascinante ver cómo estas herramientas permiten un control minucioso y facilitan la gestión a gran escala, brindando mayor seguridad y eficiencia operacional. La invitación es a seguir explorando y experimentando para aprovechar al máximo la infraestructura que Kubernetes y sus herramientas afines ofrecen.
Cluster IP
-Asigna una IP interna al cluster para el servicio
-El servicio no es expuesto a recursos fuera del cluster
NodePort
-Genera un mapeo de cada nodo del cluster a un servicio
-Las peticiones que llegan a un nodo alcanzan los pods en el cluster por reglas de iptables (config. por kube-proxy)
-Las peticiones pueden ser enrutadas a cualquier pod
-Utilizado para exponer servicios dentro de una VPC
Load Balancer
-La manera estándar de exponer tu servicio al internet
-En GKE, genera un balanceador de carga que te da una IP única (dirigir trafico al servicio)
-Cada vez que expones un servicio, se generará una IP por servicio (se vuelve caro)
Ingress
-Actua como router inteligente que sirve como la entrada al cluster
-En GKE, el controlador de Ingress genera un balanceador de carga HTTP(S)
-Es la manera más útil de exponer múltiples servicios usando una IP única
-Más funcionalidades de caja (SSL, Routing, Auth,etc)
Istio Ingress es una característica de Istio que permite exponer servicios de una malla de servicios a Internet o a otros clústeres de Kubernetes. Istio Ingress proporciona un control centralizado sobre el tráfico entrante y saliente de los servicios, lo que facilita la implementación de funciones como el balanceo de carga, la seguridad y la supervisión.
Istio Ingress funciona mediante la creación de un gateway, que es un servidor proxy que recibe y dirige el tráfico entrante y saliente de los servicios de la malla. El gateway se configura mediante un recurso Gateway de Istio, que especifica el protocolo, el puerto y el host que se utilizarán para exponer el servicio.
Istio Ingress admite una variedad de protocolos y configuraciones de seguridad, lo que lo hace adecuado para una amplia gama de aplicaciones. Por ejemplo, Istio Ingress se puede utilizar para exponer un servicio HTTP a Internet, o para exponer un servicio TCP a otro clúster de Kubernetes.
Aquí hay algunos de los beneficios de usar Istio Ingress:
Facilidad de uso: Istio Ingress proporciona un control centralizado sobre el tráfico entrante y saliente de los servicios, lo que facilita la implementación de funciones como el balanceo de carga, la seguridad y la supervisión.
Escalabilidad: Istio Ingress se puede escalar para manejar grandes volúmenes de tráfico.
Seguridad: Istio Ingress admite una variedad de protocolos y configuraciones de seguridad, lo que lo hace adecuado para aplicaciones que requieren un alto nivel de seguridad.
Aquí hay algunos ejemplos de cómo se puede usar Istio Ingress:
Para exponer un servicio web a Internet: Istio Ingress se puede usar para exponer un servicio web a Internet, lo que permite a los usuarios acceder al servicio desde cualquier lugar.
Para exponer un servicio a otro clúster de Kubernetes: Istio Ingress se puede usar para exponer un servicio a otro clúster de Kubernetes, lo que permite a los servicios de diferentes clústeres comunicarse entre sí.
Para implementar un balanceador de carga: Istio Ingress se puede usar para implementar un balanceador de carga, lo que distribuye el tráfico entrante entre varios pods de un servicio.
Para obtener más información sobre Istio Ingress, consulte la documentación de Istio.
Increíble 🤟
Me encantó esta clase, actualmente uso microservicios pero no entendía la parte del yaml y las etiquetas, adicional a ello había hecho un laboratorio en https://www.qwiklabs.com/ para entender los SLO, pero con esta clase lo entendí.