====== MetalLB Setup on ZEDEDA EVE-K ====== ===== Overview ===== MetalLB provides load balancer functionality for bare-metal Kubernetes clusters. On ZEDEDA EVE-K, the MetalLB operator is installed manually via kubectl. The IP pool and L2 advertisement are managed via ZedCloud GitOps (Fleet). ---- ===== Installation ===== ==== Step 1 — Install MetalLB Operator (manual) ==== MetalLB must be installed manually on the cluster. Fleet cannot manage the operator directly because its manifest includes the namespace definition, which creates a bootstrap conflict with Helm. kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml Verify the operator is running: kubectl get pods -n metallb-system ==== Step 2 — Configure via GitOps ==== Once the operator is running, Fleet deploys the IP pool and L2 advertisement automatically via the ''metallb-config'' bundle. ---- ===== Repository Structure ===== demo/charts/ └── infrastructure/ └── metallb-config/ ← managed by Fleet ├── Chart.yaml ├── fleet.yaml ├── values.yaml └── templates/ ├── ip-pool.yaml └── l2adv.yaml ---- ===== metallb-config Bundle ===== ==== fleet.yaml ==== helm: chart: . releaseName: metallb-config ==== values.yaml ==== ipPool: name: main-pool addresses: 172.16.8.251-172.16.8.254 l2Advertisement: name: main-l2 ==== templates/ip-pool.yaml ==== apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: {{ .Values.ipPool.name }} namespace: metallb-system spec: addresses: - {{ .Values.ipPool.addresses }} ==== templates/l2adv.yaml ==== apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: {{ .Values.l2Advertisement.name }} namespace: metallb-system spec: ipAddressPools: - {{ .Values.ipPool.name }} ---- ===== Verify ===== kubectl get pods -n metallb-system kubectl get ipaddresspool -n metallb-system kubectl get l2advertisement -n metallb-system