Un Ku­be­r­ne­tes load balancer (ba­la­n­cea­dor de carga en Ku­be­r­ne­tes) di­s­tri­bu­ye au­to­má­ti­ca­me­n­te el tráfico de red entre varios pods para ga­ra­n­ti­zar una carga equi­li­bra­da y una alta di­s­po­ni­bi­li­dad. No­r­ma­l­me­n­te se im­ple­me­n­ta mediante un servicio “Loa­d­Ba­la­n­cer”, que redirige las so­li­ci­tu­des externas a los servicios internos del clúster. De este modo, las apli­ca­cio­nes pe­r­ma­ne­cen ac­ce­si­bles, estables y es­ca­la­bles.

Managed Ku­be­r­ne­tes de IONOS
La pla­ta­fo­r­ma ideal para gestionar apli­ca­cio­nes en co­n­te­ne­do­res.

Co­m­ple­ta­me­n­te escalable, seguro y con ac­tua­li­za­cio­nes au­to­má­ti­cas.

¿Qué es un ba­la­n­cea­dor de carga en Ku­be­r­ne­tes?

Los ba­la­n­cea­do­res de carga di­s­tri­bu­yen la carga de trabajo entre distintos se­r­vi­do­res o máquinas virtuales de la manera más eficiente posible, ayudando a mejorar el re­n­di­mie­n­to general del sistema. Al colocarse delante de los se­r­vi­do­res, el ba­la­n­cea­dor de carga evita que una máquina se so­bre­ca­r­gue y garantiza un uso óptimo de los recursos di­s­po­ni­bles. Incluso si un servidor falla, el balanceo de carga mantiene el sistema en fu­n­cio­na­mie­n­to al redirigir de forma in­te­li­ge­n­te las so­li­ci­tu­des.

En Ku­be­r­ne­tes, los ba­la­n­cea­do­res de carga funcionan de manera similar, aunque con algunas di­fe­re­n­cias. En Ku­be­r­ne­tes, es im­po­r­ta­n­te di­s­ti­n­guir entre dos tipos pri­n­ci­pa­les de ba­la­n­cea­do­res de carga:

  • Ba­la­n­cea­do­res de carga internos de Ku­be­r­ne­tes
  • Ba­la­n­cea­do­res de carga externos de Ku­be­r­ne­tes

Ba­la­n­cea­do­res de carga internos de Ku­be­r­ne­tes

Los ba­la­n­cea­do­res de carga internos en Ku­be­r­ne­tes se utilizan para di­s­tri­buir el tráfico dentro de una misma red virtual. Esto significa que solo las apli­ca­cio­nes que se ejecutan dentro de la misma red que el clúster de Ku­be­r­ne­tes pueden acceder a estos servicios. No gestionan tráfico pro­ce­de­n­te del exterior.

Ba­la­n­cea­do­res de carga externos de Ku­be­r­ne­tes

Los ba­la­n­cea­do­res de carga externos asignan una dirección IP es­pe­cí­fi­ca o un nombre de dominio (DNS) a un nodo de servicio dentro del clúster, para que pueda recibir so­li­ci­tu­des HTTP externas. El tipo de servicio Loa­d­Ba­la­n­cer está diseñado pre­ci­sa­me­n­te para redirigir el tráfico entrante hacia los pods de Ku­be­r­ne­tes adecuados, ga­ra­n­ti­za­n­do así una di­s­tri­bu­ción eficiente y au­to­má­ti­ca de las so­li­ci­tu­des.

Nota

Existen distintos al­go­ri­t­mos de balanceo de carga que puedes usar en Ku­be­r­ne­tes. La elección dependerá de las ne­ce­si­da­des de tu apli­ca­ción. Cada algoritmo determina cómo se procesará el tráfico entrante y qué criterios se aplicarán al asignar las so­li­ci­tu­des a los pods.

¿Cómo funciona un ba­la­n­cea­dor de carga en Ku­be­r­ne­tes?

En Ku­be­r­ne­tes, el ba­la­n­cea­dor de carga tiene la función de di­s­tri­buir el tráfico de red entre distintas in­s­ta­n­cias de un mismo servicio, es decir, entre los pods. Su objetivo es mantener una uti­li­za­ción equi­li­bra­da de los recursos, mejorar la di­s­po­ni­bi­li­dad y compensar posibles fallos de co­m­po­ne­n­tes in­di­vi­dua­les.

