Traefik — это ингресс контроллер и реверс прокси для работы в облачных средах и Kubernetes. Он автоматически обнаруживает сервисы, обеспечивает SSL/TLS-терминацию и расширенные возможности маршрутизации. Использование Traefik в Kubernetes позволяет гибко управлять маршрутизацией трафика к сервисам внутри кластера.
Установка
-
Перейдите во вкладку «Дополнения» в панели управления кластером.
-
Найдите Traefik и нажмите на него.

- Откроется мастер установки. Вы можете загрузить собственный
values.yamlдля кастомизации установки или оставить настройки по умолчанию. Запустите установку, нажав на кнопку «Установить».

- Дождитесь завершения установки. После этого убедитесь, что все поды в неймспейсе
traefikзапущены и находятся в статусе «Running»:
Использование
По умолчанию в установленной конфигурации Traefik использует четыре entryPoints (входные точки):
- :8000/tcp — HTTP (
web) - :8443/tcp — HTTPS (
websecure) - :8080/tcp — API Dashboard (
traefik) - :9100/tcp — Метрики Prometheus (
metrics)
Для работы с Traefik необходимо создать Service, который будет маршрутизировать трафик к вашему приложению:
Этот манифест создает сервис example-service в пространстве имен default, который:
- Маршрутизирует HTTP-трафик (порт
80). - Направляет его на поды, имеющие метку
app: example-app. - Передает запросы на
targetPort: 80внутри подов.
Теперь можно настроить маршрутизацию через Traefik с помощью IngressRoute:
В этом манифесте:
entryPoints: web— указывает, что маршрутизация происходит через HTTP (8000/tcp).match: Host(‘service.example.com’)— задает правило маршрутизации по доменному имени.- Запросы направляются на сервис
example-serviceна порт80.
Пример использования
Рассмотрим использование Traefik на примере. Создадим два деплоймента Nginx, которые будут работать на двух разных доменах — service1.example.com и service2.example.com. Также настроим балансировщик нагрузки и маршрутизацию через Traefik. В завершение настроим SSL-сертификаты средствами Traefik.
Создание ConfigMap
Сначала создадим файл configmap-nginx.yaml, который определит HTML-страницы для каждого сервиса:
Создание Deployment для Nginx
Манифест service1-nginx.yaml описывает деплоймент для первого сервиса:
Манифест service2-nginx.yaml описывает деплоймент для второго сервиса:
Создание Service
Определим сервисы, к которым Traefik будет направляться трафик.
Манифест service1-service.yaml:
Этот манифест создает сервис service1, который будет принимать HTTP-запросы на порт 80 и перенаправлять их на поды, имеющие метку app: service1.
Манифест service2-service.yaml:
Создание маршрутов в Traefik
В манифесте service1-ingressroute.yaml описывается маршрут для первого сервиса:
Этот манифест определяет IngressRoute для service1.example.com. Разберем его компоненты:
entryPoints: web— указывает, что маршрут будет доступен через HTTP (порт80, указанный в балансировщике Traefik).match: Host(‘service1.example.com’)— определяет, что данный маршрут будет срабатывать при обращении к доменуservice1.example.com.name: service1— маршрут передает трафик в сервисservice1.port: 80— передача происходит на порт80внутри Kubernetes-сервисаservice1.
Файл service2-ingressroute.yaml описывает маршрут для второго сервиса:
Настройка балансировщика нагрузки
Опишем балансировщик для Traefik в traefik-loadbalancer.yaml:
Применение конфигурации
Применяем все манифесты:
После завершения создания балансировщика указываем его IP-адрес в качестве A-записей для доменов. Теперь можно обращаться к сервисам:
http://service1.example.comhttp://service2.example.com
Таким образом, мы настроили два сервиса в Kubernetes с использованием Traefik, обеспечили маршрутизацию и балансировку нагрузки.
Настройка SSL
При использовании Traefik можно получать SSL-сертификаты двумя способами:
- встроенными средствами Traefik;
- с использованием cert-manager.
Выбор метода зависит от конфигурации кластера. Если используются другие Ingress-контроллеры, рекомендуется cert-manager для централизованного управления сертификатами. Если же в кластере используется только Traefik, можно воспользоваться встроенной функцией получения сертификатов.
Обновление конфигурации Traefik
Для включения поддержки Let's Encrypt необходимо изменить конфигурацию Traefik:
-
Перейдите в панель управления кластером → «Дополнения» → выберите Traefik.
-
Включите режим продвинутой установки.
-
Приведите конфигурацию к виду:
Что изменилось:
- По умолчанию, Traefik устанавливается как
DaemonSet. В этом режиме сертификаты средствами Traefik получить невозможно. Поэтому тип развёртывания меняется наDeployment. - Добавлен сегмент
additionalArguments. В--certificatesresolvers.le.acme.emailукажите свою почту для регистрации в Let's Encrypt.

