Belajar Calico - BGP Peering & Routing
Episode 8 of 23

Belajar Calico - BGP Peering & Routing

Episode ini membedah BGP Calico: node-to-node mesh default, route reflector untuk klaster besar, BGPConfiguration, BGPPeer, peering dengan router eksternal, advertising pod CIDR, dan integrasi dengan MetalLB.

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

Pendahuluan

Di episode 4 kita melihat BGP menyebarkan rute pod. Sekarang kita buka mekanisme itu sepenuhnya: bagaimana Calico memilih peer, bagaimana mengubah topologi BGP dari full-mesh menjadi route reflector, dan bagaimana menghubungkan klaster ke router di luar sana.

Menguasai BGP Calico membuka tiga pintu besar: klaster bisa di-route langsung dari jaringan luar, LoadBalancer bisa diimplementasikan dengan MetalLB, dan klaster berskala ribuan node tetap stabil karena peering tidak tumbuh kuadratik.

Model BGP Calico

Node-to-Node Full Mesh

Secara default, setiap node Calico membuka peering BGP ke semua node lain — topologi ini disebut full-mesh. Jumlah peering tumbuh kuadratik: dengan 100 node ada sekitar 4950 koneksi. Untuk klaster kecil, ini sederhana dan tanpa konfigurasi. Untuk klaster besar, ini boros.

BGPConfiguration

Konfigurasi global BGP dipegang resource BGPConfiguration bernama default. Contoh menonaktifkan mesh dan menentukan AS number:

BGPConfiguration global
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  nodeToNodeMeshEnabled: false
  asNumber: 64512
  serviceClusterIPs:
    - cidr: 10.96.0.0/12

nodeToNodeMeshEnabled: false mematikan full-mesh; koneksi antar node kemudian diatur lewat BGPPeer. serviceClusterIPs mengizinkan advertising CIDR Service ke peer eksternal — dasar integrasi MetalLB.

Resource Node dan AS Number per Node

Setiap node bisa diberi AS number sendiri lewat resource Node. Contoh menandai node untuk AS berbeda:

Node dengan AS number khusus
apiVersion: projectcalico.org/v3
kind: Node
metadata:
  name: k8s-worker-01
spec:
  bgp:
    ipv4Address: 172.18.0.4
    asNumber: 64513

Route Reflector

Mengapa Route Reflector

Untuk klaster besar, topologi yang disarankan adalah route reflector: sekelompok kecil node menjadi pusat yang menerima dan menyebarkan rute, sementara node lain hanya peering ke reflector. Jumlah koneksi turun dari kuadratik menjadi linier.

Menyiapkan Route Reflector

Pertama matikan mesh, lalu beri label node yang akan menjadi reflector:

Label node reflector
kubectl label node k8s-master-01 route-reflector=true
calicoctl apply -f - <<EOF
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: rr-k8s-master-01
spec:
  nodeSelector: route-reflector == 'true'
  peerSelector: all()
  asNumber: 64512
EOF

BGPPeer dengan nodeSelector memilih node reflector, dan peerSelector: all() membuat reflector menerima peering dari semua node. Perhatikan bahwa di sini satu resource mengatur kedua sisi peering sekaligus.

Verifikasi Peering

Cek status peering BGP
calicoctl node status
calicoctl get bgppeer -o wide
calicoctl get nodes -o wide | grep -E "NAME|BGP"

calicoctl get bgppeer menampilkan daftar konfigurasi peer, dan calicoctl node status menunjukkan apakah masing-masing Established.

Peering dengan Jaringan Eksternal

Menghubungkan ke Router Data Center

Saat klaster berkomunikasi dengan jaringan luar tanpa NAT, buat BGPPeer menuju router:

BGPPeer ke router eksternal
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: dc-router
spec:
  peerIP: 203.0.113.10
  asNumber: 65000
  nodeSelector: all()

Setelah peering Established, router akan belajar rute pod CIDR 192.168.0.0/16 dan bisa langsung me-route ke pod tanpa NAT. Ini pola khas klaster bare-metal atau on-prem.

Advertising dan Receive

Untuk mengontrol prefix yang di-advertise, konfigurasi BGPConfiguration memakai serviceClusterIPs dan serviceLoadBalancerIPs. Rute pod selalu di-advertise; rute Service dan LoadBalancer hanya jika diaktifkan.

Integrasi dengan MetalLB

MetalLB dalam Mode BGP

MetalLB menyediakan LoadBalancer untuk klaster bare-metal. Dalam mode BGP, MetalLB terhubung ke jaringan sebagai peer, dan Calico bertugas meng-advertise IP Service LoadBalancer ke router. Caranya, IP pool MetalLB diberi label, lalu di-advertise lewat BGPConfiguration:

Advertise IP LoadBalancer
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
  name: default
spec:
  serviceLoadBalancerIPs:
    - cidr: 198.51.100.0/24

Urutan kerjanya:

Alur MetalLB + Calico
Service LoadBalancer -> MetalLB memilih IP
     -> Calico advertise via BGP -> router eksternal
     -> traffic masuk di-route ke node -> Service -> pod

Verifikasi Keseluruhan

Verifikasi routing LoadBalancer
calicoctl node status
kubectl get svc -n metallb-system
kubectl get bgpconfiguration default -o yaml | grep -i loadbalancer

Jika traffic masuk ke Service berjalan, berarti peering Calico-MetalLB dan advertising IP berhasil.

Penutup

Episode 8 mengubah klaster kalian dari jaringan tertutup menjadi bagian dari jaringan yang lebih besar: full-mesh untuk kecil, route reflector untuk besar, BGPPeer untuk keluar ke dunia nyata, dan MetalLB untuk LoadBalancer bare-metal.

Inti yang harus dibawa pulang:

  • Default Calico adalah full-mesh; matikan dengan nodeToNodeMeshEnabled: false.
  • Route reflector menurunkan jumlah peering dari kuadratik ke linier.
  • BGPPeer memilih node dan peer lewat nodeSelector dan peerSelector.
  • Peering eksternal memungkinkan routing langsung tanpa NAT.
  • serviceClusterIPs dan serviceLoadBalancerIPs mengontrol advertising.
  • calicoctl node status adalah alat verifikasi BGP nomor satu.

Di episode 9 selanjutnya kita membahas encapsulation dan overlay options — IPIP versus VXLAN, overhead tunnel, direct routing untuk on-prem dan cloud-native, serta cara mengubah IPPool dan FelixConfiguration sesuai kebutuhan jaringan.

Belajar Calico - BGP Peering & Routing | Belajar Calico