Как направить трафик в контейнеры Docker с помощью обратного прокси-сервера Traefik — CloudSavvy IT

traefik-логотип

Traefik — ведущий обратный прокси-сервер и балансировщик нагрузки для облачных операций и контейнерных рабочих нагрузок. Он функционирует как пограничный маршрутизатор, который публикует ваши услуги в Интернете.

Traefik направляет запросы в ваши контейнеры, сопоставляя атрибуты запроса, такие как домен, URL-адрес и порт. Прокси-сервер включает автоматическое обнаружение службы, поэтому вы можете добавлять новые контейнеры в режиме реального времени, не перезапуская службу Traefik.

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

В этом руководстве мы создадим простое развертывание Traefik v2, которое будет публиковать несколько контейнеров Docker. Это позволяет использовать одну установку Docker для предоставления нескольких служб через один и тот же порт, таких как веб-приложение, API и панель администрирования.

Начиная

Проще всего развернуть Traefik, используя собственный образ Docker. Мы предполагаем, что вы используете Traefik с Docker до конца этого руководства. Однофайловые двоичные файлы доступны в качестве альтернативного варианта, если вы предпочитаете, чтобы Traefik находился вне вашей установки Docker.

Вы должны создать файл конфигурации, прежде чем сможете начать использовать Traefik. Добавьте следующее содержимое в файл traefik.toml — мы объясним, что он делает ниже:

[entryPoints]
[entryPoints.http]адрес = “:80”
[entryPoints.http.http.redirections.entryPoint]to = “https” схема = “https”
[entryPoints.https]адрес = “:443”

[providers]
[providers.docker]сеть = “трафик”

Этот файл конфигурации настраивает Traefik с двумя «точками входа». Точки входа описывают, как запросы достигают службы Traefik. Точки входа HTTP и HTTPS создаются для прослушивания портов 80 и 443 соответственно. В случае HTTP-запроса вместо этого используется правило перенаправления, чтобы перенаправить его на точку входа https. Удалите раздел перенаправления, если вы хотите иметь возможность обслуживать контент по обычному HTTP.

Раздел «провайдеры» настраивает источники, которые определяют ваши сетевые маршруты. Провайдеры — это просто компоненты инфраструктуры, которые могут выдавать Traefik инструкции по маршрутизации. Если вы хотите, вы можете написать пользовательскую конечную точку HTTP API для определения ваших маршрутов.

В этом примере мы сохраняем простоту и используем поставщика докеров. Это отслеживает контейнеры Docker, работающие на вашем хосте. Когда появится новый контейнер с метками, характерными для Traefik, эти значения будут использоваться для настройки маршрута к контейнеру. Чтобы это работало, контейнеры должны быть подключены к сети traefik Docker, поскольку эта сеть указана в файле конфигурации. Создайте сеть сейчас:

сеть докеров создать traefik

Запуск Траефик

Теперь вы готовы начать Traefik! Разверните новый контейнер с образом Traefik. Привяжите порты 80 и 443 к вашему хосту, что позволит Traefik прослушивать входящие запросы. Вы также должны подключить контейнер к сети traefik, созданной ранее.

Смонтируйте сокет Docker вашего хоста в контейнер Traefik с флагом -v. Это дает Traefik возможность доступа к другим контейнерам, работающим на вашем хосте, что позволяет автоматически определять маршруты через поставщика докеров, настроенного в вашем файле конфигурации. Сам файл конфигурации монтируется в /traefik.toml внутри контейнера Traefik.

docker run -d -p 80:80 -p 443:443 -v $ PWD /traefik.toml: /traefik.toml -v /var/run/docker.sock:/var/run/docker.sock –name traffic –network traffic traffic: 2.6

Затем запустите пару контейнеров, чтобы проверить, работает ли Traefik:

docker run -d –label traefik.http.routers.apache.rule=Host(`apache.example.com`) –name apache –network traefik httpd:последний запуск docker -d –label traefik.http.routers.nginx.rule=Host(`nginx.example.com`) –name nginx –network traefik nginx:latest

Убедитесь, что вы добавили записи DNS для apache.example.com и nginx.example.com, которые сопоставляются с вашим хостом Traefik. Вы должны иметь возможность посетить эти домены в своем браузере, чтобы увидеть целевые страницы Apache и NGINX по умолчанию соответственно. Два контейнера подключены к сети Traefik; их метки traefik.http.routers устанавливают базовые маршруты, соответствующие входящим запросам по значению их заголовка Host.

Маршрутизация трафика

Traefik поддерживает несколько различных «сопоставителей» для маршрутизации вашего трафика. Мы использовали сопоставление хостов выше, но вы также можете маршрутизировать по методу HTTP, заголовкам, URI, IP-адресу и параметрам строки запроса. Добавьте несколько сопоставителей в свои контейнеры, чтобы создать более сложные правила маршрутизации.

Traefik также поддерживает промежуточное программное обеспечение, которое позволяет вам изменять запрос до того, как он попадет в ваши службы. Вы можете добавить префикс, настроить заголовки или применить обычную аутентификацию на уровне прокси. Вот пример использования ПО промежуточного слоя Headers для добавления дополнительного заголовка запроса X-Proxied-By:

