Advertisement tidak harus satu ukuran untuk semua. Episode ini membedah opsi lanjutan L2Advertisement seperti interfaces dan nodeSelectors, opsi BGPAdvertisement seperti communities, aggregationLength dan localPref, serta penggunaan multiple advertisements sekaligus.

Sejauh ini advertisement yang kita buat masih yang paling sederhana: satu advertisement untuk satu pool. Episode 8 menunjukkan bahwa advertisement bisa dikustomisasi secara halus untuk memenuhi kebutuhan jaringan yang beragam — membatasi node mana yang boleh meng-announce, memilih interface jaringan tertentu, atau menyematkan atribut BGP yang memengaruhi keputusan routing di router eksternal.
Kustomisasi ini bukan sekadar fitur tambahan. Di jaringan yang kompleks — misalnya cluster dengan segmen internal dan segmen publik, atau perusahaan yang menerapkan kebijakan routing tertentu — kemampuan ini sering menjadi pembeda antara solusi yang bisa diterima dan yang tidak.
Secara default, speaker meng-announce lewat semua interface non-loopback di node. Opsi interfaces membatasi announcement hanya pada interface tertentu. Ini berguna jika node punya banyak interface dan kalian hanya ingin meng-announce di segmen jaringan tertentu:
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2-internal
namespace: metallb-system
spec:
ipAddressPools:
- internal-pool
interfaces:
- eth1Dengan interfaces: eth1, IP dari internal-pool hanya di-announce lewat interface eth1. Jika interface tidak tersedia di sebuah node, node tersebut tidak akan meng-announce IP tersebut — sehingga announcement otomatis hanya terjadi di node yang punya interface itu.
Opsi nodeSelectors memakai label node untuk menentukan node mana yang boleh meng-announce. Contoh berikut membatasi announcement hanya pada node dengan label network-zone: dmz:
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2-dmz
namespace: metallb-system
spec:
ipAddressPools:
- dmz-pool
nodeSelectors:
- matchLabels:
network-zone: dmznodeSelectors: matchLabels: network-zone: dmz memastikan IP dari dmz-pool hanya di-announce oleh node di zona DMZ. Kombinasi interfaces dan nodeSelectors memberi kontrol yang sangat presisi terhadap topologi announcement.
BGP communities adalah label yang disematkan pada route yang diiklankan. Router di luar bisa memakai community untuk menerapkan kebijakan — misalnya mencegah route di-announce lebih jauh, atau menandai route sebagai internal. Value 65535:65282 misalnya mewakili well-known community NO_ADVERTISE:
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
name: bgp-tagged
namespace: metallb-system
spec:
ipAddressPools:
- first-pool
communities:
- "65535:65282"Dengan communities: "65535:65282", semua route dari pool ini diberi tag NO_ADVERTISE — router yang menerimanya tidak akan meneruskan route ke peer lain. Cara membuat community bernama (melalui CRD Community) dan skenario lanjutannya akan dibahas di episode 16.
Secara default, setiap IP Service di-advertise sebagai route /32 (IPv4) terpisah. aggregationLength membuat MetalLB menggabungkan beberapa IP yang berdekatan menjadi satu prefix yang lebih pendek, sehingga tabel routing router tidak membengkak:
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
name: bgp-aggregated
namespace: metallb-system
spec:
ipAddressPools:
- first-pool
aggregationLength: 24Dengan aggregationLength: 24, IP Service yang berada dalam satu subnet /24 yang sama akan diiklankan sebagai satu route 192.168.1.0/24 saja. Trade-off-nya: jika ada Service yang tidak aktif di dalam prefix, traffic ke IP tersebut bisa masuk ke cluster lalu dibuang — karena itu agresivitas agregasi perlu direncanakan (detail di episode 17).
localPref memengaruhi nilai local preference route yang diiklankan ke router. Route dengan localPref lebih tinggi lebih diprioritaskan oleh router dalam memilih jalur:
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
name: bgp-primary
namespace: metallb-system
spec:
ipAddressPools:
- primary-pool
localPref: 150localPref: 150 memberi route dari primary-pool nilai preferensi 150 (di atas default 100). Di jaringan dengan banyak jalur, ini menjadi mekanisme untuk memprioritaskan satu pool dari yang lain — episode 16 akan membahas cara memadukannya dengan community.
MetalLB mengizinkan lebih dari satu advertisement untuk pool yang sama. Contoh paling umum: mengiklankan pool yang sama lewat dua peer BGP berbeda dengan atribut berbeda, atau menggabungkan L2 dan BGP untuk kebutuhan yang berbeda.
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
name: bgp-core
namespace: metallb-system
spec:
ipAddressPools:
- first-pool
peers:
- core-router
aggregationLength: 24
---
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
name: bgp-edge
namespace: metallb-system
spec:
ipAddressPools:
- first-pool
peers:
- edge-router
localPref: 120Dua advertisement ini mengiklankan pool yang sama dengan perilaku berbeda per peer. Verifikasi semua advertisement yang berlaku:
kubectl get l2advertisement
kubectl get bgpadvertisement
kubectl get bgpadvertisement bgp-core -o yamlkubectl get bgpadvertisement bgp-core -o yaml menampilkan detail lengkap, termasuk bagaimana peers dan opsi aggregation disajikan dalam status. Ini cara terbaik memastikan kustomisasi sudah diterapkan seperti yang diinginkan.
Episode 8 menuntaskan kustomisasi advertisement: interfaces dan nodeSelectors untuk mengontrol announcement Layer 2, communities, aggregationLength, dan localPref untuk mempengaruhi keputusan router di mode BGP, serta penggunaan multiple advertisements untuk satu pool.
Inti yang harus dibawa pulang:
interfaces membatasi announcement L2 pada interface tertentu.nodeSelectors membatasi announcement L2 pada node dengan label tertentu.communities menyematkan tag pada route yang diiklankan.aggregationLength menggabungkan prefix untuk mengecilkan tabel routing.localPref memprioritaskan satu route dari route lain di mata router.Di episode 9 selanjutnya kita akan membahas multi-pool & traffic policies — memisahkan pool per lingkungan dev dan prod, memakai serviceAllocation atau annotation untuk memilih pool per Service, dan memahami dampak externalTrafficPolicy: Local versus Cluster terhadap source IP dan failover.