MetalLB terdiri dari dua komponen utama: metallb-controller yang mengalokasikan IP dari pool, dan metallb-speaker yang meng-announce IP di setiap node. Episode ini menjelaskan alur kerja end-to-end dan peran CRD IPAddressPool, L2Advertisement, BGPAdvertisement, serta BGPPeer.

Setelah memahami sejarah MetalLB, sekarang waktunya membuka kap mesin. Episode 2 menjelaskan konsep dasar dan arsitektur utama MetalLB: komponen apa saja yang berjalan di cluster, apa tugas masing-masing, dan bagaimana mereka bekerja sama mengubah Service LoadBalancer menjadi IP yang bisa diakses dari luar.
Arsitektur MetalLB sebenarnya sederhana — hanya ada dua binary utama: metallb-controller dan metallb-speaker. Namun memahami peran keduanya sangat penting, karena hampir semua troubleshooting di episode-episode berikutnya (terutama episode 7 dan 19) berakar dari pertanyaan "apakah controller sudah mengalokasikan IP?" atau "apakah speaker sudah meng-announce IP?"
Controller berjalan sebagai satu Deployment (biasanya direplikasi menjadi dua untuk high availability) dan bertanggung jawab atas sisi manajemen:
IPAddressPool.Controller adalah brain yang membuat keputusan alokasi. Dia tidak menyentuh traffic jaringan sama sekali — dia hanya mencatat "IP ini milik Service ini".
Speaker berjalan sebagai DaemonSet — satu pod di setiap node — dan bertanggung jawab atas sisi data plane:
Speaker adalah muscle yang berbicara dengan jaringan. Jika controller memutuskan IP, speaker lah yang memberitahukan jaringan bahwa IP tersebut ada di sini.
kubectl get pods -n metallb-systemSetelah instalasi (episode 3), output akan menampilkan satu atau dua pod metallb-controller dan satu pod metallb-speaker per node.
Berikut urutan yang terjadi ketika kalian membuat Service bertipe LoadBalancer:
spec.type: LoadBalancer dan menentukan port.IPAddressPool yang tersedia.status.loadBalancer.ingress[0].ip milik Service.kubectl get svc nginx
kubectl describe svc nginxPada kubectl describe svc nginx, kalian akan melihat LoadBalancer Ingress di bagian Status, dan Events yang mencatat alokasi IP oleh controller. Dua tempat ini adalah titik awal semua diagnosis.
Sejak v0.13, konfigurasi MetalLB tidak lagi berupa ConfigMap, melainkan Custom Resource Definitions (CRD). Ada empat CRD utama yang akan kalian temui terus-menerus:
Mendefinisikan kumpulan IP yang boleh dipakai oleh controller, baik sebagai range maupun CIDR:
apiVersion: metallb.io/v1beta2
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.200-192.168.1.250Keduanya menentukan cara IP di-announce. L2Advertisement untuk mode Layer 2, dan BGPAdvertisement untuk mode BGP. Advertisement akan dijelaskan lengkap di episode 5, 6, dan 8.
Mendefinisikan router yang menjadi partner peering dalam mode BGP, lengkap dengan ASN, alamat peer, dan parameter seperti hold time.
Untuk membiasakan diri dengan arsitektur, biasakan tiga perintah berikut:
kubectl get deployment -n metallb-system
kubectl get daemonset -n metallb-system
kubectl get crd | grep metallbkubectl get deployment -n metallb-system menampilkan controller, kubectl get daemonset -n metallb-system menampilkan speaker, dan perintah grep CRD menampilkan semua Custom Resource yang dimiliki MetalLB. Jumlah speaker selalu sama dengan jumlah node — karena itu speaker didesain sebagai DaemonSet.
Pemisahan controller dan speaker bukan tanpa alasan. Controller yang tunggal memastikan alokasi IP tidak ganda: hanya satu otak yang memutuskan siapa mendapat IP apa. Sementara speaker yang menyebar di tiap node memastikan announcement selalu dekat dengan jaringan: setiap node siap meng-announce IP tanpa bergantung pada satu titik pusat.
Episode 2 membuka arsitektur MetalLB: controller mengalokasikan IP, speaker meng-announce IP, dan empat CRD menjadi bahasa konfigurasinya. Alur kerja end-to-end dari Service hingga traffic eksternal juga sudah kalian pahami.
Inti yang harus dibawa pulang:
status.loadBalancer.ingress dan bisa dilihat lewat kubectl describe svc.Di episode 3 selanjutnya kita akan melakukan setup dan instalasi MetalLB — membandingkan instalasi via manifest metallb.yaml dan via Helm chart, memverifikasi pod controller dan speaker, lalu membuat konfigurasi awal berupa IPAddressPool dan advertisement pertama. Saatnya tangan mulai mengetik!