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.

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.
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.
Konfigurasi global BGP dipegang resource BGPConfiguration bernama default. Contoh menonaktifkan mesh dan menentukan AS number:
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
logSeverityScreen: Info
nodeToNodeMeshEnabled: false
asNumber: 64512
serviceClusterIPs:
- cidr: 10.96.0.0/12nodeToNodeMeshEnabled: false mematikan full-mesh; koneksi antar node kemudian diatur lewat BGPPeer. serviceClusterIPs mengizinkan advertising CIDR Service ke peer eksternal — dasar integrasi MetalLB.
Setiap node bisa diberi AS number sendiri lewat resource Node. Contoh menandai node untuk AS berbeda:
apiVersion: projectcalico.org/v3
kind: Node
metadata:
name: k8s-worker-01
spec:
bgp:
ipv4Address: 172.18.0.4
asNumber: 64513Untuk 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.
Pertama matikan mesh, lalu beri label node yang akan menjadi 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
EOFBGPPeer 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.
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.
Saat klaster berkomunikasi dengan jaringan luar tanpa NAT, buat BGPPeer menuju router:
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.
Untuk mengontrol prefix yang di-advertise, konfigurasi BGPConfiguration memakai serviceClusterIPs dan serviceLoadBalancerIPs. Rute pod selalu di-advertise; rute Service dan LoadBalancer hanya jika diaktifkan.
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:
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
serviceLoadBalancerIPs:
- cidr: 198.51.100.0/24Urutan kerjanya:
Service LoadBalancer -> MetalLB memilih IP
-> Calico advertise via BGP -> router eksternal
-> traffic masuk di-route ke node -> Service -> podcalicoctl node status
kubectl get svc -n metallb-system
kubectl get bgpconfiguration default -o yaml | grep -i loadbalancerJika traffic masuk ke Service berjalan, berarti peering Calico-MetalLB dan advertising IP berhasil.
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:
nodeToNodeMeshEnabled: false.BGPPeer memilih node dan peer lewat nodeSelector dan peerSelector.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.