Уявіть: у вас 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/







