【问题标题】:How to provide a global .htpassword file to multiple Docker Swarm Stacks?如何为多个 Docker Swarm Stacks 提供全局 .htpassword 文件?
【发布时间】:2020-02-18 20:49:15
【问题描述】:

我在一个 docker swarm 主机上运行了大约 20 个服务堆栈,它们都暴露了它们各自的 https 前端,这些前端由使用 Traefik 的基本身份验证保护(所有服务的用户名和密码相同)。

我希望集中管理 .htpassword 文件或用户名/密码哈希,这样如果需要更改密码,我可以执行一次,它会立即或重新部署后影响所有服务。我正在使用 Swarmpit 来编排 Docker Swarm。

我查看了 Docker Secrets 和 Docker Configs,但如果正在运行的服务主动使用它们,它们似乎都是不可变的。我也考虑过环境变量,但我真的找不到方法。

我该怎么办?

【问题讨论】:

    标签: docker docker-compose docker-swarm docker-swarm-mode docker-stack


    【解决方案1】:

    您可以使用共享卷执行此操作,将文件放在一个卷中并让所有容器安装该卷。如果 swarm 容器分布在多个节点上,您需要挂载网络卷(例如 NFS),或者单独更新每个主机上的卷。

    这种用例正是 docker secret 或 docker config 旨在解决的问题。您将文件的内容注入到 secret/config 中,docker 会自动将其部署到运行服务的每个节点。

    是的,这些是不可变的。而且您不会在现有容器中热交换这些。当您进行更改并由 swarm 管理时,您将获得服务的滚动更新。我在我的环境中管理它所做的是将秘密/配置的版本号作为环境变量注入,并使用脚本更新该变量。我在这里有该脚本和示例用法:https://github.com/sudo-bmitch/docker-config-update

    【讨论】:

      【解决方案2】:

      如果您不想为此使用 docker secrets/configs,那么您可以执行以下操作(对于 Traefik 2.1):

      首先将动态配置目录添加到您的 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,因此没有经过测试。

      【讨论】:

      • 谢谢。由于使用了中间件,这是否适用于 Traefik 1.7?
      • @Jabb 不,中间件配置是 2.x 版本独有的。我用 1.7 解决方法更新了我的答案,但我不确定在 htpasswd 文件更改后是否需要重新启动服务。无论如何你应该更新,因为我不希望他们维护 1.7 分支太久。
      猜你喜欢
      • 1970-01-01
      • 2022-11-10
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      相关资源
      最近更新 更多