Настройка Kubernetes Ingress Controller (Traefik)
Traefik интересен тем, что умеет автоматически обнаруживать сервисы и конфигурировать себя без перезапуска. Там, где Nginx требует аннотации и иногда reload, Traefik перестраивает routing на лету. Это делает его особенно удобным в динамичных средах — много сервисов, частые деплои, автоматический TLS через ACME. Наш опыт: более 10 лет работы с Kubernetes и 50+ проектов с Traefik. Мы поможем вам развернуть Traefik Ingress Controller под ключ: от базовой установки до production-готовой конфигурации с мониторингом и документацией.
Главная точка боли: IngressRoute vs стандартный Ingress
Traefik поддерживает два режима конфигурации: стандартный Kubernetes Ingress и собственные CRD — IngressRoute, Middleware, TLSOption. Если начать с Ingress-объектов, многие возможности Traefik недоступны или реализуются через аннотации, которые быстро становятся нечитаемыми.
Типичная грабля при миграции с Nginx: разработчик добавляет аннотацию traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd, middleware существует в другом неймспейсе, и маршрут молча не применяется. В логах Traefik при --log.level=DEBUG будет middleware "default-redirect-https@kubernetescrd" does not exist — но только на уровне debug, не error.
Второй частый сценарий: Let's Encrypt сертификаты не выпускаются. Traefik пытается пройти ACME HTTP-01 challenge, но challenge-роут недоступен снаружи — либо firewall, либо DNS ещё не обновился, либо entryPoints настроены неправильно и Traefik слушает не на 80 порту. kubectl logs -n traefik deployment/traefik | grep acme покажет попытки и ошибки.
Как мы решаем эти проблемы
Наш подход — комбинация GitOps, Helm и четкого разделения namespace. Конфигурация хранится в Git, автоматически применяется через ArgoCD. Для исключения ошибок namespace мы внедряем правило: все Middleware создаются в том же namespace, что и IngressRoute, либо ссылаются с полным именем namespace-name@kubernetescrd. Let's Encrypt challenge проверяется на любом порту 80 — мы гарантируем, что entryPoint web открыт в security group и не заблокирован.
Почему стоит выбрать Traefik, а не NGINX?
| Критерий | Traefik | NGINX Ingress |
|---|---|---|
| Обнаружение сервисов | Автоматическое (watch) | Через annotation + reload |
| Поддержка ACME | Встроенная, автоматическое получение сертификатов | Требуется cert-manager |
| Настройка правил | IngressRoute CRD или аннотации | Аннотации на Ingress |
| Метрики | Prometheus из коробки | Требуется exporter |
| Hot-reload конфигурации | Мгновенный, без restarts | reload nginx (потери соединений) |
| Learning curve | Средняя (знакомство с CRD) | Низкая (стандартный Ingress) |
Traefik выигрывает в динамичных средах: он быстрее реагирует на изменения, не требует перезагрузок и проще интегрируется с современными практиками GitOps.
Установка и конфигурация
Helm — единственный разумный способ. Пошаговая настройка:
- Добавьте репозиторий Traefik.
- Создайте values-файл с ключевыми параметрами.
- Выполните
helm upgrade --install.
Пример traefik-values.yaml
deployment:
replicas: 2
additionalArguments:
- "[email protected]"
- "--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
persistence:
enabled: true
size: 128Mi
ingressClass:
enabled: true
isDefaultClass: true
ports:
web:
exposedPort: 80
websecure:
exposedPort: 443
metrics:
exposedPort: 8080
Ключевые секции traefik-values.yaml:
additionalArguments:
- "[email protected]"
- "--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
persistence:
enabled: true
size: 128Mi
ingressClass:
enabled: true
isDefaultClass: true
acme.json должен лежать на persistent volume — иначе при каждом рестарте Traefik будет перевыпускать сертификаты и быстро упрётся в rate limit Let's Encrypt (50 сертификатов в неделю на домен).
Как настроить автоматический TLS в Traefik?
Для автоматического TLS достаточно указать certificatesresolvers и ссылаться на него в IngressRoute. Наш опыт показывает, что 80% проблем связаны с неправильным entryPoint или отсутствием persistent volume. Мы всегда проверяем, что порт 80 открыт извне, и используем storage для acme.json.
Dashboard и observability
Traefik имеет встроенный dashboard на порту 8080. В production его нужно либо закрыть от внешнего доступа (аутентификация через BasicAuth Middleware), либо вообще отключить — там видна вся конфигурация роутеров, что нежелательно публично.
Метрики Prometheus доступны из коробки через аргумент --metrics.prometheus. Grafana dashboard — ID 17346, покрывает request rate, latency, активные соединения по роутерам.
Типичные ошибки и их решение
| Ошибка | Причина | Решение |
|---|---|---|
| Middleware не применяется | Ссылка из другого namespace без @kubernetescrd |
Используйте полное имя namespace-name@kubernetescrd |
| Сертификаты не выпускаются | HTTP-01 challenge не проходит (firewall, DNS) | Проверьте entryPoint web на порту 80, обеспечьте внешний доступ |
| Перевыпуск сертификатов при каждом рестарте | Нет persistent volume для acme.json | Подключите PVC размером 128Mi |
| Dashboard доступен всем | Нет аутентификации | Закройте порт 8080 или настройте BasicAuth Middleware |
Что входит в работу
- Развёртывание Traefik через Helm со всеми настройками (persistent volume, ingressClass, metrics).
- Настройка автоматического TLS с Let's Encrypt, включая провайдеры DNS-01 для wildcard-сертификатов (опционально).
- Создание IngressRoute для 3–5 сервисов с типовыми middleware (redirect, rate limit, auth basic).
- Интеграция с Prometheus/Grafana, предоставление дашборда и алертов.
- Документация по конфигурации, runbook для дежурных.
- Передача знаний команде: сессия Q&A.
Сроки ориентировочно
Базовая установка с автоматическим TLS и IngressRoute для 3–5 сервисов: 1 день. Полная конфигурация с middleware-стеком (rate limiting, auth, headers), мониторингом и документацией: 2–3 дня. Время зависит от сложности правил маршрутизации и необходимости интеграции с существующим CI/CD.
Свяжитесь с нами, чтобы обсудить ваш проект и получить консультацию по оптимальной конфигурации Traefik. Закажите предварительную оценку текущей инфраструктуры — мы предложим план миграции.







