CNI (Container Network Interface)
Définition
Le CNI (Container Network Interface) est une spécification CNCF qui définit une norme pour la configuration des interfaces réseau des conteneurs Linux. Il fournit un framework pluginable pour les runtimes de conteneurs (Docker, containerd) afin de s’intégrer aux plugins réseau.
Le CNI est la base réseau de Kubernetes, qui utilise des plugins CNI pour fournir le networking des pods.
Comment fonctionne le CNI
Runtime de conteneur (Docker/containerd)
↓ crée le conteneur
Spéc CNI
↓ appelle le plugin CNI
Plugin CNI (ex. Calico, Flannel)
↓ configure le réseau
Le conteneur obtient : adresse IP, namespace réseau, interfaces
Le plugin CNI est un binaire qui :
- Ajoute un conteneur à un réseau (assigne une IP, crée des interfaces)
- Retire un conteneur d’un réseau (supprime les interfaces, libère l’IP)
Plugins CNI populaires
| Plugin | Fournisseur | Fonctionnalités |
|---|---|---|
| Calico | Tigera | Network policy, BGP, haute performance |
| Flannel | CoreOS/Simple | Réseau overlay simple, configuration facile |
| Cilium | Projet Cilium | Basé eBPF, observabilité, policies L7 |
| Weave Net | Weaveworks | Réseau mesh, chiffrement |
| Canal | Project Calico + Flannel | Combine policies Calico + networking Flannel |
| Multus | NVIDIA | Multi-réseau (multiples plugins CNI par pod) |
| Macvlan | Natif Linux | Assigne des adresses MAC aux conteneurs |
CNI vs Network Policy
| Aspect | CNI | Network Policy |
|---|---|---|
| Objectif | Connecter les conteneurs | Contrôler le trafic entre conteneurs |
| Couche | Connectivité L2/L3 | Filtrage L3/L4 |
| Exemple | Calico fournit à la fois le networking ET les policies | Les policies Calico font partie du CNI Calico |
| Standard | Spéc CNCF CNI | API Kubernetes NetworkPolicy |
Exigences réseau Kubernetes
Kubernetes définit trois exigences réseau que le CNI doit satisfaire :
- Tous les conteneurs peuvent communiquer entre eux (pas de NAT)
- Les IP des nodes ne chevauchent pas les IP des conteneurs (les conteneurs voient leur propre IP comme le node la voit)
- L’agent peut voir et gérer toutes les connexions réseau
Configuration CNI
# /etc/cni/net.d/10-calico.conflist
{
"cniVersion": "0.4.0",
"name": "calico",
"plugins": [
{
"type": "calico",
"log_level": "info",
"datastore_type": "kubernetes",
"nodename": "node1",
"mtu": 1440,
"policy": {
"type": "kubernetes"
},
"kubernetes": {
"kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
}
}
]
}
Termes associés
- Kubernetes — runtime de conteneur utilisant le CNI
- Network Policy — contrôle du trafic basé sur le CNI
- Service Mesh — protocole de networking overlay utilisé par certains plugins CNI
Références
- CNI Spec: https://github.com/containernetworking/cni
- CNCF CNI: https://www.cncf.io/projects/cni/
- Calico docs: https://docs.tigera.io/calico
- Cilium docs: https://docs.cilium.io/