NetworkPolicies
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Pare-feu natif Kubernetes (niveau Pod) |
| Posture cible | default-deny |
| Portée standard | L3/L4 (IP, port, protocole) |
| Portée L7 | Via CNI compatible (Cilium) |
| Voir aussi | CNI — Panorama et choix · Cilium et eBPF · Egress et air-gap |
Les NetworkPolicies sont le pare-feu natif de Kubernetes au niveau des Pods : elles contrôlent le trafic est-ouest (entre Pods) et la sortie. Posture cible : default-deny, isolation par namespace. Le CNI en assure l'application (voir CNI — Panorama et choix) — sans CNI compatible, les policies sont ignorées.
Modèle
- Additives — sans policy, tout est autorisé. Dès qu'une policy sélectionne un Pod, ce Pod devient isolé pour la direction concernée, et seuls les flux explicitement autorisés passent.
- Directions —
Ingress(entrant) etEgress(sortant), indépendantes. - Sélecteurs —
podSelector,namespaceSelector,ipBlock(CIDR). - Portée — standard : L3/L4 (IP, port, protocole). Pour du L7 (HTTP, gRPC), il faut un CNI comme Cilium (CRD
CiliumNetworkPolicy).
Posture default-deny
Bloquer tout le trafic entrant et sortant d'un namespace, puis rouvrir au cas par cas :
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: prod
spec:
podSelector: {} # tous les pods du namespace
policyTypes: [Ingress, Egress]
Ne pas oublier de réautoriser le DNS (CoreDNS), sinon plus aucune résolution :
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns
namespace: prod
spec:
podSelector: {}
policyTypes: [Egress]
egress:
- to:
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: kube-system }
ports:
- { protocol: UDP, port: 53 }
- { protocol: TCP, port: 53 }
Isolation par namespace
<mermaid> flowchart LR
subgraph frontend
F[Pods front]
end
subgraph backend
B[Pods API]
end
subgraph data
D[(BDD)]
end
F -->|autorisé| B
B -->|autorisé| D
F -.refusé.-> D
</mermaid>
Un motif courant : chaque namespace en default-deny, et n'autoriser que les flux inter-namespaces strictement nécessaires (front → api → data), en interdisant les raccourcis.
Bonnes pratiques
- Commencer par default-deny puis ouvrir : plus sûr que l'inverse.
- Toujours réautoriser DNS (et éventuellement les sondes/kubelet selon le CNI).
- S'appuyer sur Hubble pour observer les flux réels avant/après application.
- Pour du filtrage applicatif (chemins HTTP), passer en policies L7 (Cilium).
- Le contrôle des flux sortants vers l'extérieur relève d'Egress et air-gap.