Обратный прокси-сервер Traefik + Docker - разные аутентификации для разных путей? - PullRequest
2 голосов
/ 13 апреля 2019

Я использую сервис Docker (OwnTracks Recorder), использующий Traefik в качестве обратного прокси-сервера для аутентификации. Это делается через docker-compose; Вот ярлыки на сервисе:

  labels:
    - traefik.enable=true
    - traefik.frontend.rule=PathPrefixStrip:/owntracks
    - traefik.frontend.auth.basic=user1:hash1,user2:hash2

Это работает как задумано. Проблема, которую я пытаюсь решить, состоит в том, что Owntracks на самом деле имеет два элемента: панель мониторинга, которая будет на https://example.com/owntracks, и API, на https://example.com/owntracks/pub. Хотя сам Owntracks не имеет встроенной аутентификации, Я хотел бы ограничить панель мониторинга только user1, позволяя всем аутентифицированным пользователям получать доступ к API. Документация Owntrack использует ngnix в качестве примера, который, я думаю, в моем случае может выглядеть примерно так:

location /owntracks/dashboard/ {
     auth_basic              ....;
     proxy_pass              http://127.0.0.1:8083/;
     proxy_http_version      1.1;
     proxy_set_header        Host $host;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header        X-Real-IP $remote_addr;
}
location /owntracks/pub/ {
     auth_basic              ....;
     proxy_pass              http://127.0.0.1:8083/pub/;
     proxy_http_version      1.1;
     proxy_set_header        Host $host;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header        X-Real-IP $remote_addr;
}

Проблема в том, что я не могу понять, как настроить что-то подобное в Traefik. Насколько я понимаю, вы получаете один "ярлык" traefik.frontend.auth.basic для всего этого контейнера? В идеале, я бы предпочел установить это с помощью меток в файле docker-compose Owntracks, чтобы избежать необходимости настраивать конфигурацию для каждой службы в самом Traefik (т. Е. Чтобы я мог рассчитывать на автоматическое обнаружение службы Traefik).

Любые указатели приветствуются.

1 Ответ

0 голосов
/ 20 апреля 2019

Решением было использование сегментов.Документация Traefik немного вводит в заблуждение:

Сегментные метки используются для определения маршрутов к контейнеру, открывающему несколько портов.Сегмент - это группа меток, которые применяются к порту, отображаемому контейнером.Вы можете определить столько сегментов, сколько портов выставлено в контейнере.

На самом деле, сегменты могут использоваться не только для контейнеров, использующих несколько портов, и вы можете определить больше сегментов, чем открыто для портовна контейнере.В этом случае это было так просто:

  labels:
    - traefik.enable=true

    - traefik.segment1.frontend.rule=PathPrefix:/owntracks/pub;ReplacePath:/pub
    - traefik.segment1.frontend.auth.basic=user1:hash1,user2:hash2

    - traefik.segment2.frontend.rule=PathPrefixStrip:/owntracks
    - traefik.segment2.frontend.auth.basic=user1:hash1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...