1. Installer avec Helm #
Le chart officiel.
Installation #
helm repo add traefik https://traefik.github.io/charts
helm repo update
helm upgrade --install traefik traefik/traefik -n traefik --create-namespace \
--set deployment.replicas=2 \
--set providers.kubernetesGateway.enabled=true
kubectl -n traefik get pods,svcTrois façons de déclarer une route #
| Objet | Avantages | Limites |
|---|---|---|
Ingress (standard) | Portable entre contrôleurs | Peu expressif ; options par annotations |
IngressRoute (CRD Traefik) | Toutes les fonctions de Traefik, middlewares natifs | Spécifique à Traefik |
HTTPRoute (Gateway API) | Standard moderne, rôles séparés (Gateway / Route) | Support des filtres variable selon le contrôleur |
2. Exemples #
IngressRoute et Gateway API.
IngressRoute avec middleware #
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata: { name: securite, namespace: app }
spec:
headers: { stsSeconds: 31536000, contentTypeNosniff: true }
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata: { name: app, namespace: app }
spec:
entryPoints: [websecure]
routes:
- match: Host(`app.exemple.fr`)
kind: Rule
middlewares: [{ name: securite }]
services: [{ name: app, port: 80 }]
tls: { secretName: app-tls }HTTPRoute (Gateway API) #
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata: { name: app, namespace: app }
spec:
parentRefs: [{ name: traefik-gateway, namespace: traefik }]
hostnames: ["app.exemple.fr"]
rules:
- matches: [{ path: { type: PathPrefix, value: /api } }]
backendRefs: [{ name: api, port: 8080 }]3. Production #
Disponibilité, certificats, sécurité.
Règles #
- Au moins deux réplicas, un
PodDisruptionBudgetet une anti-affinité pour les répartir sur plusieurs nœuds. - Certificats : cert-manager qui crée les Secrets TLS ; le résolveur ACME intégré stocke son état dans un fichier, peu adapté à plusieurs réplicas.
externalTrafficPolicy: Localpour conserver l'adresse IP réelle des clients.- Tableau de bord non exposé publiquement ; métriques Prometheus activées.
- Limiter les namespaces surveillés (
providers.kubernetesCRD.namespaces) sur un cluster partagé.
kubectl get ingressroute,middleware -A
kubectl -n traefik logs deploy/traefik --tail=50
kubectl -n traefik port-forward deploy/traefik 9000:9000 # tableau de bord en local : http://localhost:9000/dashboard/