- kubernetes学习系列快捷链接
- Kubernetes架构原则和对象设计(一)
- Kubernetes架构原则和对象设计(二)
- Kubernetes架构原则和对象设计(三)
- Kubernetes控制平面组件:etcd(一)
- Kubernetes控制平面组件:etcd(二)
- Kubernetes控制平面组件:etcd常用配置参数
- Kubernetes控制平面组件:etcd高可用集群搭建
- Kubernetes控制平面组件:etcd高可用解决方案
- Kubernetes控制平面组件:Kubernetes如何使用etcd
- kubectl 和 kubeconfig 基本原理
- kubeadm 升级 k8s集群 1.17到1.20
- Kubernetes常见问题解答
- 查看云机器的一些常用配置
本文主要对 kubernetes API Server 认证机制中的 OpenID 认证进行介绍,包括OIDC的基本概念、核心组件、认证流程、操作案例、配置参数以及安全事项
1.基本概念
OpenID Connect (OIDC) 是基于 OAuth 2.0 的身份认证协议,Kubernetes 通过 OIDC 实现与企业身份提供商(如 Azure AD、Google Workspace 等)的集成。主要特性包括:
- 支持标准 OIDC 提供商
- 基于 JWT 令牌的认证
- 可与 RBAC 深度集成
- 适合企业级身份管理
2.核心组件
- OIDC 身份提供商(如 Keycloak、Dex、Azure AD)
- API Server 配置参数
- kubectl 客户端配置
- ClusterRoleBinding 权限绑定
3.操作示例(以 Dex 为例)
3.1.准备 OIDC 提供商
# 部署 Dex OIDC 服务(示例配置)
cat <<EOF > dex-config.yaml
issuer: https://dex.yourdomain.com:32000
storage:
type: kubernetes
config:
inCluster: true
web:
http: 0.0.0.0:5556
oauth2:
skipApprovalScreen: true
staticClients:
- id: kubernetes
secret: ZXhhbXBsZS1hcHAtc2VjcmV0
redirectURIs:
- 'http://localhost:8000'
name: 'Kubernetes API Server'
EOF
# 使用 Helm 部署 Dex
helm repo add dex https://charts.dexidp.io
helm install dex dex/dex -f dex-config.yaml
3.2.配置 API Server
# 修改 kube-apiserver 配置(kubeadm 部署)
sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
# 添加以下参数:
- --oidc-issuer-url=https://dex.yourdomain.com:32000
- --oidc-client-id=kubernetes
- --oidc-username-claim=email
- --oidc-groups-claim=groups
- --oidc-username-prefix=oidc:
3.3.创建 RBAC 绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: oidc-admin-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: User
name: "oidc:admin@yourdomain.com"
apiGroup: rbac.authorization.k8s.io
3.4.配置 kubectl
# 安装 oidc-login 插件
kubectl krew install oidc-login
# 生成 kubeconfig
kubectl config set-credentials oidc-user \
--exec-api-version=client.authentication.k8s.io/v1beta1 \
--exec-command=kubectl \
--exec-arg=oidc-login \
--exec-arg=get-token \
--exec-arg=--oidc-issuer-url=https://dex.yourdomain.com:32000 \
--exec-arg=--oidc-client-id=kubernetes \
--exec-arg=--oidc-client-secret=ZXhhbXBsZS1hcHAtc2VjcmV0
4.认证流程
- 用户通过 kubectl 发起认证请求
- kubectl 重定向到 OIDC 提供商登录页面
- 用户完成身份提供商认证
- OIDC 提供商返回 ID Token
- API Server 验证 Token 有效性
- RBAC 根据 Claim 信息授权
5.关键配置参数说明
参数 | 说明 |
---|---|
--oidc-issuer-url |
OIDC 提供商的 URL(必须与 Token 中的 iss 声明一致) |
--oidc-client-id |
API Server 在 OIDC 提供商处注册的客户端 ID |
--oidc-username-claim |
指定用做用户名的 JWT 声明字段(默认为 sub ) |
--oidc-groups-claim |
指定用做用户组的 JWT 声明字段 |
--oidc-ca-file |
OIDC 提供商 CA 证书路径(自签名证书时需要) |
6.安全注意事项
- 必须使用 HTTPS 协议通信
- 严格限制
--oidc-groups-claim
的权限范围 - 定期轮换 OIDC 客户端 Secret
- 建议启用 API Server 的审计日志
- 生产环境推荐使用权威 OIDC 提供商(如 Azure AD)
7.验证配置
# 查看当前用户身份
kubectl get --raw /apis/authorization.k8s.io/v1/selfsubjectaccessreviews -d '{"spec":{"resourceAttributes":{"namespace":"default","verb":"get","resource":"pods"}}}'
# 检查用户信息
kubectl config view --minify -o jsonpath='{.users[0].user}'
注意:实际部署时需要根据具体 OIDC 提供商的文档调整配置参数,建议配合 Ingress 和 TLS 证书使用