Dex 是一个开源的 OpenID Connect (OIDC) 提供者,可以与 Kubernetes API 服务器集成,实现基于 OIDC 的身份验证。通过 Dex,你可以轻松集成各种身份提供商(如 LDAP、SAML、GitHub 等),从而为 Kubernetes 集群提供统一的身份认证入口。最佳实践包括:使用 Dex 作为 OIDC 身份提供者,配置 Kubernetes API 服务器的 --oidc-issuer-url 和相关参数,确保 TLS 证书安全,并结合 RBAC 进行细粒度授权。
安装 Dex
首先,下载并安装 Dex。可以从 GitHub 发布页面下载最新的二进制文件,或者使用 Docker 镜像。示例配置 dex.yaml: connectors: - type: github id: github name: GitHub config: clientID: $GITHUB_CLIENT_ID clientSecret: $GITHUB_CLIENT_SECRET redirectURI: http://localhost:5556/dex/callback
Kubernetes API Server 配置
编辑 kube-apiserver 的启动参数: --oidc-issuer-url=https://dex.example.com/dex --oidc-client-id=kubernetes --oidc-ca-file=/var/lib/kubernetes/pki/dex-ca.crt --oidc-username-claim=sub --oidc-groups-claim=groups 这将启用 OIDC 认证,Dex 作为 issuer 提供 token。
Dex 配置详解
Dex 的配置文件是 YAML 格式,主要部分包括 issuer、storage、connectors、oauth2。示例: issuer: http://dex:5556/dex storage: type: kubernetes config: inCluster: true connectors: - type: microsoft id: azure name: Azure_AD config: clientID: ... staticClients: - id: kubernetes redirectURIs: ['https://$K8S_INGRESS/api/dex/callback'] secret: ...
集成 GitHub 认证
在 Dex config 中添加 GitHub connector: connectors: - type: github id: github name: GitHub config: clientID: $GITHUB_CLIENT_ID clientSecret: $GITHUB_CLIENT_SECRET redirectURI: https://dex.yourdomain.com/callback orgs: - name: your-org
RBAC 与 OIDC 结合
创建 ClusterRoleBinding: kubectl create clusterrolebinding dex-admin --clusterrole=cluster-admin --user=oidc-issuer:dex.example.com:sub:user-id Dex 会将用户组信息传递到 ID Token 的 groups claim 中,Kubernetes 通过 oidc-groups-claim 使用它进行授权。
安全最佳实践
1. 使用 HTTPS,确保 Dex 和 API Server 通信加密。2. 定期轮转客户端密钥。3. 配置合适的 scopes,如 openid email profile groups。4. 使用 kubernetes storage 而非 etcd 以避免单点故障。5. 部署在 ingress 后,使用 valid redirect URIs。
FAQ
Q: Dex 如何处理用户会话?
A: Dex 使用 Redis 或 Kubernetes storage 存储会话,默认 TTL 为 24 小时,可配置。
Q: 如何调试 OIDC 认证失败?
A: 检查 API Server 日志,验证 issuer URL、token claims,并使用 dex logs 查看 connector 错误。
Q: 支持多租户吗?
A: 是,通过多个 connectors 和 namespaces 隔离。
Q: 与 Keycloak 比较哪个更好?
A: Dex 更轻量,专为 Kubernetes 设计;Keycloak 功能更全但复杂。