2. Практика — запуск сервисов Traefik

Traefik – это обратный прокси с поддержкой Docker, который предоставляет встроенную панель мониторинга.

Проект Traefik предоставляет официальный образ Docker, который поможет быстро запустить Traefik в контейнере Docker.

Панель инструментов представляет собой отдельное веб-приложение, которое будет работать в контейнере Traefik по порту 8080.

Если нет необходимости в запароленном доступе к панели управления, то простейшая форма для запуска будет выглядеть следующим образом:

docker -v
Docker version 19.03.1, build 74b1e89
docker-compose -v
docker-compose version 1.22.0, build f46880fe

cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.170 test.ru nginx.test.ru nginx2.test.ru

cat docker-compose.yml

version: '2.4'

services:
  traefik:
    image: traefik
    volumes:
       - /var/run/docker.sock:/var/run/docker.sock
    command:  --web
              --defaultentrypoints=http
              --entrypoints="Name:http Address::80"
              --docker
              --docker.endpoint="unix:///var/run/docker.sock"
              --docker.watch=true
              --docker.exposedbydefault=false
    ports:
       - 80:80
       - 8080:8080
  nginx:
    image: nginx:alpine
    container_name: webserver
    restart: unless-stopped
    labels:
    - traefik.frontend.rule=Host:nginx.test.ru
    - traefik.docker.network=traefik
    - traefik.port=80
    - traefik.enable=true
  nginx2:
   image: nginx:alpine
   volumes:
     - /var/www/nginx:/usr/share/nginx/html
   container_name: webserver2
   restart: unless-stopped
   labels:
    - traefik.frontend.rule=Host:nginx2.test.ru
    - traefik.docker.network=traefik
    - traefik.port=80
    - traefik.enable=true<br /><br /></code><span style="font-family: georgia, palatino, serif;">В данном конфиге мы запускаем 3 сервиса, 1 - traefik, 2,3 - контейнеры nginx.</span>

У traefik только 1 точка входа, это 80 порт. На порту 8080 будет доступна панель в которой визуально отображается какие сервисы доступны.
Для поднимаемых нами сервисов указаны следующие доменные имена: nginx.test.ru и nginx2.test.ru,они используют созданную ранее docker сеть traefik
и как мы видим, отвечают по одному 80 порту.  Для того чтобы работал сервис работал ему прописывается пункт label где задаются параметры для traefik.
Ниже показан ответ curl по нашим сервисам:

curl nginx.test.ru

Спойлер

curl nginx2.test.ru
test

================================

если необходимо включить базовую аутентификацию для сервиса и для dashboard traefik, то используем следующую строку:

traefik.frontend.auth.basic: «admin:$$apr1$$s8D70azI$$zyyC7/WNXteoQpYwVB3zd0»

пароль генерируем следующим образом:
echo $(htpasswd -nb admin admin) | sed -e s/\\$/\\$\\$/g

если отсутствует:
htpasswd

то ставим пакет httpd-tools

конфиг будет иметь следующий вид:

[root@centos7 ~]# cat docker-compose.yml<br />version: '2.4'<br /><br />services:<br />  traefik:<br />    image: traefik<br />    volumes:<br />       - /var/run/docker.sock:/var/run/docker.sock<br />    command:<br />        --web<br />        --defaultentrypoints=http<br />        --entrypoints="Name:http Address::80"<br />        --docker<br />        --docker.endpoint="unix:///var/run/docker.sock"<br />        --docker.watch=true<br />        --docker.exposedbydefault=false<br />    expose:<br />      - 8080<br />    ports:<br />       - 80:80<br />    labels:<br />     traefik.enable: true<br />     traefik.frontend.rule: "Host:traefik.test.ru"<br />     traefik.port: 8080<br />     traefik.docker.network: "traefik"<br />     traefik.frontend.auth.basic: "admin:$$apr1$$tajEjroD$$/j6Ntl6tnvRbdPWIyLe4m/"<br /><br />  nginx:<br />    image: nginx:alpine<br />    container_name: webserver<br />    restart: unless-stopped<br />    labels:<br />     traefik.enable: true<br />     traefik.frontend.rule: "Host:nginx.test.ru"<br />     traefik.port: 80<br />     traefik.docker.network: "traefik"<br />     traefik.frontend.auth.basic: "admin:$$apr1$$tajEjroD$$/j6Ntl6tnvRbdPWIyLe4m/"<br /><br />  nginx2:<br />        image: nginx:alpine<br />        volumes:<br />        - /var/www/nginx:/usr/share/nginx/html<br />        container_name: webserver2<br />        restart: unless-stopped<br />        labels:<br />         traefik.enable: true<br />         traefik.frontend.rule: "Host:nginx2.test.ru"<br />         traefik.port: 80<br />         traefik.docker.network: "traefik"

Обязательно задаём expose 8080

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

================

если необходимо подключить ssl сертификат то необходимо создать дополнительный файл traefik.toml

debug = false

logLevel = "ERROR"
defaultEntryPoints = ["https","http"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
<span class="hljs-section">  [entryPoints.https]</span>
  address = ":443"
<span class="hljs-section">  [entryPoints.https.tls]</span>
<span class="hljs-section">    [entryPoints.https.tls.ClientCA]</span>
    files = <span class="hljs-section">["tests/clientca1.crt", "tests/clientca2.crt"]</span>
    optional = false
<span class="hljs-section">    [[entryPoints.https.tls.certificates]]</span>
    certFile = "tests/traefik.crt"
    keyFile = "tests/traefik.key"

[retry]

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "test.ru"
watch = true
exposedByDefault = false


в docker-compose.yaml прокидываем наш файл:
volume /opt/traefik/traefik.toml:/traefik.toml

подробнее тут:
https://docs.traefik.io/basics/#entrypoints

Источник: https://sidmid.ru/2-практика-запуск-сервисов-traefik/

Was this helpful?

0 / 1