# Traefik (ingress cluster) — valeurs Helm # ⚠️ Traefik est installé/mis à jour HORS ArgoCD (helm au bootstrap, cf. # admin/k8s/talos.md). Ce fichier versionne la config ; l'appliquer avec : # helm upgrade traefik traefik/traefik -n infra -f k8s/infra/traefik/values.yaml # Chart traefik-40.1.0 (Traefik v3.7.1). # --- Réplique de la config existante (helm get values) --- service: type: LoadBalancer loadBalancerIP: 192.168.10.200 # VIP MetalLB — NE PAS changer # Préserve l'IP client réelle jusqu'à Traefik (sinon kube-proxy SNAT en Cluster → # Traefik voit l'IP d'un nœud). Requis pour le rate-limit par IP (middleware # ratelimit) et le X-Forwarded-For propagé aux apps (ban Guacamole par IP). # MetalLB L2 : la VIP n'est annoncée que depuis un nœud portant un pod Traefik prêt. spec: externalTrafficPolicy: Local ingressRoute: dashboard: enabled: true # Autorise les IngressRoutes (auth/ai/monitoring/argocd) à référencer les middlewares # mutualisés du namespace infra (ratelimit, security-headers). Défaut Traefik v3 = false. providers: kubernetesCRD: allowCrossNamespace: true logs: general: level: INFO ports: web: port: 80 websecure: port: 443 # --- Let's Encrypt (HTTP-01, un certificat par sous-domaine) --- # Pas de redirection HTTP→HTTPS globale : les services internes en *.lab.local # resteraient sinon cassés (Let's Encrypt ne certifie pas .lab.local). La redirection # est scopée à funklab.online via une IngressRoute dédiée (k8s/infra/traefik/redirect.yaml). certificatesResolvers: letsencrypt: acme: email: aliyesilkaya93@gmail.com storage: /data/acme.json httpChallenge: entryPoint: web # Stockage persistant de acme.json (sinon ré-émission à chaque redémarrage → # risque de rate-limit Let's Encrypt) persistence: enabled: true name: data accessMode: ReadWriteOnce size: 128Mi storageClass: nfs path: /data # acme.json doit être en 0600, sinon Traefik refuse de l'utiliser deployment: initContainers: - name: volume-permissions image: busybox:1.36 command: ["sh", "-c", "touch /data/acme.json && chmod 600 /data/acme.json"] volumeMounts: - name: data mountPath: /data