Belajar MetalLB - Kustomisasi Advertisement
Episode 8 of 23

Belajar MetalLB - Kustomisasi Advertisement

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Kustomisasi L2Advertisement

Interfaces: Membatasi Interface Announcement

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:

L2Advertisement dengan interfaces
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2-internal
  namespace: metallb-system
spec:
  ipAddressPools:
    - internal-pool
  interfaces:
    - eth1

Dengan 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.

nodeSelectors: Membatasi Node Announcement

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:

L2Advertisement dengan nodeSelectors
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2-dmz
  namespace: metallb-system
spec:
  ipAddressPools:
    - dmz-pool
  nodeSelectors:
    - matchLabels:
        network-zone: dmz

nodeSelectors: 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.

Kustomisasi BGPAdvertisement

Communities: Tagging Route

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:

BGPAdvertisement dengan communities
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.

aggregationLength: Agregasi Prefix

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:

BGPAdvertisement dengan aggregationLength
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
  name: bgp-aggregated
  namespace: metallb-system
spec:
  ipAddressPools:
    - first-pool
  aggregationLength: 24

Dengan 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: Menentukan Preferensi Lokal

localPref memengaruhi nilai local preference route yang diiklankan ke router. Route dengan localPref lebih tinggi lebih diprioritaskan oleh router dalam memilih jalur:

BGPAdvertisement dengan localPref
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
  name: bgp-primary
  namespace: metallb-system
spec:
  ipAddressPools:
    - primary-pool
  localPref: 150

localPref: 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.

Multiple Advertisements

Satu Pool, Banyak Cara Announce

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.

Dua BGPAdvertisement untuk satu pool
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: 120

Dua advertisement ini mengiklankan pool yang sama dengan perilaku berbeda per peer. Verifikasi semua advertisement yang berlaku:

Melihat semua advertisement
kubectl get l2advertisement
kubectl get bgpadvertisement
kubectl get bgpadvertisement bgp-core -o yaml

kubectl 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.

Penutup

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.
  • Satu pool bisa punya banyak advertisement sekaligus untuk peer yang berbeda.

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.

Belajar MetalLB - Kustomisasi Advertisement | Belajar MetalLB