Networking

Cilium

CNI Kubernetes basé sur eBPF, CNCF graduated (2023). NetworkPolicies L3-L7, remplacement de kube-proxy, observabilité Hubble. Minimum kernel 5.10 pour toutes les fonctionnalités.

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 base4.9
Remplacement kube-proxy5.10
WireGuard encryption5.6
Fonctionnalités complètes recommandées5.10+

Architecture

ComposantRôle
cilium-agentDaemonSet sur chaque nœud - charge les programmes eBPF
cilium-operatorGestion des ressources cluster (IPAM, CRDs)
HubbleObservabilité réseau (metrics, flows, service map)
hubble-relayAgrè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

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic