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