Traefik comme reverse proxy : installation, configuration et utilisation
Traefik comme reverse proxy : installation, configuration et utilisation
Cet article explique comment installer et configurer Traefik comme reverse proxy HTTP et load balancer, tant pour le développement local que pour les environnements Kubernetes.
Prérequis
- Docker (version 20.10 ou supérieure) pour le développement local - Cluster Kubernetes (version 1.24 ou supérieure) pour les déploiements en production - Helm (version 3.0 ou supérieure) pour l'installation Kubernetes - Accès à un domaine ou à un DNS wildcard pour la configuration HTTPS
Étapes
1. Installez Traefik localement avec Docker
Démarrez Traefik avec les paramètres par défaut. Cela exécute le reverse proxy sur les ports 80 et 8080 (tableau de bord).
docker run -d -p 80:80 -p 8080:8080 --name traefik traefik:v3.1
2. Configurez Traefik avec un fichier de configuration
Créez un fichier de configuration au format TOML pour des configurations plus avancées. Ce fichier définit les entrypoints, les providers et le tableau de bord.
[entryPoints]
[entryPoints.web]
address = ":80"
[entryPoints.websecure]
address = ":443"</p><p>[providers]
[providers.docker]
endpoint = "unix:///var/run/docker.sock"
exposedByDefault = false</p><p>[api]
dashboard = trueDémarrez Traefik avec ce fichier de configuration :
docker run -d -p 80:80 -p 443:443 -p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd)/traefik.toml:/etc/traefik/traefik.toml \
--name traefik traefik:v3.13. Routez le trafic vers les services via les labels Docker
Ajoutez des labels Docker aux conteneurs pour les détecter automatiquement. Traefik lit ces labels et route le trafic vers le service approprié.
docker run -d \
--label "traefik.enable=true" \
--label "traefik.http.routers.api.rule=Host(\`api.localhost\`)" \
--label "traefik.http.services.api.loadbalancer.server.port=5000" \
--name api my-api-image:latest4. Configurez HTTPS avec des certificats automatiques
Activez les certificats TLS automatiques via Let's Encrypt. Traefik demande les certificats et les renouvelle automatiquement.
[certificatesResolvers.letsencrypt]
[certificatesResolvers.letsencrypt.acme]
email = "admin@example.com"
storage = "/letsencrypt/acme.json"
[certificatesResolvers.letsencrypt.acme.tlsChallenge]5. Ajoutez du middleware pour l'authentification et le rate limiting
Définissez du middleware dans le fichier de configuration pour la gestion du trafic. Cela ajoute l'authentification, le rate limiting et la manipulation des en-têtes.
[http.middlewares]
[http.middlewares.rate-limit]
[http.middlewares.rate-limit.rateLimit]
average = 100
burst = 50</p><p> [http.middlewares.auth]
[http.middlewares.auth.basicAuth]
users = ["admin:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"]6. Installez Traefik comme Ingress Controller dans Kubernetes
Utilisez Helm pour installer Traefik dans votre cluster. Cela installe Traefik comme Ingress Controller avec une configuration automatique.
helm repo add traefik https://helm.traefik.io/traefik
helm repo update
helm install traefik traefik/traefik --values values-prod.yaml7. Définissez des routes Ingress dans Kubernetes
Créez des ressources Ingress pour router le trafic vers les services au sein de votre cluster.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
spec:
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 50008. Mettez à jour Traefik avec un rollback atomique
Mettez à jour Traefik avec Helm. Le flag `--atomic` garantit qu'en cas d'erreur, un retour automatique à la version précédente est effectué.
helm upgrade traefik traefik/traefik --atomic --values values-prod.yaml
Vérification
Vérifiez que Traefik fonctionne correctement. Le tableau de bord affiche les routers, services et middleware actifs.
Local : vérifiez que le tableau de bord est accessible
curl -I http://localhost:8080</p><p>Kubernetes : vérifiez le statut du pod Traefik
kubectl get pods -n default -l app.kubernetes.io/name=traefik</p><p>Kubernetes : vérifiez les ressources Ingress
kubectl get ingressProblèmes fréquents
1. Traefik ne détecte pas les conteneurs Docker
Vérifiez que le socket Docker est correctement monté et que le paramètre `exposedByDefault` n'est pas sur `true`. Ajoutez explicitement `traefik.enable=true` à chaque conteneur que vous souhaitez exposer.
2. Les certificats HTTPS ne sont pas créés
Vérifiez que le port 443 est ouvert et que le fichier `acme.json` est inscriptible. Attention : Let's Encrypt applique des limites de taux par domaine — trop de demandes en une heure bloque la création de nouveaux certificats.
3. Erreurs CORS lors du développement local
Cela se produit lorsque les services tournent sur des ports différents. Utilisez Traefik avec des sous-domaines (par exemple `api.localhost` et `app.localhost`) afin que toutes les requêtes passent par le même domaine. Configurez un middleware CORS si vous avez besoin de requêtes cross-origin.
Traefik continue d'évoluer — la prochaine grande version ajoutera la prise en charge des intégrations service mesh et une observabilité améliorée.