Traefik Reverse Proxy: Moderner Load Balancer für Docker und Kubernetes
Traefik ist ein moderner Edge Router und Reverse Proxy, der für Microservice-Architekturen entwickelt wurde. Dank seiner tiefen Integration mit Docker und Kubernetes erkennt und leitet er Services automatisch weiter.
Was ist Traefik?
Hauptmerkmale von Traefik:
Automatische Service-Erkennung: Automatisches Routing über Docker/Kubernetes-Labels
Mehrere Provider: Docker, Kubernetes, Consul, etcd-Unterstützung
TCP/UDP-Routing: Unterstützung für Nicht-HTTP-Protokolle
Traefik v3 bietet bessere Performance und neue Funktionen im Vergleich zu v2. Dieser Leitfaden konzentriert sich auf Traefik v3.
Traefik v3 Installation
Installation mit Docker Compose
hljs yaml
# docker-compose.ymlservices:traefik:image:traefik:v3.0container_name:traefikrestart:unless-stoppedports:-"80:80"-"443:443"-"8080:8080"# Dashboard (in Production schließen)volumes:-/var/run/docker.sock:/var/run/docker.sock:ro-./traefik.yml:/etc/traefik/traefik.yml:ro-./config:/etc/traefik/config:ro-traefik_certs:/certsnetworks:-traefik-netlabels:-"traefik.enable=true"# Dashboard-"traefik.http.routers.dashboard.rule=Host(`traefik.example.com`)"-"traefik.http.routers.dashboard.service=api@internal"-"traefik.http.routers.dashboard.middlewares=auth"-"traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$xyz$$hash"-"traefik.http.routers.dashboard.tls.certresolver=letsencrypt"volumes:traefik_certs:networks:traefik-net:external:true
services:api:image:myapi:latestnetworks:-traefik-netlabels:-"traefik.enable=true"-"traefik.http.routers.api.rule=Host(`api.example.com`)"-"traefik.http.routers.api.entrypoints=websecure"-"traefik.http.routers.api.tls.certresolver=letsencrypt"-"traefik.http.services.api.loadbalancer.server.port=3000"# Health Check-"traefik.http.services.api.loadbalancer.healthcheck.path=/health"-"traefik.http.services.api.loadbalancer.healthcheck.interval=30s"frontend:image:myfrontend:latestnetworks:-traefik-netlabels:-"traefik.enable=true"-"traefik.http.routers.frontend.rule=Host(`example.com`) || Host(`www.example.com`)"-"traefik.http.routers.frontend.entrypoints=websecure"-"traefik.http.routers.frontend.tls.certresolver=letsencrypt"-"traefik.http.services.frontend.loadbalancer.server.port=80"networks:traefik-net:external:true
Middleware-Konfiguration
Statische Middleware (traefik.yml oder Konfigurationsdatei)
# Passwort mit htpasswd generierenecho $(htpasswd -nB admin) | sed -e s/\\$/\\$\\$/g
# Oder mit opensslecho"admin:$(openssl passwd -apr1 'IhrPasswort')" | sed -e 's/\$/\$\$/g'
# Load Balancing mit mehreren Instanzenservices:api:image:myapi:latestdeploy:replicas:3networks:-traefik-netlabels:-"traefik.enable=true"-"traefik.http.routers.api.rule=Host(`api.example.com`)"-"traefik.http.services.api.loadbalancer.server.port=3000"# Sticky Sessions-"traefik.http.services.api.loadbalancer.sticky.cookie=true"-"traefik.http.services.api.loadbalancer.sticky.cookie.name=traefik_session"-"traefik.http.services.api.loadbalancer.sticky.cookie.secure=true"# Health Check-"traefik.http.services.api.loadbalancer.healthcheck.path=/health"-"traefik.http.services.api.loadbalancer.healthcheck.interval=10s"-"traefik.http.services.api.loadbalancer.healthcheck.timeout=3s"
Fazit
Traefik ist eine leistungsstarke Reverse-Proxy- und Load-Balancer-Lösung für moderne Microservice-Infrastrukturen. Mit seiner tiefen Integration in Docker und Kubernetes, automatischem SSL-Management und einem reichen Middleware-Ökosystem ist es eine zuverlässige Wahl für Produktionsumgebungen. Dank der Label-basierten Konfiguration kann jeder Service seine eigenen Routing-Regeln definieren.
Häufig gestellte Fragen
Was ist der Hauptunterschied zwischen Traefik und Nginx?
Traefik hat eine tiefe Integration mit Docker/Kubernetes und erkennt Services automatisch. Nginx erfordert statische Konfiguration und benötigt bei jeder Änderung einen Reload. Traefik unterstützt dynamische Konfiguration und aktualisiert sich ohne Downtime. Nginx ist ausgereifter und kann bei sehr hohem Traffic besser performen. Traefik wird für Microservice-Umgebungen bevorzugt, Nginx für traditionelle Webserver.
Wie halte ich das Traefik-Dashboard in der Production sicher?
Öffnen Sie das Dashboard niemals im unsicheren Modus (Port 8080) in der Production. Schützen Sie das Dashboard mit HTTPS und Basic Auth durch Labels am Traefik-Container. Beschränken Sie den Zugriff auf bestimmte IPs mit der IP-Whitelist-Middleware. Alternativ können Sie das Dashboard vollständig deaktivieren und Prometheus/Grafana zur Überwachung verwenden.
Wie wird die DNS-Challenge für Let's Encrypt Wildcard-Zertifikate konfiguriert?
Setzen Sie den dnsChallenge-Provider unter certificatesResolvers in traefik.yml. Für Cloudflare sind 'provider: cloudflare' und die Umgebungsvariable 'CF_DNS_API_TOKEN' erforderlich. Definieren Sie die relevanten API-Schlüssel als Umgebungsvariablen für andere DNS-Provider. DNS-Challenge ist sicherer als HTTP-Challenge und ermöglicht die Ausstellung von Wildcard-Zertifikaten.
Ist die Middleware-Reihenfolge in Traefik wichtig?
Ja, Middlewares werden in der Reihenfolge angewendet, in der sie definiert sind. Die allgemein empfohlene Reihenfolge ist: IP-Whitelist → Rate Limit → Auth → Headers. Falsche Reihenfolge kann zu unerwartetem Verhalten führen. Wenn Sie beispielsweise die Auth-Middleware vor dem Rate Limiting platzieren, werden auch nicht authentifizierte Anfragen in das Rate Limit einbezogen.
Wie erreicht man Zero-Downtime-Deployment mit Traefik?
Verwenden Sie Rolling Updates in Docker Swarm oder Kubernetes. Traefik leitet Traffic automatisch weiter, wenn neue Container bereit sind. Die Health-Check-Konfiguration ist entscheidend: An ungesunde Container wird kein Traffic gesendet. Definieren Sie den Health-Check-Endpunkt mit dem Label 'traefik.http.services.myapp.loadbalancer.healthcheck.path=/health'.
Wie erhalte ich ein einzelnes Zertifikat (SAN) für mehrere Domains in Traefik?
Traefik erhält für jede Domain separate Zertifikate. Verwenden Sie für mehrere Domains 'Host(`a.com`) || Host(`b.com`)' in der Router-Regel. Separate Zertifikate werden automatisch für jede Domain ausgestellt. DNS-Challenge ist für Wildcard-Zertifikate erforderlich. Für SAN-Zertifikate kann manuelle Konfiguration oder die Verwendung externer Zertifikate erforderlich sein.
Multi-Container-Anwendungen mit Docker Compose definieren und verwalten: Service-Abhängigkeiten, Umgebungsvariablen, Health Checks, Skalierung und Production-Deployment. Umfassender Leitfaden.
CI/CD-Pipelines mit GitHub Actions erstellen: Docker Build und Push, SSH-Server-Deployment, Test-Automatisierung, Secrets-Verwaltung und Workflow-Optimierung.