← Back to blog
bpdubuntu

Adding a CNI Plugin: Enabling Pod-to-Pod Communication in Kubernetes

13 November 2025bpd · ubuntu

The Missing Piece of Your Kubernetes Network

After initializing a cluster with `kubeadm`, you’ll notice that some of the core DNS pods remain in a ‘Pending’ state. This is because a base Kubernetes installation doesn’t know how to route traffic between Pods. The ‘Ubuntu System Administration Guide’ explains that you must install a CNI (Container Network Interface) plugin to complete the network setup.

What is a CNI Plugin?

A CNI plugin is responsible for creating a virtual network that spans all the nodes in your cluster. It ensures that every Pod gets a unique IP address and can communicate with every other Pod, regardless of which node it’s running on. There are many CNI plugins available, each with different features.

Installing Flannel

The book demonstrates installing Flannel, a popular and straightforward CNI plugin. The installation is as simple as applying a single YAML manifest file from the Flannel project’s GitHub repository:

kubectl apply -f https://.../kube-flannel.yml

Once applied, the Flannel Pods will start on each node, the network will be established, and your DNS pods will become ‘Running’.


This post is based from content of the book Ubuntu System adminstration guide. And the book can be found here https://www.amazon.com/stores/Mattias-Hemmingsson/author/B0FF5CQX13