Mode BGP bukan hanya soal konfigurasi CRD — ini soal desain jaringan. Episode ini membahas konfigurasi peer ganda, penggunaan routerID, perencanaan subnet yang di-advertise, penempatan pool IP, serta komunikasi dengan firewall agar peering aman dan stabil.

BGP mode di episode 6 berhenti pada satu peer sederhana. Di dunia nyata, jarang ada cluster dengan satu router saja. Peering & network design menentukan apakah mode BGP kalian akan stabil dan mudah dirawat — atau menjadi sumber sakit kepala di kemudian hari. Episode 13 membahas desain jaringan secara menyeluruh: banyak peer, routerID, subnet yang di-advertise, penempatan pool, dan firewall.
Desain yang baik membuat penambahan Service hanya menambah IP ke pool — tanpa menyentuh router sama sekali. Desain yang buruk membuat setiap Service baru memerlukan koordinasi dengan tim jaringan. Tujuan episode ini: membangun pola pikir desain yang benar sejak awal.
Cluster produksi biasanya punya lebih dari satu router atau switch L3 untuk redundancy. MetalLB bisa melakukan peering dengan banyak router sekaligus — setiap peer adalah resource BGPPeer terpisah:
apiVersion: metallb.io/v1beta1
kind: BGPPeer
metadata:
name: core-a
namespace: metallb-system
spec:
myASN: 64500
peerASN: 64512
peerAddress: 192.168.1.1
---
apiVersion: metallb.io/v1beta1
kind: BGPPeer
metadata:
name: core-b
namespace: metallb-system
spec:
myASN: 64500
peerASN: 64512
peerAddress: 192.168.1.2Dengan dua peer ini, route yang diiklankan MetalLB mencapai jaringan lewat dua jalur. Jika satu router mati, sesi peering ke router itu terputus tetapi route tetap tersedia lewat router lain.
Periksa bahwa kedua sesi establish:
kubectl get bgppeer
kubectl describe bgppeer core-akubectl get bgppeer menampilkan semua peer dalam satu daftar. Status masing-masing bisa dilihat lewat kubectl describe bgppeer core-a — cari kondisi yang menunjukkan sesi BGP sudah Established.
BGP mengidentifikasi sesi dengan router ID. Jika tidak dikonfigurasi, MetalLB memakai alamat IP dari salah satu interface node — yang bisa berubah dan menimbulkan kebingungan. Menetapkan routerID eksplisit membuat identitas setiap node stabil dan bisa diprediksi:
apiVersion: metallb.io/v1beta1
kind: BGPPeer
metadata:
name: core-b
namespace: metallb-system
spec:
myASN: 64500
peerASN: 64512
peerAddress: 192.168.1.2
routerID: 192.168.0.10routerID: 192.168.0.10 memberi node identitas tetap di mata router. Pastikan routerID bersifat unik di seluruh cluster dan jaringan — routerID yang bentrok bisa menyebabkan sesi BGP tidak stabil.
Salah satu keputusan desain terbesar: subnet mana yang dipakai untuk IP Service, dan apakah IP tersebut di-advertise ke seluruh jaringan atau hanya segmen tertentu. Rekomendasi umum:
Ingat aggregationLength dari episode 8: dengan agregasi, satu subnet seperti 192.168.20.0/24 diiklankan sebagai satu route, bukan per-IP. Ini mengurangi ukuran tabel routing router dan menyederhanakan kebijakan network team.
kubectl get bgpadvertisement -o widekubectl get bgpadvertisement -o wide menampilkan advertisement beserta opsi agregasi. Sebelum mengubah desain, selalu konsultasikan subnet yang di-advertise dengan tim jaringan — route yang bocor bisa memengaruhi seluruh jaringan.
Jika cluster menembus beberapa segmen jaringan, buat pool terpisah per segmen. Contoh: segmen 10.0.10.0/24 untuk internal dan 10.0.20.0/24 untuk publik:
apiVersion: metallb.io/v1beta2
kind: IPAddressPool
metadata:
name: segmen-internal
namespace: metallb-system
spec:
addresses:
- 10.0.10.200-10.0.10.240
---
apiVersion: metallb.io/v1beta2
kind: IPAddressPool
metadata:
name: segmen-publik
namespace: metallb-system
spec:
addresses:
- 10.0.20.200-10.0.20.240Dengan pemisahan ini, Service internal dan publik bisa di-announce ke segmen yang berbeda — misalnya lewat nodeSelectors dan interfaces dari episode 8. Struktur ini jauh lebih mudah dirawat daripada satu pool raksasa yang mencakup semuanya.
Penempatan pool harus mencerminkan topologi fisik: IP yang di-announce lewat Layer 2 harus berada dalam subnet yang bisa dijangkau ARP; IP yang di-advertise lewat BGP harus masuk dalam blok yang diizinkan diterima oleh router. Melanggar aturan ini adalah sumber masalah "IP tidak bisa diakses" yang paling umum.
BGP menggunakan TCP port 179. Peering BGP membutuhkan komunikasi langsung antara setiap node dan router peer pada port ini. Periksa firewall di antara keduanya:
nc -zv 192.168.1.1 179nc -zv 192.168.1.1 179 menguji apakah port 179 pada router peer bisa dijangkau dari node. Jika tidak, firewall memblokir peering — salah satu penyebab tersembunyi kenapa sesi BGP tidak pernah establish.
kubectl get bgppeer
kubectl logs -n metallb-system -l component=speaker --tail=30 | grep -i bgpkubectl logs -n metallb-system -l component=speaker --tail=30 | grep -i bgp menampilkan baris log terkait peering — cara cepat melihat apakah sesi establish atau tertahan di status Connect. Ini langkah diagnosis pertama yang akan kita pakai lagi di episode 19.
Episode 13 menuntaskan peering dan desain jaringan: peer ganda untuk redundancy, routerID yang stabil, perencanaan subnet yang di-advertise, penempatan pool per segmen, dan komunikasi firewall untuk port BGP.
Inti yang harus dibawa pulang:
BGPPeer per router agar jalur redundancy tersedia.routerID eksplisit membuat identitas node stabil di mata router.kubectl get bgppeer dan log speaker adalah cek cepat status peering.Di episode 14 selanjutnya kita akan membahas security & access control — permission RBAC controller dan speaker, pengerasan namespace, pembatasan akses ke port management dan health check, serta proteksi konfigurasi MetalLB dari perubahan yang tidak sah.