Un Kubernetes load balancer (balanceador de carga en Kubernetes) distribuye automáticamente el tráfico de red entre varios pods para garantizar una carga equilibrada y una alta disponibilidad. Normalmente se implementa mediante un servicio “LoadBalancer”, que redirige las solicitudes externas a los servicios internos del clúster. De este modo, las aplicaciones permanecen accesibles, estables y escalables.

¿Qué es un balanceador de carga en Kubernetes?

Los balanceadores de carga distribuyen la carga de trabajo entre distintos servidores o máquinas virtuales de la manera más eficiente posible, ayudando a mejorar el rendimiento general del sistema. Al colocarse delante de los servidores, el balanceador de carga evita que una máquina se sobrecargue y garantiza un uso óptimo de los recursos disponibles. Incluso si un servidor falla, el balanceo de carga mantiene el sistema en funcionamiento al redirigir de forma inteligente las solicitudes.

En Kubernetes, los balanceadores de carga funcionan de manera similar, aunque con algunas diferencias. En Kubernetes, es importante distinguir entre dos tipos principales de balanceadores de carga:

  • Balanceadores de carga internos de Kubernetes
  • Balanceadores de carga externos de Kubernetes

Balanceadores de carga internos de Kubernetes

Los balanceadores de carga internos en Kubernetes se utilizan para distribuir el tráfico dentro de una misma red virtual. Esto significa que solo las aplicaciones que se ejecutan dentro de la misma red que el clúster de Kubernetes pueden acceder a estos servicios. No gestionan tráfico procedente del exterior.

Balanceadores de carga externos de Kubernetes

Los balanceadores de carga externos asignan una dirección IP específica o un nombre de dominio (DNS) a un nodo de servicio dentro del clúster, para que pueda recibir solicitudes HTTP externas. El tipo de servicio LoadBalancer está diseñado precisamente para redirigir el tráfico entrante hacia los pods de Kubernetes adecuados, garantizando así una distribución eficiente y automática de las solicitudes.

Nota

Existen distintos algoritmos de balanceo de carga que puedes usar en Kubernetes. La elección dependerá de las necesidades de tu aplicación. Cada algoritmo determina cómo se procesará el tráfico entrante y qué criterios se aplicarán al asignar las solicitudes a los pods.

¿Cómo funciona un balanceador de carga en Kubernetes?

En Kubernetes, el balanceador de carga tiene la función de distribuir el tráfico de red entre distintas instancias de un mismo servicio, es decir, entre los pods. Su objetivo es mantener una utilización equilibrada de los recursos, mejorar la disponibilidad y compensar posibles fallos de componentes individuales.

Desde el punto de vista técnico, el balanceador de carga recibe las solicitudes entrantes y determina qué pods están disponibles y funcionando correctamente. Kubernetes realiza un seguimiento continuo de la salud de los pods, excluyendo automáticamente aquellos que estén inactivos o sobrecargados. El balanceador de carga decide dinámicamente a qué pod reenviar cada solicitud según el estado actual del clúster.

Este proceso se realiza de forma transparente para el usuario: la aplicación sigue siendo accesible y con buen rendimiento, incluso cuando algunos pods se reinician, se sustituyen o dejan de estar operativos en segundo plano.

Imagen: Esquema del balanceador de carga en un clúster de Kubernetes
El balanceador de carga distribuye el tráfico externo a los pods de un servicio en el clúster de Kubernetes, mostrados en amarillo.
Private Cloud powered by VMware
Pago por uso y el más alto nivel de seguridad de los datos.

Bajo la división Arsys Cloud Solutions, diseñamos Soluciones a tu medida.

¿Para qué sirve un balanceador de carga en Kubernetes?

Un balanceador de carga en Kubernetes define un servicio que se ejecuta dentro del clúster y puede accederse desde Internet. Para entenderlo, conviene recordar cómo se estructura Kubernetes: un clúster está compuesto por varios nodos, y cada nodo contiene distintos pods. A cada pod se le asigna una dirección IP interna que no es accesible desde el exterior.

Disponibilidad de la aplicación mediante una IP fija

Para hacer accesible una aplicación alojada en pods a través de una dirección IP fija, es necesario definir un servicio de tipo Kubernetes. Además del tipo “LoadBalancer”, existen otros tipos de servicios que se adaptan a distintos escenarios. En todos los casos, los servicios agrupan varios pods en una unidad lógica y especifican cómo se puede acceder a ellos.

Distribución eficiente del tráfico externo

El balanceador de carga en Kubernetes garantiza una distribución eficiente del tráfico entrante hacia los pods del clúster. De este modo, los servicios permanecen disponibles y manteniendo un alto rendimiento. Si un pod deja de funcionar correctamente o presenta errores, el balanceador redirige automáticamente las solicitudes a los pods que siguen activos, asegurando así la alta disponibilidad de la aplicación.

Optimización de la escalabilidad

El uso de un balanceador de carga también influye positivamente en la escalabilidad. Kubernetes puede crear o eliminar pods automáticamente según la demanda. Si el tráfico aumenta, el sistema amplía los recursos; si disminuye, los reduce. Así, el clúster se adapta de manera flexible a las necesidades en cada momento.

Cómo crear un balanceador de carga en Kubernetes

Para crear un balanceador de carga en Kubernetes, el clúster debe ejecutarse en la nube o en un entorno compatible con balanceadores de carga externos.

En IONOS, al crear un balanceador de carga para un clúster de Kubernetes, se asigna una dirección IP estática a uno de los nodos. Esta IP hace que el servicio sea accesible desde fuera del clúster. El componente Kube-proxy que se ejecuta en el nodo distribuye el tráfico entrante de forma inteligente entre los pods individuales.

Primero debes crear un servicio y definir su tipo como LoadBalancer, añadiendo la siguiente línea en el manifiesto del servicio:

type: LoadBalancer

Por ejemplo, una configuración típica de balanceador de carga podría ser la siguiente: el servicio agrupa los pods bajo el selector web-app. El tráfico entrante en el puerto 8080 de la IP del balanceador se distribuye entre los pods, que ejecutan el servicio en el puerto 80:

apiVersion: v1
kind: Service
metadata:
    name: web-app-service
spec:
    selector:
        app: web-app
    type: LoadBalancer
    loadBalancerIP: 203.0.113.0
    ports:
        - name: http
            port: 8080
            targetPort: 80
            protocol: TCP
yaml

También puedes crear un balanceador de carga mediante la línea de comandos de kubectl. Por ejemplo, el siguiente comando crea y despliega un nuevo servicio llamado test-service que funciona como balanceador de carga:

kubectl expose deployment test --target-port=9376 \
    --name=test-service --type=LoadBalancer
bash

Si quieres comprobar la dirección IP del servicio recién creado, puedes utilizar el siguiente comando:

kubectl describe services test-service
bash
¿Le ha resultado útil este artículo?
Ir al menú principal