Table of Contents

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