Как предоставить глобальный файл .htpassword для нескольких Docker Swarm Stacks? - PullRequest
1 голос
/ 18 февраля 2020

Я использую около 20 служебных стеков на хосте docker swarm, которые все предоставляют свои собственные интерфейсы https, которые защищены с помощью basi c auth с использованием Traefik (одно имя пользователя и пароль для всех служб).

Я хотел бы централизованно управлять файлом .htpassword или именем пользователя / паролемHa sh, чтобы, если есть необходимость в изменении пароля, я мог сделать это один раз, и это затронет все службы сразу или после повторного развертывания. Я использую Swarmpit для организации Docker Swarm.

Я изучил Docker Secrets и Docker Config, но оба они кажутся неизменными, если активно используются работающей службой. Я также думал о переменных среды, но я не могу найти свой путь.

Как мне go об этом?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Вы можете потенциально сделать это с общим томом, поместив файл в один том, и все контейнеры смонтируют этот том. Если контейнеры Swarm распределены по нескольким узлам, вам необходимо либо смонтировать сетевой том (например, NFS), либо обновить том на каждом хосте в отдельности.

Этот вариант использования является именно тем, что docker секрет или docker конфиг предназначены для решения. Вы внедряете содержимое файла в secret / config, и docker автоматически развертывает его на каждом узле, где запущена служба.

Да, они неизменны. И вы не будете менять их в существующем контейнере. Когда вы внесете изменение и оно будет управляться роем, вы получите непрерывное обновление сервисов. Что я сделал, чтобы управлять этим в моей среде, так это ввести номер версии secret / config в качестве переменной среды и обновить эту переменную с помощью скрипта. У меня есть сценарий и пример использования здесь: https://github.com/sudo-bmitch/docker-config-update

0 голосов
/ 19 февраля 2020

Если вы не хотите использовать docker секреты / конфиги для этого, то вы можете сделать следующее (для Traefik 2.1):

Сначала добавьте каталог конфигурации Dynami c в вашу конфигурацию traefik.

--providers.file.directory=/my/path/to/dynamic/conf
--providers.file.watch=true

Смонтируйте том в этом месте и создайте файл промежуточного программного обеспечения (например, middlewares.yml)

http:
  middlewares:
    defaultAuth:
      basicAuth:
        users:
          - "admin:$apr1$13r2hvw0$Oljx0V7CwdQJG7WxLWRVt0" # correcthorsebatterystaple

Теперь вы можете редактировать массив пользователей, и traefik будет выбирать изменения автоматически.

Чтобы использовать промежуточное ПО, просто укажите его на ярлыках docker:

- traefik.http.routers.<my_router_name>.middlewares=defaultAuth@file

Для traefik 1.x вы можете добавить следующую метку

- traefik.frontend.auth.basic.usersFile=/path/.htpasswd

Затем обновите файл при необходимости и перезапустите затронутые службы. Я больше не пользуюсь 1.x, чтобы не проверять.

...