Traefik BasicAuth 中间件文档
BasicAuth(HTTP Basic 认证)
basicAuth 中间件只允许授权用户访问服务。
配置示例
YAML 格式
yaml
# 声明用户列表
http:
middlewares:
test-auth:
basicAuth:
users:
- "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"
- "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"TOML 格式
toml
# 声明用户列表
[http.middlewares]
[http.middlewares.test-auth.basicAuth]
users = [
"test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/",
"test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0",
]Labels 格式
yaml
# 声明用户列表
#
# 注意:在 docker-compose.yml 中使用时,密码哈希中所有的 `$` 符号都需要进行双重转义。
# 要创建 user:password 对,可以使用以下命令:
# echo $(htpasswd -nB user) | sed -e s/\\$/\\$\\$/g
#
# 此外,在不进行变量展开的上下文中(例如 Ansible 的 docker_container 模块),`$` 符号**不应**被双重转义。
labels:
- "traefik.http.middlewares.test-auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"Tags 格式
json
{
"Tags": [
"traefik.http.middlewares.test-auth.basicauth.users=test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/,test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"
]
}Kubernetes 格式
yaml
# 声明用户列表
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-auth
spec:
basicAuth:
secret: secretName配置选项
| 字段 | 描述 | 默认值 | 必填 |
|---|---|---|---|
users | 授权用户数组。每个用户必须使用 name:hashed-password 格式声明。更多信息参见密码格式。 | "" | 否 |
usersFile | 包含授权用户的外部文件路径。文件内容是 name:hashed-password 列表。更多信息参见用户与用户文件。 | "" | 否 |
realm | 允许自定义认证 realm。 | "traefik" | 否 |
headerField | 允许定义用于存储已认证用户的头字段。 | "" | 否 |
removeHeader | 允许在将请求转发到服务之前移除 Authorization 头。 | false | 否 |
密码格式
密码必须使用 MD5、SHA1 或 BCrypt 进行哈希。 使用 htpasswd 工具生成密码。
users & usersFile
- 如果同时提供了
users和usersFile,它们会被合并。usersFile的内容优先级高于users中的值。 - 由于在 Kubernetes 中引用文件路径不切实际,
users和usersFile字段在 Kubernetes IngressRoute 中不可用。应改用secret字段。
Kubernetes Secrets
users 选项支持 Kubernetes secrets。
Kubernetes kubernetes.io/basic-auth secret 类型
Kubernetes 支持一种特殊的 kubernetes.io/basic-auth secret 类型。 该 secret 必须包含两个键:username 和 password。
请注意,这些键未经过任何哈希或加密处理,因此比其他方法安全性更低。 你可以在 Kubernetes Basic 认证 Secret 文档 中找到更多信息。
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。