Как настроить Traefik для контейнеров Docker в Ubuntu 20.04

Как настроить Traefik для контейнеров Docker в Ubuntu 20.04

 

Traefik — это один из современных методов, который используется для настройки обратного прокси для docker-контейнеров. Если вы хотите запустить несколько приложений в контейнерах докеров, открывающих порт 80 и 443, traefik может быть лучшим вариантом для обратного прокси. Traefik предоставляет собственную панель мониторинга. Вы также можете использовать Traefik для балансировки нагрузки HTTP. В этой статье мы собираемся настроить Traefik v2.4 на Ubuntu 20.04 на простом примере.

Предпосылки

  • Ubuntu 20.04 LTS
  • Докер CE (Community Edition)
  • Интернет-соединение для загрузки пакетов
  • Учетная запись привилегированного пользователя Sudo
  • Домен для панели управления traefik [Следует поддерживать запись A]
  • Домен для сайта wordpress [Следует поддерживать запись A]

В этой статье мы используем linuxtechi.local в качестве домена и traefik.linuxtechi.local в качестве FQDN для панели управления Traefik.

Шаги по настройке Traefik на Ubuntu 20.04

В этой статье сначала мы настроим Traefik, а затем зарегистрируем контейнер WodressPress для traefik для обратного прокси и балансировки нагрузки. Мы настроим Traefik для обслуживания всего через HTTPS, используя SSL-сертификат Let’s encrypt.

Выполните следующие действия, чтобы настроить обратный прокси Traefik.

Шаг 1) Настроить Traefik

Создайте файлы конфигурации и установите зашифрованный пароль для доступа к панели управления traefik. Вы можете использовать утилиту htpasswd для создания зашифрованного пароля. Чтобы использовать утилиту htpasswd, установите ее с помощью следующей команды.

$ sudo apt-get install -y apache2-utils

После завершения установки выполните следующую команду, чтобы сгенерировать зашифрованный пароль. В этом примере я использовал « Traefik@123 # » для шифрования. У вас могут быть свои собственные предположения. Пользователь считается администратором, вы можете заменить его своим именем пользователя.

$ htpasswd -nb admin Traefix@123#

Вы получите зашифрованный пароль:

root@infoit.com.ua:~$ htpasswd -nb admin Traefix@123#
admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/
root@infoit.com.ua:~$

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

Теперь создайте файл конфигурации с именем traefik.toml, используя формат TOML. Мы будем использовать трех поставщиков Traefik, а именно api, docker и acme. Acme предоставляет сертификаты Let’s encrypt TLS.

Создайте файл traefik.toml со следующим содержимым

$ vi traefik.toml
[entryPoints]
  [entryPoints.web]
    address = ":80"
    [entryPoints.web.http.redirections.entryPoint]
      to = "websecure"
      scheme = "https"
  [entryPoints.websecure]
    address = ":443"

[api]
  dashboard = true
[certificatesResolvers.lets-encrypt.acme]
  email = "info@linuxtechi.local"
  storage = "acme.json"
  [certificatesResolvers.lets-encrypt.acme.tlsChallenge]

[providers.docker]
  watch = true
  network = "web"

[providers.file]
  filename = "traefik_secure.toml"

Сохраните и закройте файл

В приведенном выше примере веб-точка входа в файл обрабатывает порт 80, в то время как веб-безопасность точки входа обрабатывает порт 443 для подключения SSL / TLS.

Весь трафик на порту 80 принудительно перенаправляется на точку входа websecure для безопасных соединений. Не забудьте изменить адрес электронной почты и домен в приведенном выше файле «traefik.toml», который подходит для вашей настройки.

Давайте создадим другой файл traefik_secure.toml со следующим содержимым.

$ vi traefik_secure.toml
[http.middlewares.simpleAuth.basicAuth]
  users = [
    "admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/"
  ]

[http.routers.api]
  rule = "Host(`traefik.linuxtechi.local`)"
  entrypoints = ["websecure"]
  middlewares = ["simpleAuth"]
  service = "api@internal"
  [http.routers.api.tls]
    certResolver = "lets-encrypt"

Сохраните и выйдите из файла.

Приведенное выше содержимое позволит включить аутентификацию по имени пользователя и паролю для панели управления Traefik, а также позволит шифровать сертификаты TLS для маршрутизаторов http.

Не забудьте изменить строку пароля для пользователя admin и запись хоста в приведенном выше файле, который подходит для вашей настройки.

Шаг 2) Бегущий траэфик контейнер

Создайте новую сеть докеров для использования прокси-сервером в контейнерах. Используйте следующую команду для создания сети докеров.

$ docker network create web

Когда вы запускаете контейнер traefik, добавьте контейнер в эту сеть. Вы можете добавить в эту сеть дополнительные контейнеры, чтобы Traefik работал в качестве обратного прокси.

Создайте пустой файл, который содержит. Давайте зашифруем информацию и соответствующим образом изменим права доступа.

$ touch acme.json
$ chmod 600 acme.json

Как только этот json-файл переместится в контейнер докеров, владелец автоматически изменится на root.

Создайте контейнер traefik, используя следующую команду:

