Alex Sarmiento
ES / EN

5. Balanceador de carga (MetalLB)

MetalLB permite utilizar servicios de tipo LoadBalancer en un entorno bare-metal como nuestro cluster K3s.

5.1 Instalar MetalLB

# Crear namespace
sudo kubectl create namespace metallb-system --kubeconfig /etc/rancher/k3s/k3s.yaml

# Instalar MetalLB usando Helm
sudo helm repo add metallb https://metallb.github.io/metallb --kubeconfig /etc/rancher/k3s/k3s.yaml
sudo helm repo update --kubeconfig /etc/rancher/k3s/k3s.yaml
sudo helm install metallb metallb/metallb --namespace metallb-system --kubeconfig /etc/rancher/k3s/k3s.yaml

5.2 Configurar el pool de direcciones IP

Crea un archivo ipaddresspool.yaml con el siguiente contenido (ajusta el rango de IPs según tu red):

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.1.200-192.168.1.220

Aplica la configuración:

sudo kubectl apply -f ipaddresspool.yaml --kubeconfig /etc/rancher/k3s/k3s.yaml

5.3 Configurar el modo de anuncio

Crea un archivo l2advertisement.yaml con el siguiente contenido:

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2-advert
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool

Aplica la configuración:

sudo kubectl apply -f l2advertisement.yaml --kubeconfig /etc/rancher/k3s/k3s.yaml

5.4 Probar MetalLB

Crea una aplicación de prueba:

# Crear un deployment de NGINX
sudo kubectl create deployment nginx --image=nginx --kubeconfig /etc/rancher/k3s/k3s.yaml

# Exponer el deployment como servicio tipo LoadBalancer
sudo kubectl expose deployment nginx --port=80 --type=LoadBalancer --kubeconfig /etc/rancher/k3s/k3s.yaml

# Verificar que se ha asignado una IP externa
sudo kubectl get svc nginx --kubeconfig /etc/rancher/k3s/k3s.yaml

Deberías ver una dirección IP externa asignada del pool que configuraste (192.168.1.200-192.168.1.220). Puedes acceder a NGINX utilizando esta IP desde cualquier máquina en tu red.

Tambien puedes ver en que ip esta corriendo desde OpenLens: conoceriploadbalancer.png