Я настраиваю Traefik для работы в качестве обратного прокси-сервера в моей среде разработки. В настоящее время у меня есть приложения, работающие на разных портах и разных путях.
Моя среда:
Traefik работает на хосте (192.168.0.10). Прослушивание через порты 80, 443 и 8080 (панель мониторинга traefik).
Мои приложения работают на другом хосте (192.168.0.11).
Веб-приложение: 192.168.0.11:8200/web1
Серверная часть: 192.168.0.11:8210/api1
Другое веб-приложение: 192.168.0.11:8300/web2
Другой Backend: 192.168.0.11:8310/api2
Я хочу перенаправить все эти приложения через один и тот же поддомен (dev.domain.com) с помощью Traefik + LetsEncrypt (acme).
Например:
Когда я захожу на dev.domain.com/web1, я хочу перенаправить весь доступ на 192.168.0.11:8200/web1
Когда я получаю доступ к dev.domain.com/api1, я хочу перенаправить весь доступ к 192.168.0.11:8210/api1
.
И так далее.
Ниже приведены настройки, которые я использую, версия Traefik и т. Д.
traefil.toml
debug = true
logLevel = "DEBUG"
InsecureSkipVerify = false
defaultEntryPoints = ["https", "http"]
[api]
entryPoint = "traefik"
dashboard = true
address = ":8080"
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[file]
directory = "/etc/traefik/rules.d"
watch = true
[acme]
email = "my-email@domain.com"
storage="/etc/traefik/acme/acme.json"
entryPoint = "https"
acmeLogging=true
onDemand = true
[acme.dnsChallenge]
provider = "godaddy"
delayBeforeCheck = 0
[[acme.domains]]
main = "domain.com"
[[acme.domains]]
main = "*.domain.com"
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "domain.com"
watch = true
exposedbydefault = false
каталог rules.d имеет несколько файлов .toml.
web1.toml
loglevel = "ERROR"
[backends]
[backends.web-backend]
[backends.web-backend.servers.backend_web-backend1]
url = "http://192.168.0.11:8200/web1"
[frontends]
[frontends.web-frontend]
backend = "web-backend"
X-Custom-Response-Header = true
SSLRedirect = true
[frontends.web-frontend.routes.frontend_web-frontend1]
rule = "Host:dev.domain.com;PathPrefixStrip:/web1"
web2.toml
loglevel = "ERROR"
[backends]
[backends.web-backend]
[backends.web-backend.servers.backend_web-backend1]
url = "http://192.168.0.11:8300/web2"
[frontends]
[frontends.web-frontend]
backend = "web-backend"
X-Custom-Response-Header = true
SSLRedirect = true
[frontends.web-frontend.routes.frontend_web-frontend1]
rule = "Host:dev.domain.com;PathPrefixStrip:/web2"
api1.toml
loglevel = "ERROR"
[backends]
[backends.api-backend]
[backends.api-backend.servers.backend_api-backend1]
url = "http://192.168.0.11:8210"
[frontends]
[frontends.api-frontend]
backend = "api-backend"
X-Custom-Response-Header = true
SSLRedirect = true
[frontends.api-frontend.routes.frontend_api-frontend1]
rule = "Host:dev.domain.com;PathPrefixStrip:/api1"
api2.toml
loglevel = "ERROR"
[backends]
[backends.api-backend]
[backends.api-backend.servers.backend_api-backend1]
url = "http://192.168.0.11:8310"
[frontends]
[frontends.api-frontend]
backend = "api-backend"
X-Custom-Response-Header = true
SSLRedirect = true
[frontends.api-frontend.routes.frontend_api-frontend1]
rule = "Host:dev.domain.com;PathPrefixStrip:/api2"
каталог acme в порядке! сертификат создан без ошибок!
докер-compose.yml
version: "2.1"
services:
traefik:
hostname: traefik
image: traefik:latest
container_name: traefik
restart: always
domainname: ${DOMAINNAME}
networks:
- default
- traefik_proxy
ports:
- "80:80"
- "443:443"
- "8080:8080"
environment:
- GODADDY_API_KEY=${GODADDY_API_KEY}
- GODADDY_API_SECRET=${GODADDY_API_SECRET}
labels:
- "traefik.enable=true"
- "traefik.backend=traefik"
- "traefik.frontend.rule=Host:traefik.${DOMAINNAME}"
- "traefik.port=8080"
- "traefik.docker.network=traefik_proxy"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /opt/traefik:/etc/traefik
- /opt/traefik/shared:/shared
helloworld:
image: matheuscarino/simple-nodejs-app:latest
container_name: helloworld
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- FOO=BAR
networks:
- traefik_proxy
labels:
- "traefik.enable=true"
- "traefik.backend=helloworld"
- "traefik.frontend.rule=Host:helloworld.${DOMAINNAME}"
- "traefik.port=3000"
networks:
traefik_proxy:
external:
name: traefik_proxy
default:
driver: bridge
Traefik отлично работает, когда мне нужно перенаправить запросы к приложениям, работающим на самом хосте через Docker (через Labels). Мое приложение helloworld.domain.com работает!
Traefik отлично работает, когда я перенаправляю только одно приложение. С того момента, как я настраиваю второе приложение в том же поддомене, traefik теряется в перенаправлениях через PATH.
Я искал в Интернете варианты использования, подобные моему, но я не нашел людей, использующих Traefik для перенаправления приложения за пределы Docker Engine, Kubernetes и т. Д.