Cilium — Plugin Réseau CNI
Cilium est un plugin réseau CNI (Container Network Interface) pour Kubernetes, basé sur eBPF (extended Berkeley Packet Filter). Il gère la connectivité réseau entre pods, applique des politiques réseau avancées et offre de l’observabilité sans proxy sidecar.
Pourquoi Cilium plutôt que Flannel/Calico ?
| Fonctionnalité | Flannel | Calico | Cilium |
|---|---|---|---|
| Réseau de base | ✅ | ✅ | ✅ |
| Network Policies | ❌ | ✅ | ✅ (+ L7) |
| Couche 7 (HTTP, gRPC) | ❌ | ❌ | ✅ |
| Observabilité | Basique | Basique | Hubble intégré |
| Performance (eBPF) | ❌ | Partiel | ✅ |
| Service Mesh sans sidecar | ❌ | ❌ | ✅ |
Architecture
Pod A ──► eBPF (kernel) ──► Pod B
│
▼
Politiques réseau
Load balancing
Observabilité (Hubble)
eBPF injecte du code directement dans le kernel Linux : pas de proxy, performances maximales.
Installation via Helm
helm repo add cilium https://helm.cilium.io/
helm repo update
helm install cilium cilium/cilium \
--namespace kube-system \
--set kubeProxyReplacement=true \ # remplace kube-proxy !
--set hubble.enabled=true \
--set hubble.ui.enabled=true \
--set hubble.relay.enabled=true
kubeProxyReplacement=true: Cilium peut remplacer entièrement kube-proxy grâce à eBPF.
Exemple : NetworkPolicy L3/L4 (classique)
Autoriser uniquement le pod frontend à appeler le pod api sur le port 8080 :
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-api
namespace: default
spec:
podSelector:
matchLabels:
app: api # cible : les pods "api"
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend # seul "frontend" est autorisé
ports:
- protocol: TCP
port: 8080Exemple : CiliumNetworkPolicy L7 (HTTP)
Politique spécifique à Cilium — autoriser uniquement les requêtes GET /api/v1/users :
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-get-users-only
namespace: default
spec:
endpointSelector:
matchLabels:
app: api
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
- method: GET # uniquement GET
path: /api/v1/users # sur ce path précisHubble — Observabilité réseau
Hubble est l’outil d’observabilité intégré à Cilium.
# Installer la CLI Hubble
cilium hubble enable
# Observer le trafic en temps réel
hubble observe --follow
# Filtrer par pod
hubble observe --pod frontend --follow
# Interface graphique
cilium hubble uiHubble permet de voir en temps réel :
- Quels pods communiquent entre eux
- Les connexions bloquées par les policies
- Les latences par service
Vérification
# Status Cilium
cilium status
# Vérifier la connectivité
cilium connectivity test
# Lister les endpoints gérés
kubectl get cep -A # CiliumEndpointsLiens
- kube-proxy — Cilium peut le remplacer entièrement
- Plugins Kubernetes - Vue d’ensemble — vue globale
- ingress-nginx — complément : Cilium gère le réseau E/W, ingress-nginx le trafic N/S