chore: update
ci-api / test (push) Successful in 24m53s

This commit is contained in:
Nuxgrid
2026-07-31 13:25:03 +02:00
parent ac8bdbcab7
commit dce80908e3
31 changed files with 740 additions and 155 deletions
@@ -0,0 +1,6 @@
apiVersion: v2
name: gestion-network-policy
description: Isolation réseau stricte d'une démo — deny-by-default, aucune communication inter-démos, pas d'accès à l'API Kubernetes ni à kube-dns au-delà du port 53
type: application
version: 0.1.0
appVersion: "1.0.0"
@@ -0,0 +1,106 @@
# -------------------------------------------------------------------
# 1. Deny-by-default : sans règle explicite plus bas, AUCUN trafic entrant
# ni sortant n'est autorisé pour les pods de ce namespace. C'est ce qui
# empêche par défaut toute communication vers un autre namespace de démo
# et vers l'API Kubernetes.
# -------------------------------------------------------------------
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
---
# -------------------------------------------------------------------
# 2. Trafic intra-démo : frontend <-> backend <-> postgresql/redis, dans
# CE namespace uniquement (le podSelector du namespaceSelector par défaut
# de Kubernetes limite déjà à ce namespace : pas de namespaceSelector ici
# équivaut à "même namespace").
# -------------------------------------------------------------------
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-intra-namespace
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector: {}
egress:
- to:
- podSelector: {}
---
# -------------------------------------------------------------------
# 3. Ingress externe autorisé : uniquement depuis le Traefik partagé
# (aucune autre démo, aucun autre client, ne peut ouvrir de connexion
# directe vers les pods de cette démo).
# -------------------------------------------------------------------
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-from-traefik
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: {{ .Values.traefikNamespace }}
---
# -------------------------------------------------------------------
# 4. DNS uniquement vers kube-system, port 53. C'est la SEULE ouverture vers
# kube-system : aucun accès à autre chose dans ce namespace, et l'API
# server (kubernetes.default.svc, namespace "default") n'est jamais
# autorisé nulle part dans ce chart -> bloqué par le deny-by-default.
# -------------------------------------------------------------------
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-egress-dns
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: {{ .Values.kubeSystemNamespace }}
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
---
# -------------------------------------------------------------------
# 5. Internet public sortant (webhooks Telegram/NowPayments, GPS TomTom...),
# en excluant les plages privées : ça couvre par construction l'IP de
# l'API server et celles des autres namespaces, sans avoir besoin de la
# connaître explicitement.
# -------------------------------------------------------------------
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-egress-internet
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
{{- toYaml .Values.blockedEgressCIDRs | nindent 14 }}
@@ -0,0 +1,25 @@
# IMPORTANT : les NetworkPolicy ne sont appliquées que si le CNI du cluster
# les supporte (Calico, Cilium, Weave...). Avec un CNI qui ne les enforce pas
# (ex: flannel seul), ce chart s'installe sans erreur mais n'isole RIEN —
# à vérifier avant de considérer l'isolation comme active.
# Namespace où tourne CoreDNS (résolution de noms) — seul port autorisé en
# egress vers ce namespace : 53 (DNS). Aucun autre accès à kube-system,
# donc pas d'accès à l'API server (kubernetes.default.svc vit dans le
# namespace "default", pas dans kube-system, et n'est de toute façon jamais
# ajouté aux règles autorisées ci-dessous : bloqué par omission).
kubeSystemNamespace: kube-system
# Namespace du Traefik partagé (voir deploy/chart-gestion/traefik) : seule
# origine externe autorisée à ouvrir une connexion ingress vers cette démo.
traefikNamespace: traefik
# Plages privées exclues de l'egress "internet" autorisé (RFC1918) : empêche
# tout mouvement latéral vers d'autres pods/namespaces/nœuds/l'API server par
# IP directe, tout en laissant sortir vers l'internet public (Telegram,
# NowPayments, TomTom, etc.). Si le CIDR des pods/services de votre cluster
# ne tombe pas dans ces plages standard, ajoutez-le ici.
blockedEgressCIDRs:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16