在Kubernetes中管理多个身份提供商(IdP)的认证,可通过集成OpenID Connect(OIDC)并借助身份代理工具(如Dex)实现。以下是常用方案步骤:
-
部署身份代理(如Dex)
- 安装Dex到K8s集群,配置其连接多个IdP(如GitHub、LDAP、Google等)。
- 在Dex配置文件中定义每个IdP的连接器(connector),例如:
connectors: - type: github id: github name: GitHub clientID: <CLIENT_ID> clientSecret: <CLIENT_SECRET> - type: ldap id: ldap name: LDAP ...
-
配置Kubernetes OIDC参数
- 修改API Server启动参数,添加Dex的OIDC信息:
--oidc-issuer-url=https://dex.example.com/dex --oidc-client-id=k8s-cluster --oidc-username-claim=email --oidc-groups-claim=groups
- 将Dex的TLS证书挂载到API Server容器,确保证书信任。
- 修改API Server启动参数,添加Dex的OIDC信息:
-
设置RBAC规则
- 根据用户组或用户绑定角色,例如:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dev-group-binding subjects: - kind: Group name: "dev-team" # 来自Dex令牌的groups声明 roleRef: kind: ClusterRole name: edit
- 根据用户组或用户绑定角色,例如:
-
用户认证流程
- 用户通过
kubectl
登录时,Dex重定向到所选IdP完成认证,返回JWT令牌。 - 配置kubeconfig使用Dex作为OIDC提供方:
users: - name: user@example.com user: auth-provider: name: oidc config: id-token: <TOKEN> client-id: k8s-cluster idp-issuer-url: https://dex.example.com/dex
- 用户通过
-
验证与调试
- 检查API Server日志,确认OIDC配置无错误。
- 使用
kubectl get nodes --v=6
查看认证详细流程。 - 通过
kubectl auth can-i
命令验证权限是否正确。