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éFlannelCalicoCilium
Réseau de base
Network Policies✅ (+ L7)
Couche 7 (HTTP, gRPC)
ObservabilitéBasiqueBasiqueHubble 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: 8080

Exemple : 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écis

Hubble — 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 ui

Hubble 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          # CiliumEndpoints

Liens