Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Traefik

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

Установка

  1. Перейдите во вкладку «Дополнения» в панели управления кластером.

  2. Найдите Traefik и нажмите на него.

Image2

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

Image1

  1. Дождитесь завершения установки. После этого убедитесь, что все поды в неймспейсе 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.com
  • http://service2.example.com

Таким образом, мы настроили два сервиса в Kubernetes с использованием Traefik, обеспечили маршрутизацию и балансировку нагрузки.

Настройка SSL

При использовании Traefik можно получать SSL-сертификаты двумя способами:

  • встроенными средствами Traefik;
  • с использованием cert-manager.

Выбор метода зависит от конфигурации кластера. Если используются другие Ingress-контроллеры, рекомендуется cert-manager для централизованного управления сертификатами. Если же в кластере используется только Traefik, можно воспользоваться встроенной функцией получения сертификатов.

Обновление конфигурации Traefik

Для включения поддержки Let's Encrypt необходимо изменить конфигурацию Traefik:

  1. Перейдите в панель управления кластером → «Дополнения» → выберите Traefik.

  2. Включите режим продвинутой установки.

  3. Приведите конфигурацию к виду:

    

Что изменилось:

  • По умолчанию, Traefik устанавливается как DaemonSet. В этом режиме сертификаты средствами Traefik получить невозможно. Поэтому тип развёртывания меняется на Deployment.
  • Добавлен сегмент additionalArguments. В --certificatesresolvers.le.acme.email укажите свою почту для регистрации в Let's Encrypt.

Image3

  1. Сохраните изменения и дождитесь завершения обновления.

Проверка конфигурации

После обновления убедитесь, что конфигурация применена корректно:

    

Затем проверьте наличие параметров 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.com
  • https://service2.example.com

Таким образом, мы настроили автоматическое получение SSL-сертификатов с помощью Let's Encrypt в Traefik и обеспечили безопасное подключение к сервисам.

Настройка дашборда

Traefik предоставляет веб-интерфейс, который позволяет отслеживать состояние маршрутов, сервисов, middleware и других ресурсов, управляемых инстансом Traefik. Дашборд помогает диагностировать проблемы, анализировать маршрутизацию трафика и контролировать конфигурацию.

По умолчанию дашборд Traefik доступен без авторизации, что создает угрозу безопасности, так как любому пользователю будет доступна информация о запущенных сервисах. Чтобы защитить доступ, настроим базовую авторизацию с помощью middleware.

  1. Получим хэш желаемого пароля:

    
  1. Данные для авторизации мы сохраним в секрете Kubernetes, поэтому их нужно закодировать в base64:

    
  1. Теперь опишем секрет в манифесте dashboard-secret.yaml:

    
  1. Применим манифест:

    
  1. Теперь опишем middleware в файле dashboard-auth.yaml:

    
  1. Применяем манифест:

    
  1. Наконец, опишем IngressRoute для дашборда в файле dashboard-ingress.yaml:

    

Этот манифест задает маршрут для доступа к дашборду Traefik через HTTPS, применяя базовую авторизацию. Описание параметров:

  • entryPoints: websecure — указывает, что маршрут будет доступен только через HTTPS.
  • match: Host(dashboard.example.com) — направляет запросы, полученные для dashboard.example.com, к дашборду.
  • middlewares — применяет созданную ранее middleware dashboard-auth, обеспечивающую базовую HTTP-аутентификацию.
  • services — указывает, что запросы должны направляться к встроенному сервису api@internal, который отвечает за отображение дашборда.
  • tls.certResolver: le — активирует автоматическое получение SSL-сертификата через Let's Encrypt.
  1. Применим манифест:

    
  1. Теперь обратимся к https://dashboard.example.com. После авторизации вы увидите дашборд.

Была ли статья полезна?
Ваша оценка очень важна