# ============================================================= # Traefik partagé multi-tenant : un seul déploiement pour toutes les démos. # Le routage par démo (Host -> Service) est fourni par le chart # deploy/chart-gestion/ingressroute, installé une fois par namespace de démo. # ============================================================= # TLS : certificat wildcard émis une fois par cert-manager # (voir deploy/cert-manager/), référencé ici comme certificat par défaut # du TLSStore. Toutes les IngressRoute (dans ce namespace ou les namespaces # de démo) qui ne précisent pas de tls.secretName utilisent automatiquement # ce certificat. tls: secretName: wildcard-demo-tls waf: paranoia: 2 anomalyInbound: 5 anomalyOutbound: 4 rateLimit: # requêtes moyennes par seconde par IP average: 20 burst: 50 # ============================================================= # Valeurs passées au subchart officiel traefik # https://github.com/traefik/traefik-helm-chart # ============================================================= traefik: # Expose les ports 80 et 443. Le port web redirige automatiquement vers # websecure au niveau de l'entrypoint (pas besoin d'IngressRoute dédiée). # Schéma valable pour le chart traefik/traefik >= 34 (vendored : 41.1.0, # voir charts/traefik-41.1.0.tgz). ports: web: port: 8000 expose: default: true http: redirections: entryPoint: to: websecure scheme: https permanent: true websecure: port: 8443 expose: default: true http: tls: enabled: true # Logs log: level: INFO accessLog: enabled: true # Plugin Coraza WAF — module/version confirmés directement depuis les tags # git du dépôt (github.com/jcchavezs/coraza-http-wasm-traefik, dernier tag # v0.3.0, vérifié via l'API GitHub le 2026-08-03) et son .traefik.yml # (runtime: wasm, type: middleware). L'ancien module "github.com/corazawaf/ # coraza-traefik" n'existe pas (404 au chargement) et cassait toute la # chaîne de middlewares — ne jamais y revenir. Le CRS (OWASP Core Rule Set) # est embarqué dans le binaire WASM du plugin (voir coraza-http-wasm/main.go, # includeCRS=true par défaut) : les directives "Include @owasp_crs/*.conf" # etc. dans templates/middleware-waf.yaml fonctionnent sans fichiers externes. experimental: plugins: coraza-traefik: moduleName: github.com/jcchavezs/coraza-http-wasm-traefik version: v0.3.0 # ACME interne désactivé : c'est cert-manager qui gère le cycle de vie du # certificat wildcard (voir deploy/cert-manager/), Traefik ne fait que le # consommer via le TLSStore (templates/tlsstore.yaml). # ACME storage persistant — plus nécessaire sans resolver Traefik interne, # conservé désactivé par défaut. persistence: enabled: false # Traefik lit les IngressRoute/Middleware dans tous les namespaces de démo, # et peut référencer les Middlewares partagés (waf-chain) définis ici depuis # une IngressRoute d'un autre namespace. providers: kubernetesCRD: enabled: true allowCrossNamespace: true # Cluster (pas Local) : sur un cluster bare-metal multi-nœuds sans # LoadBalancer, "Local" fait DROP le trafic NodePort sur tout nœud qui ne # fait pas tourner le pod Traefik (comportement kube-proxy documenté — # "has no local endpoints"), donc l'URL casse selon le nœud contacté et # où le pod est schedulé. "Cluster" relaie toujours vers le bon nœud, au # prix de perdre l'IP réelle du client (SNAT par kube-proxy) — le # rate-limiter/logs verront l'IP du nœud plutôt que celle du client tant # qu'il n'y a pas de LoadBalancer (MetalLB) devant. service: spec: externalTrafficPolicy: Cluster # Métriques Prometheus metrics: prometheus: enabled: true # Ressources resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 256Mi