Konfigurasi MetalLB sebaiknya tidak dikelola lewat kubectl apply manual. Episode ini membahas pengelolaan IPAddressPool, advertisement, dan BGPPeer sebagai code, penerapan dengan Argo CD dan Flux, versioning konfigurasi, review flow, dan penerapan bertahap.

Di episode 14 kita menyinggung bahwa GitOps adalah lapisan proteksi terakhir konfigurasi MetalLB. Episode 18 membahas ini secara menyeluruh: bagaimana mengelola semua resource MetalLB sebagai code di repository, menerapkannya lewat Argo CD atau Flux, melakukan versioning, menjalankan review flow, dan menerapkan perubahan secara bertahap.
Mengapa GitOps penting untuk MetalLB? Karena resource MetalLB mengendalikan jaringan cluster. Kesalahan kecil — pool salah, peer salah ASN, advertisement salah referensi — bisa langsung berdampak ke produksi. Dengan GitOps, setiap perubahan melalui review, audit trail tersimpan, dan rollback tinggal satu perintah.
Semua resource MetalLB bisa ditulis sebagai file YAML dalam repository. Struktur yang disarankan memisahkan environment:
mkdir -p metallb-config/overlays/production
touch metallb-config/ipaddresspool.yaml
touch metallb-config/l2advertisement.yaml
touch metallb-config/bgpadvertisement.yaml
touch metallb-config/bgppeer.yamlmkdir -p metallb-config/overlays/production membuat struktur folder untuk konfigurasi dasar dan overlay per environment. File-file ini adalah sumber kebenaran — tidak ada konfigurasi yang dibuat di luar repository.
apiVersion: metallb.io/v1beta2
kind: IPAddressPool
metadata:
name: prod-pool
namespace: metallb-system
spec:
addresses:
- 192.168.20.200-192.168.20.240Satu perubahan pada file ini adalah satu commit yang bisa di-review, diuji, dan di-rollback — persis seperti perubahan kode aplikasi.
Argo CD menerapkan seluruh isi direktori ke cluster secara terus-menerus. Application untuk konfigurasi MetalLB:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: metallb-config
namespace: argocd
spec:
project: platform
source:
repoURL: https://github.com/org/metallb-config
path: overlays/production
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: metallb-system
syncPolicy:
automated:
prune: true
selfHeal: truesyncPolicy: automated: prune: true, selfHeal: true membuat Argo CD menghapus resource yang hilang dari repository dan memulihkan perubahan manual kembali ke kondisi repository. Dengan ini, kubectl apply manual terhadap resource MetalLB otomatis "dibalikkan" oleh Argo CD.
kubectl apply -f application.yaml
argocd app get metallb-configargocd app get metallb-config menampilkan status sinkronisasi. Setelah commit baru ke repository, Argo CD otomatis menerapkan perubahan dan menampilkan status Synced.
Flux memakai Kustomization untuk menerapkan direktori ke cluster:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: metallb-config
namespace: flux-system
spec:
interval: 5m
sourceRef:
kind: GitRepository
name: flux-system
path: ./clusters/production/metallb
prune: true
validation: clientvalidation: client membuat Flux memvalidasi YAML sebelum diterapkan, menangkap syntax error lebih awal. Dengan prune: true, resource yang tidak lagi ada di repository ikut dihapus.
flux reconcile kustomization metallb-config
flux get kustomization metallb-configflux reconcile kustomization metallb-config memicu sinkronisasi manual tanpa menunggu interval. flux get kustomization metallb-config menampilkan status terakhir.
Konfigurasi MetalLB sebaiknya di-versioning seperti kode:
feat: tambah prod-pool.Sebelum perubahan jaringan disetujui, alur review harus melibatkan pihak yang tepat:
Perubahan besar — seperti migrasi versi CRD atau penambahan peer baru — sebaiknya diterapkan bertahap:
Info
Pemisahan pool per environment di episode 9 berpasangan sempurna dengan GitOps: perbedaan antara staging dan produksi hanyalah file di folder berbeda, dan semua perubahan mengikuti alur review yang sama.
Episode 18 menuntaskan GitOps & config as code: semua resource MetalLB sebagai code di repository, penerapan otomatis dengan Argo CD atau Flux, versioning dan review flow, serta penerapan perubahan secara bertahap.
Inti yang harus dibawa pulang:
Di episode 19 selanjutnya kita akan membahas performance & troubleshooting — diagnostik lewat kubectl get svc, describe svc, events, dan log speaker, pengecekan route BGP di router, serta penanganan masalah umum seperti IP tidak ter-assign, dua Service ber-IP sama, dan upgrade dari v0.15 ke v0.16.