docker run -d –label traefik.http.routers.nginx.rule=Host(`nginx.example.com`) –label traefik.http.middlewares.demo.headers.customrequestheaders.X- Proxied-By=traefik –name nginx –network traefik nginx:последняя

Traefik направляет трафик на открытые порты ваших контейнеров. Вы можете указать другой порт, установив метку traefik.http.services..loadbalancer.server.port=8080.

Добавление SSL

Затем вы должны добавить SSL, чтобы обеспечить полную защиту вашего трафика. Traefik включает интеграцию Let’s Encrypt, поэтому мы будем использовать ее сейчас для автоматизации создания сертификатов.

Добавьте следующий раздел в файл traefik.toml:

[certificatesResolvers.lets-encrypt.acme]email = “you@example.com” storage = “/acme.json”
[certificatesResolvers.lets-encrypt.acme.tlsChallenge]

Это настраивает Traefik на использование провайдера Let’s Encrypt ACME при разрешении запросов сертификатов. Обязательно замените адрес электронной почты на свой, чтобы получать напоминания об истечении срока действия сертификата, отправленные Let’s Encrypt. Раздел tlsChallenge определяет, как происходит проверка сертификации; оставив его пустым, будет использоваться поток по умолчанию для обслуживания уникального файла, который Let’s Encrypt будет запрашивать и проверять во время выдачи сертификата.

Перезапустите или замените контейнер Traefik, чтобы применить новую конфигурацию. Вы также должны смонтировать новый файл в /acme.json внутри контейнера — Traefik будет использовать его для хранения сертификатов.

docker run -d -p 80:80 -p 443:443 -v $PWD/acme.json:/acme.json -v $PWD/traefik.toml:/traefik.toml -v /var/ run/docker.sock:/var/run/docker.sock –name traefik –network traefik traefik:2.6

Использование панели инструментов

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

Сначала измените существующий traefik.toml следующим разделом:

[api]приборная панель = правда

[providers.file]имя файла = “/traefik_dashboard.toml”

Затем создайте traefik_dashboard.toml со следующим содержимым:

[http.middleware.dashboard_auth.basicAuth]пользователи = [
“admin:$123…”
]

[http.routers.api]правило = “Хост(`traefik.example.com`)” точки входа = [“https”]промежуточное ПО = [“dashboard_auth”]сервис = “апи@внутренний”
[http.routers.api.tls]certResolver = “позволяет зашифровать”

Новый файл необходим, поскольку Traefik не поддерживает «динамическую» конфигурацию (службы и маршрутизаторы) наряду со «статическими» значениями в вашем основном файле traefik.toml. Файл конфигурации панели мониторинга вручную определяет маршрут, который сопоставляет traefik.example.com с внутренней веб-службой пользовательского интерфейса. Строка provider.file, добавленная в traefik.toml, регистрирует новое определение маршрута у поставщика файлов.

Используйте htpasswd для создания набора учетных данных HTTP Basic Auth. Добавьте сгенерированную строку в массив пользователей в промежуточном программном обеспечении Dashboard_auth. Вам нужно будет использовать это имя пользователя и пароль для доступа к панели управления.

sudo apt install apache2-utils htpasswd -nb admin your_password # Выводит admin:$123…

Теперь перезапустите Traefik с обновленной конфигурацией, не забыв также смонтировать новый файл traefik_dashboard.toml:

docker run -d -p 80:80 -p 443:443 -v $PWD/acme.json:/acme.json -v $PWD/traefik.toml:/traefik.toml -v $PWD/ traefik_dashboard.toml:/traefik_dashboard.toml -v /var/run/docker.sock:/var/run/docker.sock –name traefik –network traefik traefik:2.6

Вы должны иметь доступ к панели инструментов, перейдя на traefik.example.com в своем браузере. Если вы не хотите предоставлять веб-интерфейс в качестве маршрута и всегда будете получать к нему доступ со своего локального компьютера, вы можете вместо этого опубликовать порт 8080 в своем контейнере Traefik. Внесите в файл traefik.toml следующий раздел:

[api]приборная панель = true небезопасный = true docker run -d -p 8080:8080 -p 80:80 -p 443:443 -v $PWD/acme.json:/acme.json -v $PWD/traefik. toml:/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock –name traefik –network traefik traefik:2.6

Это позволит вам получить доступ к панели управления через http://localhost:8080. Этот подход не следует использовать в безопасных производственных средах, но он позволяет быстрее проводить локальные эксперименты.

Вывод

Traefik — это универсальное решение для обратного прокси-сервера для ваших контейнеров. В этой статье мы рассмотрели только самые основные из его возможностей. Помимо базового использования с Docker, Traefik также работает с ведущими решениями для оркестровки контейнеров, включая Kubernetes, Docker Swarm и Mesos.

Traefik предоставляет REST API, а также метрики в форматах, понятных Prometheus, InfluxDB, Datadog и Statsd. Эти возможности позволяют автоматизировать развертывание Traefik и использовать его вместе с другими компонентами инфраструктуры в вашем стеке. Это идеальный способ публиковать контейнерные рабочие нагрузки во всем мире без использования полного решения для оркестровки.

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *