Ви запускаєте новий мікросервіс. Через хвилину він уже доступний по HTTPS з автоматичним сертифікатом — без редагування конфігів і рестарту nginx. Для динамічних оточень з частими деплоями це суттєво. Traefik вирішує проблему «конфігураційного пекла»: він читає конфігурацію з Docker labels, Kubernetes Ingress, Consul або etcd у реальному часі. Ми використовуємо Traefik у продакшені понад п'ять років і знаємо всі тонкощі. Налаштували його для проектів з 50+ мікросервісами, де кожен деплой вимагав нових маршрутів — ручне оновлення nginx займало до 30 хвилин, тепер це 0 секунд. Економія часу на деплой — до 40 годин на місяць, а операційні витрати знижуються на 30-40%.
Чому Traefik краще nginx для динамічних оточень?
| Характеристика | Traefik | Nginx |
|---|---|---|
| Автовиявлення сервісів | Docker, Kubernetes, Consul та ін. | Тільки вручну через файли |
| Оновлення маршрутів | Миттєво, без перезавантаження | Потрібен reload (втрати з'єднань) |
| Let's Encrypt | Вбудований, автоматичний | Через сторонні утиліти (certbot) |
| Middleware | Вбудовані: auth, rate-limit, стиснення тощо | Через Lua або сторонні модулі |
| Моніторинг | Prometheus-метрики з коробки | Потрібне налаштування |
Traefik виграє в 2–3 рази за часом розгортання нових сервісів і виключає помилки ручного конфігурування. Наші інженери мають сертифікати з Kubernetes і досвід міграції з nginx на Traefik. Автоматичне виявлення сервісів скорочує час налаштування маршрутів на 80%. Економія на операційних витратах може досягати 40%.
Які помилки допускають при налаштуванні Traefik?
- Забувають вимкнути
exposedByDefault— відкривають внутрішні сервіси назовні. У продакшені обов'язково ставте--providers.docker.exposedbydefault=false. - Не налаштовують rate limiting — сервіси падають під навантаженням. Встановлюйте ліміти на основі середнього RPS.
- Використовують HTTP-челендж для Let's Encrypt без перевірки доступності порту 80 — сертифікати не випускаються. Переконайтеся, що порт відкритий.
- Не вмикають моніторинг — втрачають видимість помилок і вузьких місць. Prometheus-метрики вирішують цю проблему.
- Використовують стандартний Ingress замість IngressRoute в Kubernetes — втрачають гнучкість middlewares і TCP-маршрутів.
Як ми налаштовуємо Traefik під ключ?
Процес включає п'ять етапів:
- Аудит інфраструктури: аналізуємо поточні маршрути, навантаження, вимоги до безпеки. Фіксуємо bottlenecks: вузькі місця по CPU, пам'яті, числу з'єднань.
- Проектування: обираємо провайдер (Docker, Kubernetes, файловий), налаштовуємо entryPoints, middleware, resolvers. Визначаємо стратегію оновлення сертифікатів (HTTP або DNS-01).
- Реалізація: розгортаємо Traefik v3.0, інтегруємо з Let's Encrypt, налаштовуємо моніторинг (Prometheus + Grafana). Використовуємо sidecar-контейнери для внутрішніх сервісів.
- Тестування: перевіряємо автоматичне виявлення, відмовостійкість, rate-limiting. Запускаємо нагрузочне тестування з 5000 RPS.
- Деплой та документування: передаємо конфігурацію, runbook, навчаємо команду (2-3 години). Включаємо підтримку 2 тижні після запуску.
Що таке middlewares і як їх налаштувати?
Middlewares — це ланцюжки обробників, які застосовуються до запитів до передачі в сервіс. У Traefik є вбудовані: Basic Auth, Rate Limiting, стиснення, перенаправлення HTTPS, заголовки безпеки. Вони налаштовуються через labels в Docker Compose або через динамічний файловий провайдер. Приклад: обмеження 100 запитів на секунду з burst 50.
Docker Compose: повний робочий приклад
---
# docker-compose.yml services:
traefik:
image: traefik:v3.0
command:
- "--api.dashboard=true"
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
- "[email protected]"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--log.level=INFO"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`)"
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$...$$..."
app:
image: myapp:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`example.com`)"
- "traefik.http.routers.app.tls.certresolver=letsencrypt"
- "traefik.http.routers.app.entrypoints=websecure"
- "traefik.http.services.app.loadbalancer.server.port=3000"
- "traefik.http.routers.app-redirect.rule=Host(`example.com`)"
- "traefik.http.routers.app-redirect.entrypoints=web"
- "traefik.http.routers.app-redirect.middlewares=redirect-to-https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
exposedbydefault=false критично важливий у продакшені — без цієї опції будь-який новий контейнер автоматично отримує маршрут, що може відкрити небажані сервіси назовні.
Статична конфігурація через файл
Для складних оточень командний рядок незручний. Використовуємо traefik.yml:
---
# /etc/traefik/traefik.yml
api:
dashboard: true
log:
level: INFO
filePath: /var/log/traefik/traefik.log
accessLog:
filePath: /var/log/traefik/access.log
fields:
defaultMode: keep
names:
ClientUsername: drop
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
http:
tls:
certResolver: letsencrypt
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web
providers:
docker:
exposedByDefault: false
file:
directory: /etc/traefik/dynamic
watch: true
Динамічні файлові провайдери
---
# /etc/traefik/dynamic/middlewares.yml
http:
middlewares:
rate-limit:
rateLimit:
average: 100
burst: 50
compress:
compress: {}
security-headers:
headers:
stsSeconds: 31536000
stsIncludeSubdomains: true
contentTypeNosniff: true
frameDeny: true
customResponseHeaders:
X-Robots-Tag: "noindex,nofollow,nosnippet,noarchive,notranslate,noimageindex"
Kubernetes: IngressRoute vs стандартний Ingress
Traefik в Kubernetes підтримує як стандартний Ingress, так і власний CRD IngressRoute. IngressRoute дає повний доступ до middlewares, TCP-маршрутів та балансування:
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: myapp
spec:
entryPoints:
- websecure
routes:
- match: Host(`example.com`) && PathPrefix(`/api`)
kind: Rule
services:
- name: myapp-service
port: 3000
middlewares:
- name: rate-limit
tls:
certResolver: letsencrypt
Моніторинг
Traefik віддає Prometheus-метрики з коробки. Достатньо додати в конфігурацію:
metrics: prometheus: addRoutersLabels: true addServicesLabels: true Ключові метрики: traefik_router_requests_total, traefik_service_request_duration_seconds, traefik_entrypoint_open_connections. На їх основі будуємо дашборди в Grafana з алертами на p99 latency > 500ms і error rate > 1%.
Як забезпечити відмовостійкість Traefik?
Для production-оточень використовуємо кластер з кількох інстансів Traefik за балансувальником (наприклад, AWS ALB). Налаштовуємо health checks через endpoint /ping. У Kubernetes використовуємо Deployment з replicas: 3 і PodDisruptionBudget. Для зберігання acme.json використовуємо PVC або розподілене сховище (etcd, Consul).
Що входить в роботу
Після налаштування ви отримуєте:
- готова конфігурація Traefik з Let's Encrypt;
- автоматичне оновлення маршрутів при додаванні нових сервісів;
- захист staging-оточень через Basic Auth;
- моніторинг та алерти (Prometheus/Grafana);
- документація та runbook з експлуатації;
- навчання команди (2–3 години);
- підтримка 2 тижні після запуску.
Процес і терміни
| Масштаб | Термін |
|---|---|
| Docker Compose, 3–5 сервісів | 1 день |
| + Let's Encrypt, middlewares | 2–3 дні |
| Kubernetes + IngressRoute | 3–5 днів |
Вартість розраховується індивідуально після аудиту інфраструктури. Зв'яжіться з нами для консультації — наші інженери оцінять ваш проект і запропонують рішення під ключ. Замовте налаштування Traefik — отримайте готову конфігурацію з гарантією безпеки та продуктивності.