Desde el punto de vista técnico, el ba­la­n­cea­dor de carga recibe las so­li­ci­tu­des entrantes y determina qué pods están di­s­po­ni­bles y fu­n­cio­na­n­do co­rre­c­ta­me­n­te. Ku­be­r­ne­tes realiza un se­gui­mie­n­to continuo de la salud de los pods, ex­clu­ye­n­do au­to­má­ti­ca­me­n­te aquellos que estén inactivos o so­bre­ca­r­ga­dos. El ba­la­n­cea­dor de carga decide di­ná­mi­ca­me­n­te a qué pod reenviar cada solicitud según el estado actual del clúster.

Este proceso se realiza de forma tra­n­s­pa­re­n­te para el usuario: la apli­ca­ción sigue siendo accesible y con buen re­n­di­mie­n­to, incluso cuando algunos pods se reinician, se su­s­ti­tu­yen o dejan de estar ope­ra­ti­vos en segundo plano.

Imagen: Esquema del balanceador de carga en un clúster de Kubernetes
El ba­la­n­cea­dor de carga di­s­tri­bu­ye el tráfico externo a los pods de un servicio en el clúster de Ku­be­r­ne­tes, mostrados en amarillo.

¿Para qué sirve un ba­la­n­cea­dor de carga en Ku­be­r­ne­tes?

Un ba­la­n­cea­dor de carga en Ku­be­r­ne­tes define un servicio que se ejecuta dentro del clúster y puede accederse desde Internet. Para en­te­n­de­r­lo, conviene recordar cómo se es­tru­c­tu­ra Ku­be­r­ne­tes: 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.

Di­s­po­ni­bi­li­dad de la apli­ca­ción mediante una IP fija

Para hacer accesible una apli­ca­ción alojada en pods a través de una dirección IP fija, es necesario definir un servicio de tipo Ku­be­r­ne­tes. Además del tipo “Loa­d­Ba­la­n­cer”, existen otros tipos de servicios que se adaptan a distintos es­ce­na­rios. En todos los casos, los servicios agrupan varios pods en una unidad lógica y es­pe­ci­fi­can cómo se puede acceder a ellos.

Di­s­tri­bu­ción eficiente del tráfico externo

El ba­la­n­cea­dor de carga en Ku­be­r­ne­tes garantiza una di­s­tri­bu­ción eficiente del tráfico entrante hacia los pods del clúster. De este modo, los servicios pe­r­ma­ne­cen di­s­po­ni­bles y ma­n­te­nie­n­do un alto re­n­di­mie­n­to. Si un pod deja de funcionar co­rre­c­ta­me­n­te o presenta errores, el ba­la­n­cea­dor redirige au­to­má­ti­ca­me­n­te las so­li­ci­tu­des a los pods que siguen activos, ase­gu­ra­n­do así la alta di­s­po­ni­bi­li­dad de la apli­ca­ción.

Op­ti­mi­za­ción de la es­ca­la­bi­li­dad

El uso de un ba­la­n­cea­dor de carga también influye po­si­ti­va­me­n­te en la es­ca­la­bi­li­dad. Ku­be­r­ne­tes puede crear o eliminar pods au­to­má­ti­ca­me­n­te 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 ne­ce­si­da­des en cada momento.

Cómo crear un ba­la­n­cea­dor de carga en Ku­be­r­ne­tes

Para crear un ba­la­n­cea­dor de carga en Ku­be­r­ne­tes, el clúster debe eje­cu­tar­se en la nube o en un entorno co­m­pa­ti­ble con ba­la­n­cea­do­res de carga externos.

En IONOS, al crear un ba­la­n­cea­dor de carga para un clúster de Ku­be­r­ne­tes, 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 co­m­po­ne­n­te Kube-proxy que se ejecuta en el nodo di­s­tri­bu­ye el tráfico entrante de forma in­te­li­ge­n­te entre los pods in­di­vi­dua­les.

Primero debes crear un servicio y definir su tipo como Loa­d­Ba­la­n­cer, añadiendo la siguiente línea en el ma­ni­fie­s­to del servicio:

type: LoadBalancer

Por ejemplo, una co­n­fi­gu­ra­ción típica de ba­la­n­cea­dor 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 ba­la­n­cea­dor se di­s­tri­bu­ye 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 ba­la­n­cea­dor 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 ba­la­n­cea­dor 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
Ir al menú principal