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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href=«http://nginx.org/»>nginx.org</a>.<br/>
Commercial support is available at
<a href=«http://nginx.com/»>nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
|
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/