CNI (Container Network Interface, zu Deutsch etwa „Container-Netzwerk-Schnittstelle“) ist ein offener Standard, der festlegt, wie Container-Runtimes Netzwerk-Schnittstellen für Container einrichten. CNI trennt die Container-Laufzeit von der Netzwerk-Implementierung: Statt selbst Netzwerk zu konfigurieren, ruft die Runtime ein CNI-Plugin auf, das die Verbindung herstellt.
So funktioniert CNI
Das Grundprinzip ist ein einfacher Vertrag. Eine Container-Runtime wie containerd oder CRI-O übergibt einem Plugin-Programm per JSON die nötigen Daten: welche Container-ID eingerichtet werden soll, in welchem Netzwerk-Namespace sie liegt und welche Konfiguration gilt. Das Plugin legt daraufhin ein virtuelles Netzwerk-Interface an, verbindet es mit einem Bridge- oder Overlay-Netz und meldet die vergebene IP-Adresse zurück. Die wichtigsten Kommandos heißen ADD (Interface anlegen), DEL (entfernen) und CHECK (prüfen).
CNI und Kubernetes
In Kubernetes ist CNI die Standard-Schnittstelle für die Vernetzung der Pods. Der Kubelet liest die Plugin-Konfiguration aus dem Verzeichnis /etc/cni/net.d/ und führt die dort referenzierten Plugins aus. Die Plugin-Programme liegen unter /opt/cni/bin/. Jede Node braucht dabei zwingend eine CNI-Implementierung, sonst erhalten Pods keine Netzwerkverbindung.
Bekannte CNI-Plugins
Unterschieden wird zwischen einfachen Basis-Plugins (etwa bridge für ein Linux-Bridge-Netz oder host-local für die IP-Vergabe) und vollständigen Netzwerk-Lösungen, die ein ganzes Cluster-Netz aufspannen:
- Calico arbeitet mit BGP und eignet sich für große, leistungsorientierte Installationen.
- Flannel spannt ein einfaches Overlay-Netz mit VXLAN auf und ist schnell eingerichtet.
- Cilium setzt auf eBPF und bietet erweiterte Sicherheits- und Beobachtungsfunktionen.
Die Wahl des Plugins beeinflusst Leistung, Netzwerk-Sicherheit und Beobachtbarkeit des Clusters. CNI kümmert sich dabei um die Verbindung der Pods untereinander; die stabile Erreichbarkeit über Service-IPs stellt dagegen kube-proxy auf jeder Node her. Verwandte Grundlagen: Kubernetes, Kubernetes-Node.