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 :

  1. Ajoute un conteneur à un réseau (assigne une IP, crée des interfaces)
  2. 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 :

  1. Tous les conteneurs peuvent communiquer entre eux (pas de NAT)
  2. Les IP des nodes ne chevauchent pas les IP des conteneurs (les conteneurs voient leur propre IP comme le node la voit)
  3. 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