Traefik — edge router (граничный маршрутизатор) и reverse proxy, разработанный специально для динамических контейнерных сред. Ключевое отличие от Nginx: Traefik читает метки (labels) Docker-контейнеров, Kubernetes-аннотации и Consul-сервисы, автоматически строит конфигурацию маршрутизации без перезапуска и ручного редактирования файлов.
Принцип работы
Traefik подключается к провайдерам — источникам конфигурации: Docker API, Kubernetes API, Consul, etcd, файлы YAML/TOML. При запуске нового контейнера с нужными метками Traefik мгновенно добавляет маршрут без reload. Пример Docker Compose:
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`app.example.com`)"
- "traefik.http.services.app.loadbalancer.server.port=8080"
Traefik создаёт роутер для app.example.com, балансирует трафик на порт 8080 и автоматически выпускает SSL-сертификат через Let's Encrypt ACME. Сертификат обновляется без перезапуска Traefik.
Компоненты архитектуры Traefik v2/v3
- Entrypoints — точки входа: порт 80 (HTTP), 443 (HTTPS), 8080 (Dashboard API)
- Routers — правила маршрутизации по Host, Path, Header, Method, Query
- Middlewares — преобразования запросов: redirectScheme (HTTP→HTTPS), basicAuth, rateLimit, stripPrefix, compress, headers
- Services — backend-сервисы с балансировкой нагрузки: round-robin, weighted, sticky sessions
- Providers — источники конфигурации: Docker, Kubernetes CRD, Kubernetes Ingress, Consul, файлы
История
Traefik разработан Эмилем Вогом (Emile Vauge) в 2015 году, публично представлен как Open Source в 2016 году. Компания Containous (основана в 2016 году) развивала Traefik как Enterprise-продукт, в 2021 году переименована в Traefik Labs. Traefik v1.0 (2016) — первая стабильная версия. Traefik v2 (2019) переработал архитектуру: появились Middleware-слои, TCP/UDP-роутеры, поддержка gRPC и WebSocket. Traefik v3 (май 2024) добавил нативный Kubernetes Gateway API, OpenTelemetry и WASM Middleware. GitHub-репозиторий набрал более 48 000 звёзд к 2024 году.
Traefik vs Nginx vs Caddy
| Параметр | Traefik v3 | Nginx | Caddy v2 |
|---|---|---|---|
| Auto-discovery контейнеров | Docker, K8s, Consul | Нет (нужен nginx-proxy) | Нет |
| Let's Encrypt ACME | Встроенно, автоматически | Certbot отдельно | Встроенно |
| Dashboard UI | Да (порт 8080) | Нет | Нет |
| Производительность (RPS) | Высокая | Максимальная | Высокая |
| Kubernetes Ingress | Нативно | Ingress NGINX Controller | Нет |
| Обновление конфига | Zero-downtime, без reload | nginx -s reload | Автоматически |
На что обращать внимание
Dashboard Traefik на порту 8080 открыт без аутентификации по умолчанию — в продакшне обязательно закройте паролем или ограничьте по IP через Middleware basicAuth. При использовании в Docker Compose: Traefik должен быть в той же Docker-сети, что и проксируемые контейнеры. При Kubernetes Traefik устанавливается через Helm-чарт и конкурирует с Nginx Ingress Controller — выбор зависит от команды. Для статических сайтов без контейнеров Nginx по-прежнему проще в настройке. Traefik хранит Let's Encrypt-сертификаты в JSON-файле (acme.json) — его нужно сохранять при пересоздании контейнера через Docker Volume.