Prerequisites: kubernetes
Kubernetes schedules pods but does not, by itself, give them addresses or connect them across machines. It hands that job to a plugin through a standard contract called the Container Network Interface, the CNI. When a pod is created, the kubelet calls the configured CNI plugin to give the pod its IP and wire it into the network so it can reach pods on other nodes with no address translation in between.
Look at a pod’s address on devata:
kubectl get pods -n monitoring -o wide | grep -i grafanaThe IP sits in 10.244.0.0/16, the range the CNI hands out, and a pod on one node reaches a pod on another node directly at that address. The plugin filling that role on devata is cilium. Many clusters instead run Flannel, a simpler CNI that gives each pod an address and tunnels traffic between nodes but does little beyond that. devata removed Flannel because Cilium was already doing the CNI job and more, so Flannel had become dead weight sitting behind the component that actually worked. A cluster runs exactly one CNI doing this job, which is why two plugins both trying to own pod networking is a problem rather than redundancy.
Reference: Network plugins, CNI spec.