MetalLB este o soluție de LoadBalancer pentru clusterele Kubernetes care de pe infrastructură bare-metal, asa cum am si eu in HomeLab. Spre deosebire de cloud-uri (eks de ex) unde ai deja solutii native… pe onprem (bare metal) ai nevoie de o solutie pentru a expune serviciile catre retea si de acolo… mai departe, pe internet daca este cazul 😀
Instalarea MetalLB
Eu am folosit manifestul lor.. kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/main/config/manifests/metallb-native.yaml
In cateva zeci de secunde se for initializa toate componentele si vom avea ceva de genulkubectl get pods -n metallb-system

Pentru a configura MetalLB vom avea nevoie de un spatiu de ip-uri din zona in care tinem si nodurile de k8s. Daca avem DHCP va trebui sa rezervam zona aceea… Creaza un fisier de ex metallb-config.yaml
si aplica configuratia.
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default-pool
namespace: metallb-system
spec:
addresses:
- 192.168.111.220-192.168.111.230
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2advertisement
namespace: metallb-system
kubectl apply -f metallb-config.yaml
Destul de simplu… pentru a vedea logurile metallb
kubectl logs -n metallb-system -l app=metallb
Ca sa ii vedem utilitatea putem sa cream un nginx mic si stingher, facem un yaml nou, nginx-lb.yaml iar la serviciu specificam tipul LoadBalancer.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-lb
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: nginx-lb
template:
metadata:
labels:
app: nginx-lb
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-lb
namespace: default
spec:
selector:
app: nginx-lb
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Se aplica configuratia, dupa care K8s va crea un POD conform specificatiilor si un serviciu prin care publicam nginx-ul pe portul 80.kubectl apply -f nginx-lb.yaml
Va trebui sa se regaseasca in lista serviciul si un IP din pool-ul setat mai sus pentru metallb.

Din browser va trebui sa puteti accesa serviciul pe portul 80, pe acel ip.

Easy peasy!