BGP lanjutan memberi kontrol halus terhadap route yang diiklankan. Episode ini membahas communities untuk tagging route lewat CRD Community, local preference, agregasi prefix, peering multi-hop ke router luar, serta topologi route reflector untuk jaringan besar.

Di episode 6 dan 8 kalian sudah menyentuh BGP dasar: peering, advertisement, dan beberapa opsi. Episode 16 membawa BGP ke tingkat selanjutnya — advanced BGP yang memanfaatkan mekanisme bawaan BGP untuk mengontrol perilaku route di jaringan yang besar: communities untuk tagging, local preference untuk prioritas, agregasi prefix untuk efisiensi, peering multi-hop, dan topologi route reflector.
Mengapa ini penting? Di jaringan besar, kebijakan routing tidak diatur per-route, melainkan per-kelompok route. Community adalah cara mengelompokkan route; localPref adalah cara memberi peringkat; dan route reflector adalah cara menyebarkan route tanpa membangun peering yang tak terhitung jumlahnya. Ketiganya adalah bahasa yang dipakai network engineer profesional.
BGP community adalah nilai dua bagian seperti 64512:100. Angka ini sulit diingat, jadi MetalLB menyediakan CRD Community untuk memberi nama pada nilai tersebut:
apiVersion: metallb.io/v1beta1
kind: Community
metadata:
name: komunitas-perusahaan
namespace: metallb-system
spec:
communities:
- name: PROD_NO_EXPORT
value: "64512:1"
- name: INTERNAL_ONLY
value: "64512:2"Setelah CRD dibuat, advertisement bisa mereferensikan community dengan nama yang mudah dibaca:
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
name: bgp-prod
namespace: metallb-system
spec:
ipAddressPools:
- prod-pool
communities:
- PROD_NO_EXPORTcommunities: PROD_NO_EXPORT menyematkan nilai community 64512:1 pada semua route dari prod-pool. Router di luar jaringan bisa memakai tag ini untuk memutuskan apakah route boleh diteruskan lebih jauh — misalnya menolak export route produksi ke jaringan upstream.
Tagging membuat kebijakan jaringan bisa diterapkan tanpa menyentuh MetalLB: network engineer cukup menulis rule di router berdasarkan community. Ini memisahkan tanggung jawab — tim platform mengatur apa yang diiklankan, tim jaringan mengatur bagaimana route diperlakukan.
Local preference adalah atribut yang menentukan prioritas route di dalam AS. Route dengan nilai lebih tinggi lebih disukai. MetalLB bisa menyetelnya per advertisement, sehingga route dari satu pool bisa diprioritaskan atas pool lain:
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
name: bgp-primary
namespace: metallb-system
spec:
ipAddressPools:
- primary-pool
localPref: 200localPref: 200 membuat route dari primary-pool lebih diprioritaskan dibanding route dengan nilai default 100. Ini berguna untuk mengarahkan traffic ke jalur utama dan hanya jatuh ke jalur cadangan ketika jalur utama hilang.
Semakin banyak Service, semakin banyak route per-IP yang diiklankan — tabel routing router membengkak. aggregationLength mengelompokkan IP yang berdekatan menjadi prefix yang lebih pendek:
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
name: bgp-aggregated
namespace: metallb-system
spec:
ipAddressPools:
- prod-pool
aggregationLength: 24aggregationLength: 24 mengiklankan satu route 192.168.20.0/24 alih-alih banyak route /32, selama semua IP Service berada dalam subnet yang sama. Trade-off-nya: traffic ke IP yang belum dipakai Service tetap masuk ke cluster, lalu dibuang di level IP — ini membebani node dengan traffic yang tidak perlu, seperti yang kita singgung di episode 8.
Default BGP mengharuskan peer berada di jaringan langsung (single-hop). Untuk mencapai router di luar subnet — misalnya core router di data center — aktifkan multiHop:
apiVersion: metallb.io/v1beta1
kind: BGPPeer
metadata:
name: core-dc
namespace: metallb-system
spec:
myASN: 64500
peerASN: 64550
peerAddress: 10.0.0.1
multiHop: true
holdTime: 180smultiHop: true mengizinkan peering ke 10.0.0.1 yang tidak berada di jaringan langsung. Untuk peering multi-hop, TTL BGP dinaikkan dari 1 menjadi 255, dan holdTime yang lebih panjang biasanya diperlukan karena jalur yang lebih jauh.
kubectl get bgppeer
kubectl describe bgppeer core-dckubectl describe bgppeer core-dc menampilkan kondisi sesi dan detail seperti status Established. Pastikan juga jalur TCP menuju peer terbuka di firewall (episode 13) — karena peer berada di subnet lain, kemungkinan besar ada firewall di antaranya.
Dengan banyak router dan banyak node, peering full-mesh menjadi tidak praktis — jumlah sesi tumbuh secara kuadratik. Route reflector memecahkan masalah ini: satu router menerima route dari klien (node), lalu meneruskan ke klien lain. Setiap node cukup melakukan peering ke satu atau dua route reflector, bukan ke semua router.
show bgp neighbors 192.168.0.10 received-routesshow bgp neighbors 192.168.0.10 received-routes di sisi router menampilkan route yang diterima dari peering tersebut. Dalam topologi route reflector, node MetalLB biasanya menjadi klien, dan reflektor yang menyebarkan route ke seluruh jaringan.
Episode 16 menuntaskan advanced BGP: community lewat CRD Community, local preference untuk prioritas route, agregasi prefix untuk efisiensi, peering multi-hop ke router luar, dan topologi route reflector untuk jaringan besar.
Inti yang harus dibawa pulang:
Community memberi nama pada nilai community yang sulit diingat.communities di BGPAdvertisement menyematkan tag untuk kebijakan di router.localPref memberi peringkat route agar jalur utama lebih disukai.aggregationLength mengecilkan tabel routing dengan mengorbankan presisi.multiHop: true memungkinkan peering ke router di luar subnet.Di episode 17 selanjutnya kita akan membahas IP planning & network scale — berapa banyak Service yang bisa ditangani, batas ARP dan BGP, strategi pool besar, serta cara menghindari kehabisan IP dan fragmentasi alokasi.