Traefik v2: перенаправить http://имя_сервера/foo на http://имя_сервера:порт

У меня есть 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"}

Может кто-то указать мне верное направление?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
1 723
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете проверить «Хост» на «traefik.http.routers.heimdall.rule»

может так и должно быть,

"traefik.http.routers.heimdall.rule=Host(`myServer`) && PathPrefix(`/heimdall`)"

Здравствуйте, спасибо за ответ, но тоже не помогло...

user3620060 19.12.2020 00:38
Ответ принят как подходящий

После некоторой дальнейшей работы с Google я думаю, что нашел ответ в этом сообщении на форуме: https://community.traefik.io/t/traefik-v2-1-4-how-to-create-a-static-route- и-перенаправить-на-конкретный-хост-и-порт/4637

Они говорят, что вы можете маршрутизировать к самому контейнеру докера только в том случае, если вы используете метки докера для настройки traefik. Для маршрутизации за пределы контейнера докеров вам необходимо использовать поставщик файлов докеров. Это также объясняет, почему у меня это работает с OMV, но не с heimdall.

Другие вопросы по теме