NetworkPolicies

De wiki.nexiat.fr
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.
  • DirectionsIngress (entrant) et Egress (sortant), indépendantes.
  • SélecteurspodSelector, 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.

Voir aussi