Route advertisements in Calico BGP

I have a cluster with 3 nodes. Lets call it Node 1, 2 and 3. Node 1 is the master and the other 2 nodes are the worker nodes. I am using calico CNI for networking. I also have an external system (lets call it Ext 1) connected to the kube cluster and the routes are being advertised between the 2 ASs.


  1. Calico inherent BGP is being used to establish the mesh topology between the nodes. How do i check what routes are being advertised by each of the nodes? My system does not have BIRD or quagga installed and is most liking using the BIRD that comes with the calico.

  2. Another problem is that the routes from the kube cluster which show up on Ext 1, the nexthop is not as expected. The nexthop is the IP that is reachable between the 3 nodes. Although Ext1 is directly connected to the kube cluster via the data ports, the nexthop of the routes advertized are still the IP over which the kubes are reachable to each other. How do I force to set the desired nexthop?

Note: The nodes in kube cluster are running on Ubuntu 20.04.2 LTS. Ext 1 is a rouuer/load balancers. I am using kubeadm to orchestrate the cluster.


To check what calico BGP is seeing, you need to run calicoctl node status on each node.
Alternatively birdc -s /run/calico/bird.ctl.

Not sure if it’s exactly the same setup that I have. But I’ve also had issues when trying to announce a public IP range with my ISPs using calico.
The same issue with having a private next hop announced (not routable from the ISP) as well as avoiding to push all private subnets along with the public ones were tricky for me.

I have since switched to using calico only for the private cluster node-to-node network while using metallb for announcing public ranges when peering with other ASNs. I’m then able to create load balancer IPs for the public IP space to accept traffic. So no peering config in calico.