- Сохраните изменения и дождитесь завершения обновления.
Проверка конфигурации
После обновления убедитесь, что конфигурация применена корректно:
Затем проверьте наличие параметров ACME:
Вывод должен содержать строки:
Автоматический редирект с HTTP на HTTPS
Создадим middleware для автоматического редиректа с HTTP на HTTPS. Файл redirect-https.yaml:
Применим манифест:
Обновление IngressRoute
Обновим IngressRoute, добавив middleware для редиректа с HTTP на HTTPS.
Манифест service1-ingressroute.yaml:
Манифест service2-ingressroute.yaml:
Теперь в манифестах маршрутизации service1-ingressroute.yaml и service2-ingressroute.yaml добавляется middleware redirect-to-https, которая автоматически перенаправляет HTTP-запросы на HTTPS.
Обновляем манифесты:
Настройка HTTPS IngressRoute
Теперь нам необходимо создать отдельные IngressRoute для HTTPS. Это необходимо, потому что стандартные HTTP-маршруты не обрабатывают TLS, и для работы HTTPS необходимо задать certResolver, который будет использовать Let's Encrypt для автоматического получения сертификатов. В новых IngressRoute указываются entryPoints: websecure и параметр tls, который активирует поддержку шифрования.
Манифест service1-ingressroute-https.yaml:
Манифест service2-ingressroute-https.yaml:
Применяем манифесты для новых роутов:
Проверка выпуска сертификатов
Проверить, что сертификаты успешно выпущены, можно с помощью команды:
Теперь доступ к сервисам осуществляется через HTTPS:
https://service1.example.comhttps://service2.example.com
Таким образом, мы настроили автоматическое получение SSL-сертификатов с помощью Let's Encrypt в Traefik и обеспечили безопасное подключение к сервисам.
Настройка дашборда
Traefik предоставляет веб-интерфейс, который позволяет отслеживать состояние маршрутов, сервисов, middleware и других ресурсов, управляемых инстансом Traefik. Дашборд помогает диагностировать проблемы, анализировать маршрутизацию трафика и контролировать конфигурацию.
По умолчанию дашборд Traefik доступен без авторизации, что создает угрозу безопасности, так как любому пользователю будет доступна информация о запущенных сервисах. Чтобы защитить доступ, настроим базовую авторизацию с помощью middleware.
-
Получим хэш желаемого пароля:
-
Данные для авторизации мы сохраним в секрете Kubernetes, поэтому их нужно закодировать в base64:
-
Теперь опишем секрет в манифесте
dashboard-secret.yaml:
-
Применим манифест:
-
Теперь опишем middleware в файле
dashboard-auth.yaml:
-
Применяем манифест:
-
Наконец, опишем
IngressRouteдля дашборда в файлеdashboard-ingress.yaml:
Этот манифест задает маршрут для доступа к дашборду Traefik через HTTPS, применяя базовую авторизацию. Описание параметров:
entryPoints: websecure— указывает, что маршрут будет доступен только через HTTPS.match: Host(dashboard.example.com)— направляет запросы, полученные для dashboard.example.com, к дашборду.middlewares— применяет созданную ранее middlewaredashboard-auth, обеспечивающую базовую HTTP-аутентификацию.services— указывает, что запросы должны направляться к встроенному сервисуapi@internal, который отвечает за отображение дашборда.tls.certResolver: le— активирует автоматическое получение SSL-сертификата через Let's Encrypt.
-
Применим манифест:
-
Теперь обратимся к
https://dashboard.example.com. После авторизации вы увидите дашборд.