【问题标题】:Traefik Docker Swarm Basic AuthenticationTraefik Docker Swarm 基本身份验证
【发布时间】:2019-08-25 23:41:06
【问题描述】:

我最近在启用 Docker Swarm 的集群上的 Docker 容器中设置了 Traefik v.1.7.14。作为测试,我创建了一个简单的服务:

docker service create --name demo-nginx \
--network traefik-net \
--label traefik.app.port=80 \
--label traefik.app.frontend.auth.basic="test:$$apr1$$LG8ly.Y1$$1J9m2sDXimLGaCSlO8.T20" \
--label traefik.app.frontend.rule="Host:t.myurl.com" \
nginx

正如上面的代码所说,我只是在我的 url 上安装 nginx,在指定的子域 t 上。

当这段代码运行时,服务被成功创建。 Traefik 还会在 traefik api 以及 traefik 管理员中显示服务。

在traefik api中,后端服务报如下:

"frontend-Host-t-myurl-com-0": {
"entryPoints": [
"http",
"https"
],
"backend": "backend-demo-nginx",
"routes": {
"route-frontend-Host-t-myurl-com-0": {
"rule": "Host:t.myurl.com"
}
},
"passHostHeader": true,
"priority": 0,
"basicAuth": null,
"auth": {
"basic": {}
}

当我去访问t.myurl.com时,我得到了认证提示,正如预期的那样。

但是,当我输入我的用户名/密码(在本例中为 test:test)时,登录提示只是再次提示我,而不是对我进行身份验证。

我已检查以确保我正在使用以下方法转义 docker 标签中的字符:

echo $(htpasswd -nb test test) | sed -e s/\\$/\\$\\$/g

生成密码。

作为测试的一部分,我还尝试关闭 https 入口点,因为我想看看这个循环是否是由 ssl 以某种方式触发的。这似乎对解决这个问题没有任何影响(规则:--label traefik.app.frontend.entryPoints=http)。 Traefik 在执行此操作时确实在 http 上做出了正确的响应,但密码验证仍然像以前一样陷入相同的提示循环。

删除traefik.app.frontend.auth.basic 标签后,我可以通过我的网址 (t.myurl.com) 访问我的网站。所以这个问题似乎在基本身份验证功能中是孤立的。

我的 DNS 提供商是 Cloudflare。

如果有人有任何想法,我将不胜感激。

【问题讨论】:

  • 您可以尝试将traefik.app.frontend.auth.basic 替换为traefik.app.frontend.auth.basic.users 吗?第一个已弃用
  • 嗨,zochamx,谢谢您的评论。我尝试用您的建议替换traefik.app.frontend.auth.basic。我仍然得到相同的登录提示。我还用 test test 再次运行了 echo 命令(usr/pwd ...只是为了 100% 确定我是从新开始的)。这些似乎都没有任何影响。密码仍然不被接受。
  • 嗯,我只是注意到了别的东西。你能做一个docker inspect <your nginx service id> 并检查你的标签的价值吗?这是正确的密码吗?我确信$ 符号需要在撰写文件中转义,尽管我对命令行服务创建命令有疑问。

标签: docker traefik


【解决方案1】:

也许你可以试试这个:

echo $(htpasswd -nb your-user your-password);

因为在命令行中不需要两个$$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2011-01-28
    相关资源
    最近更新 更多