Kubernetes身份验证权威指南:Dex集成方案详解与最佳实践

文章导读
Dex 是一个开源的 OpenID Connect (OIDC) 提供者,可以与 Kubernetes API 服务器集成,实现基于 OIDC 的身份验证。通过 Dex,你可以轻松集成各种身份提供商(如 LDAP、SAML、GitHub 等),从而为 Kubernetes 集群提供统一的身份认证入口。最佳实践包括:使用 Dex 作为 OIDC 身份提供者,配置 Kubernetes API 服务器
📋 目录
  1. 安装 Dex
  2. Kubernetes API Server 配置
  3. Dex 配置详解
  4. 集成 GitHub 认证
  5. RBAC 与 OIDC 结合
  6. 安全最佳实践
  7. FAQ
A A

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

Kubernetes身份验证权威指南:Dex集成方案详解与最佳实践

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 功能更全但复杂。