Parte de la serie: Kubernetes
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:
