@@ -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,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"
|
||||
|
||||
Binary file not shown.
@@ -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 }}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user