Modern Network Engineering
Chapitre 14
14 — Container Networking
> CNI (Calico, Flannel, Weave, Cilium), Docker Networking, Kubernetes Networking, eBPF (Cilium, Hubble, Tetragon), Network Policies
Cours 14 — Container Networking
1. CNI (Container Network Interface)
1.1 Architecture
CNI est un standard pour configurer les interfaces réseau des conteneurs.
Diagramme en cours de génération...
Fonctionnement :
- Le runtime appelle le plugin CNI avec
ADD/DEL - Le plugin configure le réseau dans le namespace du conteneur
- Le plugin assigne une IP et configure les routes
1.2 Plugins CNI standards
| Plugin | Description |
|---|---|
| bridge | Crée un bridge Linux, connecte les conteneurs via veth |
| host-local | Alloue des IPs depuis un range local |
| portmap | Port forwarding (iptables) |
| macvlan | MAC address virtuelle, bridge direct |
| ipvlan | IP address virtuelle, même MAC |
| loopback | Interface lo dans le namespace |
1.3 Configuration CNI
{
"cniVersion": "1.0.0",
"name": "mynet",
"plugins": [
{
"type": "bridge",
"bridge": "cni-bridge0",
"ipam": {
"type": "host-local",
"ranges": [
[{"subnet": "10.100.0.0/16"}]
],
"routes": [
{"dst": "0.0.0.0/0"}
]
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true}
}
]
}
1.4 CNI Plugins populaires
Diagramme en cours de génération...
| Plugin | Technologie | Performance | Fonctionnalités |
|---|---|---|---|
| Calico | BGP + iptables | Bonne | Network Policies, WireGuard |
| Flannel | VXLAN | Moyenne | Simple, overlay |
| Weave | fastdp | Bonne | Chiffrement intégré |
| Cilium | eBPF | Excellente | L7 policies, Hubble, mTLS |
| AWS VPC CNI | Elastic ENI | Excellente | IPs VPC natives |
2. Docker Networking
2.1 Modes réseau Docker
Diagramme en cours de génération...
bridge :
docker network create --driver bridge my-bridge
docker run --network my-bridge nginx
overlay (Swarm) :
docker swarm init
docker network create --driver overlay --attachable my-overlay
docker service create --network my-overlay --name web nginx
macvlan :
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my-macvlan
3. Kubernetes Networking
3.1 Modèle réseau K8s
Kubernetes impose 3 règles fondamentales :
- Tous les pods peuvent communiquer avec tous les pods (sans NAT)
- Tous les nodes peuvent communiquer avec tous les pods (sans NAT)
- L'IP vue par un pod est son IP réelle (pas de NAT)
Diagramme en cours de génération...
3.2 Pod-to-Pod
Diagramme en cours de génération...
3.3 Service — kube-proxy
Les services K8s sont implémentés par kube-proxy (iptables, IPVS, ou userspace).
Diagramme en cours de génération...
# Voir les règles kube-proxy (iptables mode)
iptables -t nat -L KUBE-SERVICES
iptables -t nat -L KUBE-SVC-XXXXX
3.4 Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts: [app.example.com]
secretName: app-tls
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
3.5 Egress
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-egress-dns
spec:
podSelector:
matchLabels:
app: web
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
4. Network Policies
4.1 Principe
Les Network Policies contrôlent le trafic pod-level (comme un Security Group pour pods).
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web-policy
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
- ipBlock:
cidr: 10.0.0.0/16
except:
- 10.0.1.0/24
ports:
- port: 80
- port: 443
egress:
- to:
- podSelector:
matchLabels:
app: database
ports:
- port: 5432
4.2 Isolation
Diagramme en cours de génération...
5. eBPF
5.1 Architecture eBPF
Diagramme en cours de génération...
5.2 Cilium
Cilium utilise eBPF pour remplacer kube-proxy, CNI, et Network Policies.
Diagramme en cours de génération...
Avantages Cilium :
- ~10x performance vs iptables
- Network Policies L7 (HTTP, gRPC, Kafka)
- Hubble pour l'observabilité
- kube-proxy replacement
- ClusterMesh multi-cluster
5.3 Hubble
# Hubble CLI
hubble observe --namespace default
hubble observe --pod web-5f4d4c7b8f-x9k2j -f
hubble observe --protocol http --verdict DROPPED
hubble status
5.4 Tetragon
Tetragon (anciennement Tracee) fait du security monitoring basé eBPF :
# Détection d'événements
tetra --process -o json
tetra --capabilities -o table
Résumé
Diagramme en cours de génération...