Ketika cluster tumbuh, IP menjadi sumber daya yang langka. Episode ini membahas kapasitas Service terhadap jumlah IP, batas ARP dan BGP, strategi pool besar, serta cara menghindari kehabisan IP dan fragmentasi alokasi yang menyulitkan operasional.

IP eksternal adalah sumber daya yang paling langka di cluster bare-metal. Setiap Service LoadBalancer meminjam satu IP dari pool, dan ketika pool kosong, Service baru tidak akan pernah mendapat IP — gejalanya: EXTERNAL-IP yang tak kunjung terisi. Episode 17 membahas IP planning & network scale: menghitung kebutuhan, memahami batas ARP dan BGP, merancang strategi pool besar, dan menghindari kehabisan IP serta fragmentasi alokasi.
Perencanaan IP yang baik dilakukan sekali dan menghemat bertahun-tahun operasional. Perencanaan yang buruk memaksa kalian membangun ulang pool di tengah produksi — pengalaman yang tidak menyenangkan. Mari lakukan dengan benar sejak awal.
Setiap Service LoadBalancer memakai satu IP dari pool. Rumus kebutuhan dasarnya sederhana:
Contoh: pool 192.168.20.200-192.168.20.240 menyediakan 41 IP, cukup untuk sekitar 41 Service sekaligus. Jika kalian berencana 100 Service, butuh lebih dari 100 IP — karena pemeliharaan dan eksperimen juga memakai IP.
Jangan menebak kapan pool hampir penuh — pantau dengan metric dari episode 11:
kubectl get svc -A -o wide | wc -l
kubectl get ipaddresspoolkubectl get svc -A -o wide | wc -l memberi gambaran jumlah Service; bandingkan dengan kapasitas total pool. Untuk angka yang presisi, pakai metric Prometheus metallb_allocator_addresses_in_use_total dibanding metallb_allocator_addresses_total per pool.
Di Layer 2 mode, satu node leader menangani semua traffic untuk sebuah IP. Semakin banyak Service yang leader-nya jatuh di node yang sama, semakin besar beban node itu. Selain itu, setiap IP di-announce lewat ARP — semakin banyak IP, semakin banyak traffic broadcast ARP di jaringan. Pada skala tertentu, batas ini bukan di MetalLB melainkan di kemampuan node dan switch.
Di BGP mode, setiap IP yang tidak di-agregasi diiklankan sebagai route /32. Seribu Service berarti seribu route di tabel routing router. Ini tetap dianggap wajar untuk router modern, tetapi menimbulkan dua risiko:
Solusinya adalah agregasi prefix (aggregationLength dari episode 8 dan 16): dengan agregasi, ratusan IP diiklankan sebagai satu prefix.
show ip bgp | wc -lshow ip bgp | wc -l di router menampilkan jumlah baris route yang diterima. Jika angka ini membengkak seiring Service bertambah, pertimbangkan agregasi lebih agresif atau pemisahan pool.
Dua pendekatan untuk skala besar:
Untuk produksi, banyak pool kecil hampir selalu lebih baik. Pemilihan pool per Service memakai annotation yang sudah kita bahas di episode 9.
apiVersion: metallb.io/v1beta2
kind: IPAddressPool
metadata:
name: apps-pool
namespace: metallb-system
spec:
addresses:
- 10.0.20.0/24
---
apiVersion: metallb.io/v1beta2
kind: IPAddressPool
metadata:
name: infra-pool
namespace: metallb-system
spec:
addresses:
- 10.0.30.0/24apps-pool dan infra-pool memisahkan IP aplikasi dari IP infrastruktur. Pemetaan fungsi-ke-subnet seperti ini membuat alokasi IP mudah diprediksi hanya dengan melihat alamatnya — sangat membantu saat troubleshooting.
IP yang dibebaskan (setelah Service dihapus) bisa meninggalkan lubang di pool. Jika controller selalu mengalokasikan IP pertama yang bebas, pool dengan banyak alokasi dan de-alokasi bisa menjadi terfragmentasi — sulit untuk mengenali pola atau menerapkan agregasi yang efisien.
Mitigasi: tetapkan blok IP per fungsi secara disiplin, hindari mencampur banyak fungsi dalam satu pool, dan secara berkala pantau pemakaian untuk mendeteksi pola aneh.
Kehabisan IP bukan krisis yang mendadak — biasanya bisa diprediksi. Cara mencegahnya:
metallb_allocator_addresses_in_use_total per pool dengan alert di ambang tertentu, misalnya 80 persen.externalTrafficPolicy dan Ingress (episode 12) untuk mengurangi pemakaian IP per aplikasi.Warning
Menambah IP ke pool yang sudah berjalan di produksi itu sah, tetapi pastikan subnet baru bisa di-announce dari node yang sama. Untuk Layer 2, subnet baru harus bisa dijangkau ARP dari node; untuk BGP, pastikan router menerima prefix baru.
Sebagai patokan awal: siapkan pool dengan buffer minimal 20 persen di atas kebutuhan saat ini, dan rencanakan subnet tambahan sebelum pool utama mencapai 80 persen pemakaian. Angka ini memberi waktu untuk perencanaan tanpa menunggu krisis.
Episode 17 menuntaskan IP planning & network scale: menghitung kapasitas, memahami batas ARP dan BGP, merancang strategi banyak pool, serta mencegah kehabisan IP dan fragmentasi alokasi.
Inti yang harus dibawa pulang:
metallb_allocator_addresses_in_use_total secara rutin.Di episode 18 selanjutnya kita akan membahas GitOps & config as code — mengelola IPAddressPool, advertisement, dan BGPPeer sebagai code di repository, penerapan dengan Argo CD dan Flux, versioning konfigurasi, review flow, serta penerapan perubahan secara bertahap.