Traefik als reverse proxy: installatie, configuratie en gebruik
Traefik als reverse proxy: installatie, configuratie en gebruik
Dit artikel legt uit hoe je Traefik installeert en configureert als HTTP reverse proxy en load balancer, voor zowel lokale ontwikkeling als Kubernetes-omgevingen.
Vereisten
- Docker (versie 20.10 of hoger) voor lokale ontwikkeling - Kubernetes-cluster (versie 1.24 of hoger) voor productie-implementaties - Helm (versie 3.0 of hoger) voor Kubernetes-installatie - Toegang tot een domein of wildcard-DNS voor HTTPS-configuratie
Stappen
1. Installeer Traefik lokaal met Docker
Start Traefik met de standaardinstellingen. Dit draait de reverse proxy op poort 80 en 8080 (dashboard).
docker run -d -p 80:80 -p 8080:8080 --name traefik traefik:v3.1
2. Configureer Traefik met een configuratiebestand
Maak een configuratiebestand in TOML-formaat voor geavanceerdere setups. Dit bestand definieert entrypoints, providers en het dashboard.
[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 = trueStart Traefik met dit configuratiebestand:
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. Routeer verkeer naar services via Docker labels
Voeg Docker labels toe aan containers om ze automatisch te detecteren. Traefik leest deze labels en routeert verkeer naar de juiste service.
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. Configureer HTTPS met automatische certificaten
Schakel automatische TLS-certificaten in via Let's Encrypt. Traefik vraagt certificaten aan en vernieuwt ze automatisch.
[certificatesResolvers.letsencrypt]
[certificatesResolvers.letsencrypt.acme]
email = "admin@example.com"
storage = "/letsencrypt/acme.json"
[certificatesResolvers.letsencrypt.acme.tlsChallenge]5. Voeg middleware toe voor authenticatie en rate limiting
Definieer middleware in het configuratiebestand voor verkeersbeheer. Dit voegt authenticatie, rate limiting en header-manipulatie toe.
[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. Installeer Traefik als Ingress Controller in Kubernetes
Gebruik Helm om Traefik te installeren in je cluster. Dit installeert Traefik als Ingress Controller met automatische configuratie.
helm repo add traefik https://helm.traefik.io/traefik
helm repo update
helm install traefik traefik/traefik --values values-prod.yaml7. Definieer Ingress-routes in Kubernetes
Maak Ingress-resources aan om verkeer te routeren naar services binnen je 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. Update Traefik met atomic rollback
Werk Traefik bij met Helm. De `--atomic` flag zorgt dat bij een fout automatisch wordt teruggedraaid naar de vorige versie.
helm upgrade traefik traefik/traefik --atomic --values values-prod.yaml
Verificatie
Controleer of Traefik correct werkt. Het dashboard toont actieve routers, services en middleware.
Lokaal: check of het dashboard bereikbaar is
curl -I http://localhost:8080</p><p>Kubernetes: check de status van de Traefik pod
kubectl get pods -n default -l app.kubernetes.io/name=traefik</p><p>Kubernetes: check de Ingress-resources
kubectl get ingressVeelgestelde problemen
1. Traefik detecteert Docker-containers niet
Controleer of de Docker-socket correct is gemount en de `exposedByDefault`-instelling niet op `true` staat. Voeg expliciet `traefik.enable=true` toe aan elke container die je wilt blootstellen.
2. HTTPS-certificaten worden niet aangemaakt
Controleer of poort 443 openstaat en het `acme.json`-bestand schrijfbaar is. Let op: Let's Encrypt rate limits per domein — te veel aanvragen binnen een uur blokkeert nieuwe certificaten.
3. CORS-fouten bij lokale ontwikkeling
Dit gebeurt wanneer services op verschillende poorten draaien. Gebruik Traefik met subdomeinen (bijvoorbeeld `api.localhost` en `app.localhost`) zodat alle verzoeken via hetzelfde domein lopen. Configureer CORS-middleware als je cross-origin requests nodig hebt.
Traefik blijft zich ontwikkelen — de volgende grote versie voegt ondersteuning toe voor service mesh-integraties en verbeterde observability.