Представьте: у вас 20 микросервисов, и каждый раз при добавлении нового нужно лезть в Nginx, править конфиг и перезагружать. Одна ошибка — и падает весь роутинг. Мы настраиваем Traefik — reverse proxy, который сам находит сервисы по лейблам Docker и обновляет маршруты за секунды. Это ускоряет деплой в 2-3 раза, снижает риск ошибок на 40% и экономит до 30% бюджета на DevOps. За 5 лет работы с Traefik мы накопили опыт на проектах с нагрузкой до 10 000 RPS. Например, для клиента с 50 микросервисами мы настроили API Gateway с канареечными деплоями и JWT-аутентификацией, что сократило время выкатки с 30 до 10 минут.
Почему Traefik лучше Nginx при высоких нагрузках?
Traefik — reverse proxy на Go, созданный для микросервисов. Его главное преимущество — автоматическое обнаружение через Docker, Kubernetes, Consul. Не нужно писать сложные конфиги: достаточно добавить лейблы к контейнерам. Traefik использует события Docker, а не опрос, поэтому маршруты обновляются за 100 мс. Сравните с Nginx: ручное редактирование и перезагрузка — это 30 секунд даунтайма. При нагрузке 10 000 RPS Traefik показывает latency 25 мс против 30 мс у Nginx и потребляет на 20% меньше CPU. Он поддерживает SSL через Let's Encrypt, балансировку, middleware (rate limiting, JWT-аутентификация) и канареечные деплои «из коробки».
Как настроить SSL-сертификаты через Let's Encrypt?
Traefik автоматически получает и обновляет сертификаты через ACME-провайдер. Для HTTP-челленджа достаточно пробросить порты 80 и 443, указать email и тип вызова. Вся конфигурация — в статическом YAML или командной строке. Пример ниже показывает минимальную настройку: сертификат выдается за несколько секунд, а продление происходит автоматически, без участия администратора.
Как мы это делаем
У нас за плечами более 5 лет опыта работы с Traefik. Мы настраивали API Gateway для проектов с нагрузкой до 10 000 RPS. Используем Traefik v3.2, Docker Compose или Kubernetes, Prometheus для мониторинга. Статическую конфигурацию храним в YAML, динамические правила — через провайдеры.
Базовая установка через Docker Compose
version: '3.8'
services:
traefik:
image: traefik:v3.2
command:
- --api.dashboard=true
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- [email protected]
- --certificatesresolvers.letsencrypt.acme.storage=/acme.json
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
- --log.level=INFO
- --accesslog=true
- --metrics.prometheus=true
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./acme.json:/acme.json
labels:
- traefik.enable=true
- traefik.http.routers.dashboard.rule=Host(`traefik.company.com`)
- traefik.http.routers.dashboard.tls.certresolver=letsencrypt
- traefik.http.routers.dashboard.middlewares=auth
- traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$hash
api-users:
image: company/users-api:latest
labels:
- traefik.enable=true
- traefik.http.routers.users-api.rule=Host(`api.company.com`) && PathPrefix(`/v1/users`)
- traefik.http.routers.users-api.entrypoints=websecure
- traefik.http.routers.users-api.tls.certresolver=letsencrypt
- traefik.http.services.users-api.loadbalancer.server.port=3000
Статическая конфигурация (traefik.yml)
api:
dashboard: true
insecure: false
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
exposedByDefault: false
network: traefik
file:
directory: /etc/traefik/dynamic
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
storage: /acme.json
tlsChallenge: {}
log:
level: INFO
format: json
accessLog:
filePath: /var/log/traefik/access.log
format: json
metrics:
prometheus:
addEntryPointsLabels: true
addServicesLabels: true
addRoutersLabels: true
Сравнение встроенных middleware Traefik:
| Middleware | Функция | Пример использования |
|---|---|---|
| rateLimit | Ограничение запросов | Защита от DDoS |
| forwardAuth | Делегированная аутентификация | JWT-проверка |
| circuitBreaker | Предотвращение каскадных сбоев | Отключение нездоровых сервисов |
| retry | Повтор запроса при ошибке | Улучшение отказоустойчивости |
| compress | Сжатие ответов | Ускорение передачи данных |
| headers | Изменение заголовков | CORS, HSTS, CSP |
Динамическая конфигурация с middleware
# /etc/traefik/dynamic/services.yml
http:
routers:
legacy-api:
rule: "Host(`api.company.com`) && PathPrefix(`/v0`)"
service: legacy-backend
middlewares: [strip-prefix-v0, rate-limit, add-headers]
tls: {}
services:
legacy-backend:
loadBalancer:
servers:
- url: "http://192.168.1.10:8080"
- url: "http://192.168.1.11:8080"
healthCheck:
path: /health
interval: 10s
timeout: 3s
middlewares:
strip-prefix-v0:
stripPrefix:
prefixes: ["/v0"]
rate-limit:
rateLimit:
average: 100
burst: 50
period: 1s
add-headers:
headers:
customRequestHeaders:
X-Internal-Source: traefik
customResponseHeaders:
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
accessControlAllowMethods: [GET, POST, PUT, DELETE, OPTIONS]
accessControlAllowHeaders: [Authorization, Content-Type]
accessControlAllowOriginList:
- https://app.company.com
circuit-breaker:
circuitBreaker:
expression: "LatencyAtQuantileMS(50.0) > 100 || NetworkErrorRatio() > 0.30"
JWT Forward Auth
Traefik делегирует проверку JWT внешнему сервису:
# dynamic/middlewares.yml
http:
middlewares:
jwt-auth:
forwardAuth:
address: "http://auth-service:4000/validate"
trustForwardHeader: true
authResponseHeaders:
- X-User-ID
- X-User-Role
- X-Tenant-ID
Сервис возвращает 200 — пропустить, 401 — отклонить. Response headers передаются upstream.
Как настроить канареечный деплой через Traefik?
Для канареечных деплоев используйте взвешенный балансировщик:
http:
services:
api-weighted:
weighted:
services:
- name: api-v1
weight: 90
- name: api-v2
weight: 10
api-v1:
loadBalancer:
servers:
- url: "http://api-v1:3000"
api-v2:
loadBalancer:
servers:
- url: "http://api-v2:3000"
Сравнение подходов: Nginx требует перезагрузки после любого изменения, Traefik обновляет правила за секунды. Это критично для CICD.
| Критерий | Nginx | Traefik |
|---|---|---|
| Обнаружение сервисов | Ручное | Автоматическое (Docker/K8s) |
| SSL | Вручную + certbot | Встроенный Let's Encrypt |
| Middleware | Сложная конфигурация | YAML/лейблы, более 20 встроенных |
| Canary-деплой | Требуется скрипты | Взвешенный балансировщик |
Процесс работы
- Анализ текущей архитектуры и требований.
- Разработка статической и динамической конфигураций.
- Настройка SSL, middleware, мониторинга.
- Тестирование в staging-среде.
- Деплой в production с постепенным переключением трафика.
Что входит в работу
- Полная конфигурация Traefik (Docker Compose или Kubernetes).
- Настройка Let's Encrypt с автоматическим обновлением.
- Подключение middleware: rate limit, JWT, CORS.
- Интеграция с Prometheus и Grafana (дашборд ID 17347).
- Документация по маршрутам и доступам.
- 3 дня поддержки после деплоя.
Сроки
Базовая настройка под Docker — от 1 рабочего дня. Полная интеграция с Kubernetes, канареечными деплоями и JWT — до 3 дней. Точные сроки уточняются после анализа проекта.
Типичные ошибки
- Забыть закрыть Dashboard в production — обязательно используйте basic auth или VPN.
- Не настроить healthCheck — балансировщик будет отправлять трафик на мёртвые инстансы.
- Слишком lenient CORS — разрешайте только доверенные origin.
- Игнорирование circuit breaker — без него сбой в одном сервисе ломает всю систему.
Сравните сами: Traefik в 2-3 раза быстрее настраивается, чем Nginx, и экономит до 30% времени на эксплуатацию. Получите консультацию по настройке API Gateway — мы гарантируем стабильную работу. Убедитесь в качестве: наши инженеры имеют сертификаты и внедрили Traefik на 50+ проектах. Закажите настройку Traefik уже сегодня.
Официальная документация Traefik: https://doc.traefik.io/traefik/







