Etapa 4 – Instalar MetalLB para LoadBalancer com IPs Fixos
O que é o MetalLB?
O MetalLB é um load balancer para clusters Kubernetes bare-metal, que atribui IPs fixos aos serviços do tipo LoadBalancer. Isso é essencial para expor o Ingress Controller, ArgoCD, Prometheus, etc., fora do cluster.
🔧 5.1 – Pré-requisitos
- Rede local com um range de IPs livres, por exemplo: 192.168.1.70-192.168.1.99
- Esses IPs não devem estar em uso por nenhum host físico ou DHCP
📥 5.2 – Instalar MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml
Aguarde os pods ficarem prontos:
kubectl get pods -n metallb-system
📦 5.3 – Configurar um Pool de IPs fixos
Crie o arquivo metallb-config.yaml:
apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: pool-local namespace: metallb-system spec: addresses: - 192.168.100.240-192.168.100.250 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: advert-local namespace: metallb-system spec: ipAddressPools: - pool-local
Aplica:
kubectl apply -f metallb-config.yaml
🧪 5.4 – Teste com um Serviço LoadBalancer
Exemplo de serviço exposto com IP fixo via MetalLB:
apiVersion: v1 kind: Service metadata: name: nginx-lb namespace: default spec: selector: app: nginx type: LoadBalancer ports: - protocol: TCP port: 80 targetPort: 80
Crie um deployment de exemplo:
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=LoadBalancer
Verifique o IP externo:
kubectl get svc
Você verá algo como:
nginx-lb LoadBalancer 10.0.0.100 192.168.100.240 80:xxxxx/TCP 1m
O IP 192.168.100.240 foi atribuído pelo MetalLB, e agora você pode acessá-lo externamente na rede local.
🧩 5.5 – Usar MetalLB com Ingress-NGINX
Edite o Service do Ingress Controller para ser do tipo LoadBalancer:
kubectl edit svc ingress-nginx-controller -n ingress-nginx
Modifique o tipo de ClusterIP para LoadBalancer:
spec: type: LoadBalancer
Caso não funcione, aplique a configuração abaixo:
Se você estiver usando o kube-proxy no modo IPVS, desde o Kubernetes v1.14.2, você deve habilitar o modo strict ARP.
Você não precisa disso se estiver usando o kube-router como service-proxy, pois ele habilita o strict ARP por padrão. Você pode conseguir isso editando a configuração do kube-proxy no cluster atual:
kubectl edit configmap -n kube-system kube-proxy
Existem dois parâmetros que, geralmente, serão definidos da seguinte forma: mode: "" strictARP: false Eles devem ser alterados para: mode: "ipvs" strictARP: true
Após alguns segundos, ele receberá um IP do pool configurado.
🖥️ Resultado esperado
Você poderá acessar qualquer serviço exposto como LoadBalancer com IP fixo, ideal para ambientes bare-metal/on-premises.