$ docker run -d \
   -v /var/run/docker.sock:/var/run/docker.sock \
   -v $PWD/traefik.toml:/traefik.toml \
   -v $PWD/traefik_secure.toml:/traefik_secure.toml \
   -v $PWD/acme.json:/acme.json \
   -p 80:80 \
   -p 443:443 \
   --network web \
   --name traefik \
    traefik:v2.4

Поскольку команда слишком длинная, она разбита на несколько строк.

Теперь вы можете получить доступ к панели управления traefik, чтобы следить за состоянием контейнеров. Перейдите по адресу https://your_domain.com/dashboard/   [Замените your_domain своим собственным доменом] и предоставьте учетные данные администратора [имя пользователя — admin, а пароль — зашифрованный пароль, созданный на шаге выше]. В моем случае URL-адрес будет:

https://traefik.linuxtechi.local/dashboard/

Как настроить Traefik для контейнеров Docker в Ubuntu 20.04

После входа на панель управления у вас будет следующий интерфейс.

Как настроить Traefik для контейнеров Docker в Ubuntu 20.04

 

Шаг 3) Зарегистрируйте контейнеры в Traefik

Вы настроили Traefik, который работает на вашем сервере. На этом этапе я собираюсь добавить контейнер WordPress для Traefik в прокси. Контейнер WordPress будет управляться с помощью Docker Compose.

Создадим файл docker-compose.yml со следующим содержимым.

 

$ vi docker-compose.yml

Чтобы указать версию и сеть, которые мы будем использовать, добавьте в файл следующие строки.

version: "3"
networks:
  web:
    external: true
  internal:
    external: false

Я использовал версию 3, потому что это последняя версия Docker Compose. Traefik распознает наши приложения, только если они являются частью одной сети. На предыдущих шагах я создал сеть докеров вручную с сетевым именем web, поэтому я включил эту сеть в файл docker-compose.yml и открыл ее для внешнего доступа для прокси-сервера traefik. Я определил другую сеть для соединения нашего приложения с контейнером базы данных, который не нужно открывать через traefik.

Теперь определите каждую из служб. Во-первых, создайте сервис для приложения WordPress. Добавьте следующие строки в файл docker-compose.yml.

services:
  wordpress:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: dbuser
      WORDPRESS_DB_PASSWORD: dbpass@123#
      WORDPRESS_DB_NAME: wordpress_db
    labels:
      - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`)
      - traefik.http.routers.blog.tls=true
      - traefik.http.routers.blog.tls.certresolver=lets-encrypt
      - traefik.port=80
    networks:
      - internal
      - web
    depends_on:
      - mysql

Я использовал traefik.port = 80 , traefik будет использовать этот порт для маршрутизации трафика в контейнер WordPress.

Замените Host: blog.linuxtechi.com своим собственным доменом сайта WordPress.

Теперь вам нужно настроить службу MySQL для базы данных. Добавьте следующие строки в конец файла docker-compose.yml

mysql:
  image: mysql:latest
  environment:
    MYSQL_ROOT_PASSWORD: sqlpass@123#
    MYSQL_DATABASE: wordpress_db
    MYSQL_USER: dbuser
    MYSQL_PASSWORD: dbpass@123#
  networks:
    - internal
  labels:
    - traefik.enable=false

В этом примере я использовал последний образ MySQL для контейнера базы данных. Переменные среды для службы wordress и mysql определены в самом файле. Служба MySQL не нужна для прокси с помощью traefik, поэтому я использовал только внутренние сети.

Ваш полный файл docker-compose.yml будет выглядеть так:

version: "3"
networks:
  web:
    external: true
  internal:
    external: false
services:
  wordpress:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: dbuser
      WORDPRESS_DB_PASSWORD: dbpass@123#
      WORDPRESS_DB_NAME: wordpress_db
    labels:
      - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`)
      - traefik.http.routers.blog.tls=true
      - traefik.http.routers.blog.tls.certresolver=lets-encrypt
      - traefik.port=80
    networks:
      - internal
      - web
    depends_on:
      - mysql

  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: sqlpass@123#
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: dbpass@123#
    networks:
      - internal
    labels:
      - traefik.enable=false

Сохраните файл и выйдите из файла

Теперь выполните следующую команду, чтобы создать контейнер MySQL и wordpress.

$ docker-compose up -d

Теперь перейдите на панель управления Traefik и щелкните маршрутизаторы HTTP , вы обнаружите, что на панель управления добавлены новые контейнеры.

Как настроить Traefik для контейнеров Docker в Ubuntu 20.04

Теперь используйте URL-адрес blog.linuxtechi.local [Замените на свой домен]. Вы будете перенаправлены к мастеру установки WordPress с подключением TLS.

Как настроить Traefik для контейнеров Docker в Ubuntu 20.04

Завершите работу мастера установки. Теперь вы готовы использовать свой сайт WordPress.

Заключение:

В этой статье вы узнали, как настроить traefik в Ubuntu 20.04. У вас появилась идея, как автоматически регистрировать контейнеры в traefik для балансировки нагрузки и обратного прокси. Кроме того, вы узнали, как настроить сайты WordPress с помощью прокси-сервера traefik.