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).
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
Once the operator is running, Fleet deploys the IP pool and L2 advertisement
automatically via the metallb-config bundle.
demo/charts/
└── infrastructure/
└── metallb-config/ ← managed by Fleet
├── Chart.yaml
├── fleet.yaml
├── values.yaml
└── templates/
├── ip-pool.yaml
└── l2adv.yaml
helm: chart: . releaseName: metallb-config
ipPool: name: main-pool addresses: 172.16.8.251-172.16.8.254 l2Advertisement: name: main-l2
apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: {{ .Values.ipPool.name }} namespace: metallb-system spec: addresses: - {{ .Values.ipPool.addresses }}
apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: {{ .Values.l2Advertisement.name }} namespace: metallb-system spec: ipAddressPools: - {{ .Values.ipPool.name }}
kubectl get pods -n metallb-system kubectl get ipaddresspool -n metallb-system kubectl get l2advertisement -n metallb-system