Load balancer en Kubernetes
Para trabajar de la forma más eficiente posible con Kubernetes, es importante que la carga de trabajo se distribuya de forma manejable entre diferentes pods. Es aquí donde el load balancer adquiere protagonismo.
La plataforma ideal para aplicaciones de contenedores de alto rendimiento y gran escalabilidad, integrada en el ecosistema de IONOS Cloud con soporte experto 24/7.
¿Qué es un load balancer en Kubernetes?
Un load balancer o balanceador de carga se utiliza para repartir la carga que tienen que procesar los servidores o las máquinas virtuales de la manera más eficiente posible con el objetivo de mejorar el rendimiento general. Normalmente, un load balancer se sitúa antes de los servidores para evitar que los servidores individuales se sobrecarguen, lo que también asegura que los recursos disponibles se aprovechen de la mejor manera posible. Incluso si falla un servidor, el balanceador de carga garantiza el funcionamiento del sistema redirigiendo las peticiones de forma selectiva.
Los load balancers de Kubernetes funcionan de forma un poco diferente, pero con la misma idea de base. Sin embargo, hay que distinguir entre dos tipos de balanceadores de carga en Kubernetes:
- Kubernetes load balancers internos
- Kubernetes load balancers externos
Kubernetes load balancers internos
Aunque se presenten brevemente los Kubernetes load balancers internos, el artículo se centrará en los externos. Frente a los balanceadores de carga clásicos, un balanceador de carga interno adopta un enfoque diferente y garantiza que solo las aplicaciones que se ejecutan en la misma red virtual que tu clúster de Kubernetes puedan acceder a él.
Kubernetes load balancers externos
Los load balancers externos asignan a un nodo de servicio de clústeres de Kubernetes su propia dirección IP o nombre DNS para que puedan recibir HTTP requests externas. Este load balancer es un tipo de servicio especial de Kubernetes y enruta el tráfico externo a los pods individuales de tu clúster. De este modo, se asegura la mejor distribución de las peticiones entrantes.
Hay varios algoritmos para configurar load balancers en Kubernetes. El que elijas depende totalmente del uso que quieras darle. Los diferentes algoritmos determinan principalmente el principio según el cual el equilibrador de carga procesa el tráfico entrante.
¿No utilizas todavía Kubernetes? IONOS Managed Kubernetes te permite desplegar tus aplicaciones de contenedores en Kubernetes y beneficiarte de las amplias ventajas del software de gestión de contenedores. Nuestro tutorial sobre Kubernetes puede ayudarte a empezar con Kubernetes.
¿Para qué sirve el load balancer de Kubernetes?
Un load balancer de Kubernetes define un servicio que se ejecuta en el clúster, cuyo acceso es a través de la red pública de Internet. Para una mejor comprensión, hay que echar un vistazo a la arquitectura de Kubernetes. Un clúster contiene varios nodos, que a su vez está compuesto por varios pods. Y a cada uno de estos pods se le asigna una IP interna que es inaccesible desde fuera del clúster. Esto también tiene sentido, dado que los pods se crean y eliminan automáticamente, reasignándose las IPs.
Para que el software que se ejecuta en los pods pueda utilizarse con una dirección fija, suele ser necesario un servicio Kubernetes. Además del load balancer, hay otros servicios que son adecuados para diversos escenarios de aplicación. Pero todos los servicios tienen en común que adjuntan varios pods en una unidad lógica y describen cómo acceder a ellos:
„a Service is an abstraction which defines a logical set of Pods and a policy by which to access them“
— Fuente: https://kubernetes.io/docs/concepts/services-networking/service/
Traducción: “un servicio es una abstracción que agrupa lógicamente un conjunto de pods y describe un procedimiento para dirigirse a ellos” (traducción de IONOS)
El load balancer de Kubernetes sirve para distribuir de forma óptima del tráfico externo a los pods de tu clúster Kubernetes. Por ello, se puede usar en numerosas situaciones, casi para cualquier propósito. El hecho de que los load balancers de Kubernetes puedan dirigir el tráfico a cada uno de los pods garantiza que el clúster cuente con una disponibilidad alta. Si un pod deja de funcionar o tiene errores, el balanceador de carga reparte las tareas entre los demás pods.
Con los balanceadores de carga, también se mejora la escalabilidad. Si se determina que el tráfico entrante requiere menos o más recursos que los disponibles en ese momento, Kubernetes puede responder de forma automática creando o eliminando pods.
Te explicamos cómo crear un load balancer para Kubernetes
Para crear un load balancer de Kubernetes, necesitas que tu clúster se ejecute en una nube o en un entorno que admita la configuración de load balancers externos.
Al crear un load balancer de Kubernetes con IONOS, el nodo del clúster recibe una IP estática que permite dirigirse al servicio desde fuera del clúster. El proxy Kube que se ejecuta en el nodo distribuye el tráfico entrante de forma inteligente a los pods individuales.
En primer lugar, crea un servicio y, a continuación, asígnale el tipo de servicio Load Balancer mediante la siguiente línea:
type: LoadBalancer
La configuración de un load balancer de Kubernetes podría tener, por ejemplo, el siguiente aspecto: el servicio agrupa los pods con el selector web-app. El tráfico entrante que ha utilizado el puerto 8080 junto a la IP del load balancer se distribuye a los pods individuales. Y durante este proceso, se aborda cada servicio que se ejecuta en los pods del puerto 80:
apiVersion: v1
kind: Service
spec:
selector:
app: web-app
type: LoadBalancer
loadBalancerIP: 203.0.113.0
ports:
- name: http
port: 8080
targetPort: 80
protocol: TCP
phpOtra forma de crear un load balancer de Kubernetes es utilizar la línea de comandos kubectl.
Utilizando el comando
kubectl expose deployment test --target-port=9376 \ --name=test-service –type=LoadBalancer
creas y despliegas un nuevo servicio llamado test-service que actuará como un balanceador de carga.
Si quieres averiguar la dirección IP del servicio que acabas de crear, el siguiente comando te ayudará:
kubectl describe services test-service