В данной статье вы найдете всю необходимую информация по настройке, установке и примерах использования обратного прокси-сервера (реверс-прокси) Traefik.
Reverse proxy служит для ретрансляции запросов из внешней сети к каким-либо сервервисам либо серверам внутренней сети.
Реверс-прокси используется для:
Мы разберем установка Traefik 2 в Docker в качестве реверс-прокси. Реверс-прокси будет использоваться как для сервисов которые будут установлены в Docker контейнере так им для сторонних сервисов располагаемых на удаленных серверах.
Предполагается, что перед началом установки Traefik 2 у вас уже установлен docker и docker-compose, если нет то краткую инструкцию по установки вы можете найти в данной статье .
Создадим папку в которой будут находиться файлы конфигурации traefik
Создадим файл docker-compose.yml со следующим содержимым
В данной конфигурации у нас будут доступны два порта 80 и 443 для HTTP и HTTPS. Последней строкой мы подключаем файл конфигурации который будет находится в подпапке data и называться traefik.yml. Создадим директорию data и создадим в ней файл traefik.yml
Откроем файл traefik.yml в редакторе и внесем в него базовую конфигурацию
В entryPoints описываются все доступные входящие порты, у нас это 80 и 433 порт, название портов может быть любым, для простоты восприятия я дал портам название http и https.
В providers мы указываем нашего первого провайдера Docker и указываем, что Traefik не должен подгружать все доступные контейнеры.
Код который указан ниже отвечает за перенаправление всего http трафика в https
В конфиг файле у нас есть отдельный блок который отвечает за получение сертификата Let’s Encrypt. В поле caServer указан тестовый сервер для того чтобы не получить лимит обращений к основному серверу. После того как вы все настроите необходимо будет закомментировать данную строку.
Таким образом у нас полностью готов файл конфигурации traefik.yml и файл docker-compose.yml и мы можем приступать к установки Traefik. Вернемся в директорию traefik и выполним следующую команду
Для того чтобы убедиться что установка и запуск контейнера прошел без ошибок, выполним команду которая покажет логи нашего контейнера
На этом установка и запуск Traefik завершена и можно переходить к настройке
Для описания конфигурации в Docker Traefik использует метки контейнеров(labels) . Отредактируем файл docker-compose.yml и добавим в него следующий текст
Подробнее разберем каждую из добавленных строк.
traefik.enable=true — сообщает что Traefik должен обеспечить доступ к этому контейнеру
traefik.http.routers.traefik.entrypoints=https — создаем новый роутер с точной входа https traefik.http.routers.traefik.rule=Host(traefik.yourdomain.com) — роутеру назначен адрес traefik.yourdomain.com traefik.http.routers.traefik.tls=true — указываем что будет использоваться TLS traefik.http.routers.traefik.tls.certresolver=letsEncrypt — указывает что будет получаться сертификат через letsEncrypt traefik.http.routers.traefik.service=api@internal — указываем, что сервер за этим роутером — api@internal , это специальный сервис, созданный по умолчанию, это наш дашборд который у нас и будет доступен по адресу traefik.yourdomain.com traefik.http.services.traefik-traefik.loadbalancer.server.port=888 — порт на котором будет вебинтерфейс
Для того чтобы активировать дашборд необходимо в конфиг файл traefik.yml добавить
Таким образом наш полный файл docker-compose.yml будет иметь следующий вид
Теперь чтобы все наши правки применились нам необходимо пересоздать контейнер
И теперь после перехода по адресу который мы указали выше в конфиге в моем случаи это traefik.yourdomain.com мы попадаем в панель управления Traefik.
Для дополнительной защиты сервисов можно использовать BasicAuth. В примере выше мы создали поддомен на котором у нас находится панель управления Traefik, как вы заметили у данной панели нет защиты по авторизации и каждый кто знает адрес может получить к ней доступ. Для того чтобы предоставить доступ к панели только тем у кого будет логин и пароль мы будем использовать BasicAuth.
Для генерации зашифрованного пароля в терминале выполним команду
В качестве ответа мы получим строку которую будет содержать имя пользователя и зашифрованный пароль.
Теперь отредактируем файл docker-compose.yml и добавим в labels следующий текст заменив значение auth.basicauth.users на строку которую мы получили ранее и дополнительно продублируем каждый символ $ . Вместо $apr1$vqyMX723$6nZ1lC3/2JN6QJyeEhJB8/ мы должны указать $$apr1$$vqyMX723$6nZ1lC3/2JN6QJyeEhJB8/
И теперь после пересоздания контейнера при переходе по адресу traefik.yourdomain.com у нас запросит логин и пароль для доступа в панели.
Добавление провайдеров которые разворачиваются в docker мы рассмотрели, но в Traefik реализована возможность автоматического добавления провайдеров из отдельных файлов конфигурации. Данный способ удобен тем, что вам нет необходимости каждый раз перезапускать контейнер.
Допустим, нам необходимо добавить службу мониторинга Grafana которая находится на сервере с IP 192.168.100.100, порт который использует сервис 3000. Доступ к данному сервису необходимо сделать через HTTPS. О том как установить Grafana мы подробно разбирали в данной статье .
Отредактируем файл docker-compose.yml в volumes добавим следующее
Создадим новую директорию custom в директории data. А в файл конфигурации traefik.yml в providers добавим следующее
watch: true говорит о том, что traefik будет следить за изменением в данной директории и после внесения добавления новых файлов с конфигурациями они автоматически будет применены.
Секция providers в конфигурационном файле traefik.yml в рамках данной статьи у нас будет выглядеть следующим образом
Пересоздадим контейнер, создадим файл grafana.yml в директории custom и добавим в него первый провайдер
И теперь если мы перейдем по адресу grafana.yourdomain.com у нас откроется система мониторинга Grafana. Подобным образом вы можете добавлять новые сервисы.