Ketika Service tidak bisa diakses, kalian butuh metode, bukan tebakan. Episode ini menyusun alur diagnostik MetalLB: kubectl get svc, describe svc, events, log speaker, dan cek route BGP di router, lalu menangani masalah umum seperti IP tidak ter-assign, duplikasi IP, advertisement yang hilang, peering gagal, dan upgrade v0.15 ke v0.16.

Semua pengetahuan MetalLB kalian akhirnya bermuara pada satu pertanyaan praktis: apa yang dilakukan ketika Service tidak bisa diakses? Episode 19 menyusun metode diagnostik yang terstruktur — bukan kumpulan trik acak, melainkan alur yang berurutan dari yang paling cepat sampai yang paling dalam.
Metode yang benar menghemat berjam-jam. Diagnosis dimulai dari permukaan (status Service), naik ke tingkat jaringan (advertisement dan routing), dan berakhir di log serta metric. Episode ini juga membahas masalah umum yang berulang di komunitas, termasuk migrasi v0.15 ke v0.16 yang sering mengejutkan.
Mulai dari tempat termudah: status Service. Alur ini hampir selalu menjadi pembuka diagnosis:
kubectl get svc nginx
kubectl get svc nginx -o widekubectl get svc nginx -o wide menampilkan TYPE, EXTERNAL-IP, dan port. Pertanyaan pertama yang harus kalian jawab: apakah EXTERNAL-IP sudah terisi? Jika ya, masalah ada di level advertisement; jika masih <pending>, masalah ada di level alokasi IP.
Jika IP tidak terisi, kubectl describe svc memberi petunjuk paling jelas:
kubectl describe svc nginx
kubectl get events --field-selector involvedObject.name=nginxkubectl get events --field-selector involvedObject.name=nginx menampilkan pesan seperti Allocated IP 192.168.1.200 atau Failed to allocate IP. Pesan ini menentukan arah diagnosis selanjutnya.
Jika status Service baik tetapi akses gagal, pindah ke komponen MetalLB:
kubectl logs -n metallb-system -l component=speaker --tail=50
kubectl logs -n metallb-system -l component=controller --tail=50kubectl logs -n metallb-system -l component=speaker --tail=50 menampilkan baris announcement atau error peering BGP. Log controller menampilkan keputusan alokasi. Dua log ini menjawab pertanyaan "apakah speaker sudah meng-announce?" dan "apakah controller sudah mengalokasikan?".
Untuk mode BGP, sisi router adalah saksi terakhir:
show ip bgp
show ip bgp neighborsshow ip bgp menampilkan prefix yang diterima dari MetalLB. Jika prefix tidak ada, cek show ip bgp neighbors untuk memeriksa status sesi peering — dari situlah masalah peering yang gagal biasanya terlihat.
Penyebab paling sering: pool tidak ada, pool penuh, atau Service meminta annotation pool yang salah. Periksa dalam urutan:
kubectl get ipaddresspool
kubectl get svc -A
kubectl describe svc nginxJika pool ada dan tidak penuh, periksa events Service untuk pesan error spesifik dari controller.
MetalLB tidak akan memberi dua Service IP yang sama dari pool yang sama. Jika dua Service tampak ber-IP sama, kemungkinan besar keduanya mengambil IP dari pool yang berbeda yang saling tumpang tindih. Periksa definisi semua pool:
kubectl get ipaddresspool -o yamlkubectl get ipaddresspool -o yaml menampilkan seluruh definisi pool. Cari rentang yang tumpang tindih antar pool — inilah penyebab duplikasi yang paling umum.
IP ter-assign tapi tidak bisa diakses lewat Layer 2. Periksa:
L2Advertisement mereferensikan pool yang benar?Jika show ip bgp neighbors menampilkan sesi yang tidak pernah Established, periksa:
myASN dan peerASN.multiHop jika peer berada di luar subnet.Masalah yang sering muncul saat upgrade antar versi mayor:
Cara amannya: upgrade di staging, periksa status semua resource dengan kubectl get, lalu barulah upgrade produksi. Selalu simpan manifests versi lama untuk rollback.
Beberapa indikator performa yang paling berguna:
metallb_allocator_addresses_in_use_total).metallb_bgp_session_up).curl -s -o /dev/null -w "%{time_total}\n" http://192.168.1.200curl -s -o /dev/null -w "%{time_total}\n" http://192.168.1.200 mengukur total waktu respons. Catat nilai ini sebagai baseline dan bandingkan saat performa mencurigakan.
Episode 19 menuntaskan performance & troubleshooting: alur diagnostik dari status Service, log komponen, hingga route di router, plus penanganan enam masalah umum yang paling sering dialami pengguna MetalLB.
Inti yang harus dibawa pulang:
kubectl get svc dan kubectl describe svc.kubectl get events menampilkan pesan alokasi atau kegagalan dari controller.show ip bgp dan show ip bgp neighbors adalah saksi dari sisi router.Di episode 20 selanjutnya kita akan membahas fitur stabil terbaru v0.16.x — penyempurnaan CRD v1beta2, manajemen pool dan observability, perbaikan BGP dan Layer 2, serta pentingnya upgrade karena v0.15 sudah end of life sejak Mei 2026.