O IPPool define o range de VIPs que o MetalLB pode usar. O L2Advertisement anuncia esses VIPs na rede via ARP/NDP.

Conceito geral

  • MetalLB fornece IPs do tipo LoadBalancer em clusters bare-metal.
  • O VIP é amarrado a um Worker e movimenta automaticamente entre nós.
  • Permite rodar vários ingressos, cada um com um VIP diferente.
Cliente
   ↓
VIP (LoadBalancerIP:80)
   ↓
Worker líder (node dono do VIP)
   ↓
Service (ClusterIP)
   ↓
Selector → Pod
   ↓
Retorno pelo mesmo Worker líder

IPPool

Abaixo o exemplo de yml para criar um ippool com nome de vlan305


apiVersion: v1
kind: Namespace
metadata:
  name: metallb-system
---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: vlan305
  namespace: metallb-system
spec:
  addresses:
    - 10.70.35.110-10.70.35.115

L2Advertisement

Responsável por anunciar o pool na rede (ARP/NDP).

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: vlan305
  namespace: metallb-system
spec:
  ipAddressPools:
    - vlan305

Criando um Service LoadBalancer

Para expor um serviço, podemos fazer nesse sentido, quando o pacote chega na porta 80 do loadbalancer ele basicamente, recebe dado

apiVersion: v1
kind: Service
metadata:
  name: meu-servico
spec:
  type: LoadBalancer
  loadBalancerIP: 10.70.35.110 (*importante para garantir que esse IP seja sempre o mesmo*)
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: minha-app