У меня есть traefik (v. 2.3.5) и другие службы, работающие на моем raspberrypi в моей домашней сети. Каждая служба работает на другом порту на одной и той же машине. Я хочу, чтобы traefik перенаправлял вызов с подпути на другой URL-адрес. Вот так:
http://мойсервер/omv --> http://мойсервер:8000
http://myServer/heimdall --> http://myServer:8003
Однако я не могу заставить его работать. Мой маршрутизатор не предлагает домен/субдомены, поэтому вместо этого мне приходится жить с подпутями.
OMV устанавливается локально, поэтому я создал файловый провайдер, и он единственный, кто работает. Я не могу понять, что я делаю неправильно с моими файлами docker-compose, например. Хеймдалль.
Вот traefik docker-compose.yml:
version: '2'
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports:
- 80:80
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /root/myDockers/traefik/data/traefik.yml:/traefik.yml:ro
- /root/myDockers/traefik/data/non-docker-services.yml:/non-docker-services.yml:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=http"
- "traefik.http.routers.traefik.rule=PathPrefix(`/api`) || PathPrefix(`/traefik`)"
- "traefik.http.middlewares.traefik-auth.basicauth.users=XXXX:YYYYYYYYYYYYYYYYY"
- "traefik.http.routers.traefik.middlewares=traefik-auth,traefik-strip-prefix"
- "traefik.http.middlewares.traefik-strip-prefix.stripprefix.prefixes=/traefik"
- "traefik.http.routers.traefik.service=api@internal"
Traefik.yml:
api:
dashboard: true
# insecure: true
debug: true
log:
format: json
level: DEBUG
accessLog:
format: common
entryPoints:
http:
address: ":80"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
watch: true
file:
filename: /non-docker-services.yml
watch: true
не-докер-services.yml:
http:
routers:
omv:
entryPoints:
- "http"
rule: "PathPrefix(`/omv`)"
service: omv
middlewares:
- omv-rr
middlewares:
omv-rr:
redirectRegex:
regex: "^http://myServer/omv(.*)"
replacement: "http://myServer:8000${1}"
permanent: true
services:
omv:
loadBalancer:
servers:
- url: "http://myServer:8000"
passHostHeader: true
docker-compose.yml:
version: "2"
services:
heimdall:
image: ghcr.io/linuxserver/heimdall
container_name: heimdall
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
volumes:
- /root/myDockers/heimdall/appdata/config:/config
ports:
- 8003:80
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.hppt.routers.heimdall.entrypoints=http"
- "traefik.http.routers.heimdall.rule=PathPrefix(`/heimdall`)"
- "traefik.http.routers.heimdall.middlewares=heimdall-redirect"
- "traefik.http.middlewares.heimdall-redirect.redirectregex.regex=`^http://myServer/heimdall(.*)`"
- "traefik.http.middlewares.heimdall-redirect.redirectregex.replacement=`http://myServer:8003`"
- "traefik.http.middlewares.heimdall-redirect.redirectregex.permanent=true"
- "traefik.http.services.heimdall.loadbalancer.server.url=`http://myServer:8003`"
Когда я звоню http://myServer/heimdall, ничего не происходит, через некоторое время я получаю тайм-аут. Я думаю, причина в том, что traefik пытается перенаправить на внутренний сетевой адрес докера heimdall 172.31.0.2:80, который, конечно же, недоступен для моего клиента. В журнале traefik написано: трафик | {"entryPointName":"http","level":"debug","msg":"Создание сервера 0 http://172.31.0.2:80","routerName":"heimdall@docker","serverName ":0,"serviceName":"heimdall","time":"2020-12-13T21:55:02+01:00"}
Может кто-то указать мне верное направление?
Вы можете проверить «Хост» на «traefik.http.routers.heimdall.rule»
может так и должно быть,
"traefik.http.routers.heimdall.rule=Host(`myServer`) && PathPrefix(`/heimdall`)"
После некоторой дальнейшей работы с Google я думаю, что нашел ответ в этом сообщении на форуме: https://community.traefik.io/t/traefik-v2-1-4-how-to-create-a-static-route- и-перенаправить-на-конкретный-хост-и-порт/4637
Они говорят, что вы можете маршрутизировать к самому контейнеру докера только в том случае, если вы используете метки докера для настройки traefik. Для маршрутизации за пределы контейнера докеров вам необходимо использовать поставщик файлов докеров. Это также объясняет, почему у меня это работает с OMV, но не с heimdall.
Здравствуйте, спасибо за ответ, но тоже не помогло...