Cilium est un plugin CNI pour Kubernetes qui utilise eBPF (extended Berkeley Packet Filter) pour implémenter le networking, les NetworkPolicies et l'observabilité directement dans le kernel Linux, sans proxy userspace. Développé par Isovalent (racheté par Cisco en janvier 2024), il est diplômé CNCF en octobre 2023.
L'approche eBPF permet d'appliquer des règles réseau et de sécurité directement dans le kernel, sans passer par iptables. Cilium peut remplacer entièrement kube-proxy, gérer le load balancing des Services en eBPF, et fournir une observabilité réseau via son composant Hubble.
Idéal pour : clusters nécessitant des performances réseau maximales, NetworkPolicies L7 (HTTP, gRPC), observabilité fine des flux réseau, remplacement de kube-proxy.
Informations essentielles
Origine : Isovalent / Cisco · Licence : Apache 2.0 · CNCF : Graduated (octobre 2023)
Liens : Site officiel · Documentation · GitHub · Releases
Support : Les 3 dernières versions mineures sont maintenues. Cycle de release trimestriel environ.
Prérequis kernel Linux
| Fonctionnalité | Kernel minimum |
|---|---|
| Fonctionnement de base | 4.9 |
| Remplacement kube-proxy | 5.10 |
| WireGuard encryption | 5.6 |
| Fonctionnalités complètes recommandées | 5.10+ |
Architecture
| Composant | Rôle |
|---|---|
| cilium-agent | DaemonSet sur chaque nœud - charge les programmes eBPF |
| cilium-operator | Gestion des ressources cluster (IPAM, CRDs) |
| Hubble | Observabilité réseau (metrics, flows, service map) |
| hubble-relay | Agrège les données Hubble de tous les nœuds |
Installation
Via Helm (recommandé en production)
helm repo add cilium https://helm.cilium.io/
helm repo update
# Installation standard
helm install cilium cilium/cilium \
--namespace kube-system \
--set ipam.mode=kubernetes
# Vérifier
kubectl -n kube-system get pods -l k8s-app=cilium
Via cilium CLI (dev/lab)
# Installer le CLI
curl -L --fail --remote-name-all \
https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvf cilium-linux-amd64.tar.gz -C /usr/local/bin
# Installer Cilium sur le cluster courant
cilium install
# Vérifier le statut
cilium status
cilium connectivity test
Remplacement de kube-proxy
Cilium peut remplacer entièrement kube-proxy avec une implémentation eBPF plus performante.
# À l'installation avec kubeadm - désactiver kube-proxy
kubeadm init --skip-phases=addon/kube-proxy
# Installer Cilium avec kube-proxy replacement
helm install cilium cilium/cilium \
--namespace kube-system \
--set kubeProxyReplacement=true \
--set k8sServiceHost=<IP_CONTROL_PLANE> \
--set k8sServicePort=6443
NetworkPolicies
Cilium supporte les NetworkPolicies Kubernetes standard et ses propres CRDs étendus (CiliumNetworkPolicy, CiliumClusterwideNetworkPolicy) permettant des règles L7.
NetworkPolicy standard (L3/L4)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow-frontend
namespace: production
spec:
podSelector:
matchLabels:
app: api
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
CiliumNetworkPolicy (L7 - HTTP)
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-get-only
spec:
endpointSelector:
matchLabels:
app: api
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
- method: GET
path: "/api/.*"
Hubble - observabilité réseau
# Activer Hubble
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true
# Installer hubble CLI
cilium hubble enable
# Observer les flux réseau en temps réel
hubble observe --namespace production
# Voir les connexions refusées
hubble observe --verdict DROPPED
# Accéder à l'interface web Hubble
cilium hubble ui
Chiffrement du trafic inter-nœuds
# Activer WireGuard (kernel 5.6+)
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set encryption.enabled=true \
--set encryption.type=wireguard
Mise à jour
# Mettre à jour via Helm
helm repo update
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--version <nouvelle-version>
# Ou via cilium CLI
cilium upgrade
# Vérifier
cilium status
Troubleshooting
Vérifier l'état général
cilium status
cilium connectivity test
# État des pods Cilium
kubectl -n kube-system get pods -l k8s-app=cilium
kubectl -n kube-system logs -l k8s-app=cilium --tail=50
Pod sans connectivité réseau
# Vérifier les endpoints Cilium
kubectl -n kube-system exec ds/cilium -- cilium endpoint list
# Vérifier les politiques actives sur un endpoint
kubectl -n kube-system exec ds/cilium -- cilium policy get
# Diagnostics complets
cilium sysdump
Version kernel insuffisante
uname -r
# Si < 5.10, certaines fonctionnalités (kube-proxy replacement) ne fonctionneront pas
# Mettre à jour le kernel ou désactiver les fonctionnalités requérant 5.10+
Commandes utiles
# Statut global
cilium status
cilium connectivity test
# Endpoints
kubectl -n kube-system exec ds/cilium -- cilium endpoint list
kubectl -n kube-system exec ds/cilium -- cilium endpoint get <id>
# Politiques réseau
kubectl -n kube-system exec ds/cilium -- cilium policy get
# Hubble - flux réseau
hubble observe
hubble observe --namespace <ns>
hubble observe --verdict DROPPED
hubble observe --from-pod <pod>
# Services (remplacement kube-proxy)
kubectl -n kube-system exec ds/cilium -- cilium service list
Ressources
- Site officiel : https://cilium.io
- Documentation : https://docs.cilium.io
- GitHub : https://github.com/cilium/cilium
- Hubble : https://github.com/cilium/hubble
- CNCF graduation : https://www.cncf.io/announcements/2023/10/11/cloud-native-computing-foundation-announces-cilium-graduation/