docker - Traefik Docker Swarm 基本身份验证
问题描述
我最近在启用 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 上,在t
指定的子域上安装 nginx。
当此代码运行时,服务将成功创建。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
标签时,我可以通过我的 url (t.myurl.com) 访问我的网站。所以这个问题似乎在基本身份验证功能中是孤立的。
我的 DNS 提供商是 Cloudflare。
如果有人有任何想法,我将不胜感激。
解决方案
也许你可以试试这个:
echo $(htpasswd -nb your-user your-password);
$$
因为您在命令行中不需要两个。
推荐阅读
- python - 如何仅计算给定字符串python中的连续重复子字符串
- php - 我应该对 SQL 查询使用 for 循环还是使用具有多个 OR 的 WHERE 子句并处理结果
- c# - 如何从 Github 下载目录
- nginx - 使用 nodeport 访问 Kubernetes 服务返回连接被拒绝
- scala - 生成创建类的应用方法
- linux - 带有 Realm 数据库的 Linux 应用程序
- arrays - 将数组传递给bash脚本中的函数
- prometheus - 使用 Python 在 Prometheus 中编写多个自定义收集器
- objective-c - @property(复制)与方法 [复制]
- python - 获取无效参数:在 keras 中使用 IoU 度量时,所有输入的形状必须匹配:values[0].shape = [401408] != values[1].shape = [24485888]