Маршрутизация Traefik как на известный, так и на подстановочный поддомен в одном домене - PullRequest
0 голосов
/ 19 сентября 2018

Можно ли использовать субдомен подстановочного знака, который не включает в себя определенный субдомен?

*.mydomain.com OK
login.mydomain.com SKIP

Я не могу получить доступ к своему контейнеру входа в систему при использовании подстановочного знака в моем контейнере приложения.Ниже приведено изображение того, чего я пытаюсь достичь.(технически логотип трафика должен находиться между списком маршрутов и контейнерами)

Traefik Example Image

Следующая конфигурация не работает, если включено правило HostRegexp:{subdomain:[a-z]+}.${HOST_DOMAIN}.

Эта конфигурация успешно работает после удаления регулярного выражения хоста для всего, кроме подстановочных поддоменов.

services:
    traefik:
        image: traefik
        volumes:
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - .traefik.toml:/etc/traefik/traefik.toml:ro
        ports:
        - "80:80"
        - "443:443"

    api:
        image: my-api-image
        labels:
        - "traefik.enable=true"
        - "traefik.port=80"
        - "traefik.frontend.rule=Host:app.${HOST_DOMAIN}; PathPrefix: /api"

    app:
        image: my-app-image
        labels:
        - "traefik.enable=true"
        - "traefik.port=80"
        - "traefik.frontend.rule=Host:app.${HOST_DOMAIN}"
        - "traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.${HOST_DOMAIN}" # this second rule overwrites the first rule and I am aware of that, I am just showing what rules i've tried :)

    login:
        image: my-login-image
        labels:
        - "traefik.enable=true"
        - "traefik.port=80"
        - "traefik.frontend.rule=Host:login.${HOST_DOMAIN}"

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

"traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.${HOST_DOMAIN}"

Я также попытался оставить вышеупомянутое в приложении и удалить следующее без всякой удачи:

"traefik.frontend.rule=Host:app.${HOST_DOMAIN}"

Любые предложения или идеи будут оценены.Спасибо.

Редактировать:

Переписать это немного.

1 Ответ

0 голосов
/ 20 сентября 2018

Так вот, что сработало для меня:

version: '2'

services:
    traefik:
        image: traefik
        volumes:
        - /var/run/docker.sock:/var/run/docker.sock:ro
        # I removed your traefik.toml as you did not specify what is in it, so it's irrelevant
        ports:
        - "80:80"
        - "443:443"
        # Very helpful for debugging dashboard can be seen at http://localhost:8080 if the port is exposed
        - "8080:8080"
        labels:
        # You don't want traefik trying to create proxy for itself
        - "traefik.enable=false"
        # Since we have no traefik.toml any longer, let's put the essentials on the command line
        command: ["--api","--docker"]
    app:
        # this is my test image of a web server that dumps request back to the caller
        image: andrewsav/talkback
        # the hostname is a part of the dump, so let's specify something that we can relate to
        hostname: "app"
        labels:
        # note that you want this frontened to match the last. otherwise it will match login.${HOST_DOMAIN}"
        - "traefik.frontend.priority=1"
        - "traefik.enable=true"
        - "traefik.port=80"
        - "traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.${HOST_DOMAIN}"
    api:
        image: andrewsav/talkback
        hostname: "api"
        labels:
        # this frontend needs to match before the one above
        - "traefik.frontend.priority=2"
        - "traefik.enable=true"
        - "traefik.port=80"
        - "traefik.frontend.rule=Host:app.${HOST_DOMAIN}; PathPrefix: /api"
    login:
        image: andrewsav/talkback
        hostname: "login"
        labels:
        - "traefik.frontend.priority=3"
        - "traefik.enable=true"
        - "traefik.port=80"
        - "traefik.frontend.rule=Host:login.${HOST_DOMAIN}"

Несколько замечаний:

  • Плохой шлюз указывает, что конечная точка, с которой вы говорили traefik, не слушает.Посмотрите на приборную панель и выясните, какой бэкэнд используется, и дважды проверьте правильность IP / порта.
  • Вы должны использовать приоритеты для соответствия порядку.Пожалуйста, обратитесь к документации о том, как это работает.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...