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
+6
View File
@@ -0,0 +1,6 @@
dependencies:
- name: traefik
repository: https://helm.traefik.io/traefik
version: 41.1.0
digest: sha256:62635ee99f7e539f6a9206239003249a65f4a4cf0e5606fecc9578ed0cfa31ef
generated: "2026-07-31T12:07:20.158740949+02:00"
+1 -1
View File
@@ -1,6 +1,6 @@
apiVersion: v2
name: gestion-traefik
description: Traefik ingress + Coraza WAF (OWASP CRS) — gestion-commande
description: Traefik partagé multi-tenant + Coraza WAF (OWASP CRS) — routeur unique pour toutes les démos, installé une seule fois (voir deploy/chart-gestion/ingressroute pour le routage par démo)
type: application
version: 0.1.0
appVersion: "3.1.0"
@@ -4,9 +4,3 @@ app.kubernetes.io/name: {{ .Chart.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{- define "gestion-traefik.certResolver" -}}
{{- if eq .Values.tls.mode "letsencrypt" -}}
letsencrypt
{{- end }}
{{- end }}
@@ -1,84 +0,0 @@
---
# HTTP → HTTPS redirect
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: gestion-http
namespace: {{ .Release.Namespace }}
labels:
{{- include "gestion-traefik.labels" . | nindent 4 }}
spec:
entryPoints:
- web
routes:
- match: Host(`{{ .Values.domain }}`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: noop@internal
kind: TraefikService
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: redirect-https
namespace: {{ .Release.Namespace }}
spec:
redirectScheme:
scheme: https
permanent: true
---
# HTTPS — routes principales
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: gestion-https
namespace: {{ .Release.Namespace }}
labels:
{{- include "gestion-traefik.labels" . | nindent 4 }}
spec:
entryPoints:
- websecure
routes:
# API backend — WAF + headers + rate limit
- match: Host(`{{ .Values.domain }}`) && (PathPrefix(`/api/`) || PathPrefix(`/webhook/`))
kind: Rule
priority: 20
middlewares:
- name: waf-chain
services:
- name: {{ .Values.backend.serviceName }}
namespace: {{ .Values.servicesNamespace }}
port: {{ .Values.backend.servicePort }}
# Fichiers uploadés — WAF désactivé dans les règles Coraza pour ce path
- match: Host(`{{ .Values.domain }}`) && PathPrefix(`/uploads/`)
kind: Rule
priority: 15
middlewares:
- name: security-headers
services:
- name: {{ .Values.backend.serviceName }}
namespace: {{ .Values.servicesNamespace }}
port: {{ .Values.backend.servicePort }}
# Frontend SPA — WAF + headers + rate limit
- match: Host(`{{ .Values.domain }}`)
kind: Rule
priority: 1
middlewares:
- name: waf-chain
services:
- name: {{ .Values.frontend.serviceName }}
namespace: {{ .Values.servicesNamespace }}
port: {{ .Values.frontend.servicePort }}
tls:
{{- if eq .Values.tls.mode "letsencrypt" }}
certResolver: letsencrypt
{{- else }}
secretName: {{ .Values.tls.secretName }}
{{- end }}
domains:
- main: {{ .Values.domain }}
@@ -1,3 +1,6 @@
# Certificat par défaut pour TOUTES les IngressRoute (ce namespace et les
# namespaces de démo) qui ne précisent pas tls.secretName — c'est le wildcard
# émis par cert-manager (voir deploy/cert-manager/wildcard-certificate.yml).
apiVersion: traefik.io/v1alpha1
kind: TLSStore
metadata:
@@ -6,11 +9,5 @@ metadata:
labels:
{{- include "gestion-traefik.labels" . | nindent 4 }}
spec:
{{- if eq .Values.tls.mode "secret" }}
defaultCertificate:
secretName: {{ .Values.tls.secretName }}
{{- end }}
defaultGeneratedCert:
resolver: {{ include "gestion-traefik.certResolver" . | default "letsencrypt" }}
domain:
main: {{ .Values.domain }}
+35 -40
View File
@@ -1,26 +1,16 @@
# =============================================================
# Paramètres spécifiques à ce chart (IngressRoutes, Middlewares)
# 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.
# =============================================================
# Namespace des services backend et frontend
servicesNamespace: gestion
domain: example.com
# 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:
# "letsencrypt" | "secret"
mode: letsencrypt
email: admin@example.com
# Si mode=secret : nom du Secret TLS Kubernetes
secretName: gestion-tls
backend:
serviceName: gestion-backend
servicePort: 8080
frontend:
serviceName: gestion-frontend
servicePort: 80
secretName: wildcard-demo-tls
waf:
paranoia: 2
@@ -37,27 +27,34 @@ rateLimit:
# https://github.com/traefik/traefik-helm-chart
# =============================================================
traefik:
# Expose les ports 80 et 443
# 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
redirectTo:
port: websecure
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
websecure:
port: 8443
expose:
default: true
tls:
enabled: true
http:
tls:
enabled: true
# Logs
logs:
general:
level: INFO
access:
enabled: true
log:
level: INFO
accessLog:
enabled: true
# Plugin Coraza WAF — Traefik télécharge le plugin au démarrage
# (le cluster doit avoir accès à internet ou utiliser un plugin local)
@@ -67,20 +64,18 @@ traefik:
moduleName: "github.com/corazawaf/coraza-traefik"
version: "v0.3.0"
# Cert resolver Let's Encrypt (ignoré si tls.mode=secret)
certResolvers:
letsencrypt:
email: admin@example.com
storage: /data/acme.json
httpChallenge:
entryPoint: web
# 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
# ACME storage persistant — plus nécessaire sans resolver Traefik interne,
# conservé désactivé par défaut.
persistence:
enabled: true
size: 128Mi
enabled: false
# Traefik lit les IngressRoutes dans tous les namespaces
# 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