I don't understand this docs section. CNI and Network?

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:

  • Some need basic flat networking (Flannel).
  • Others want advanced network policy enforcement (Calico, Cilium).
  • Some want deep VPC integration (GKE, EKS).
  • Others want eBPF-powered observability or service mesh support.

Hardcoding one networking implementation would limit innovation and make it harder to evolve with use cases.

Kubernetes is part of the Cloud Native Computing Foundation (CNCF), which emphasizes neutrality. If Kubernetes shipped with a “default” CNI, it might:

  • Bias users toward it
  • Discourage third-party innovation
  • Create “lock-in” or stagnation

Instead, the ecosystem flourishes with a wide range of CNI plugins.

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?

If you are getting started I would advise would be to go with Flannel

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml