You must deploy a Container Network Interface (CNI) based Pod network add-on so that your Pods can communicate with each other. Cluster DNS (CoreDNS) will not start up before a network is installed.
Does K8s have its own default or is it forced to use third party?
Kubernetes provides the spec (CNI interface), not the implementation, because it aims to be modular, flexible, cloud-agnostic, and innovation-friendly.
You’re required to install a CNI-compatible network plugin yourself unless you’re using a managed Kubernetes service that sets it up for you.
Here’s how it works:
1. Vanilla Kubernetes (like kubeadm, kind, etc.):
No CNI is installed by default.
You must install a CNI plugin (e.g., Calico, Flannel, Cilium, Weave Net) after bootstrapping the cluster.
Without it, Pods can’t communicate, and CoreDNS won’t start.
2. Managed Kubernetes (GKE, EKS, AKS, etc.):
They provide and configure a CNI plugin out of the box.
GKE uses Google’s own VPC-native CNI (or Calico in some cases).
EKS uses Amazon VPC CNI.
AKS uses Azure CNI or kubenet.
Different environments demand different capabilities:
This is a very good explanation and clears up a lot of confusion I had with k9.
While its nice and easy to go with a cloud provider, it doesn’t help with learning k9 if a user is trying to understand the basics, if it is just not simply stated that k9 does not have a default CNI available.
It would be nice if the explanation or similar is included somewhere in the documentation, unless I missed it somewhere?