Kubernetes控制平面组件:APIServer 基于 OpenID 的认证机制详解

发布于:2025-02-23 ⋅ 阅读:(15) ⋅ 点赞:(0)

云原生学习路线导航页(持续更新中)

本文主要对 kubernetes API Server 认证机制中的 OpenID 认证进行介绍,包括OIDC的基本概念、核心组件、认证流程、操作案例、配置参数以及安全事项

1.基本概念

OpenID Connect (OIDC) 是基于 OAuth 2.0 的身份认证协议,Kubernetes 通过 OIDC 实现与企业身份提供商(如 Azure AD、Google Workspace 等)的集成。主要特性包括:

  • 支持标准 OIDC 提供商
  • 基于 JWT 令牌的认证
  • 可与 RBAC 深度集成
  • 适合企业级身份管理

2.核心组件

  1. OIDC 身份提供商(如 Keycloak、Dex、Azure AD)
  2. API Server 配置参数
  3. kubectl 客户端配置
  4. 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.认证流程

  1. 用户通过 kubectl 发起认证请求
  2. kubectl 重定向到 OIDC 提供商登录页面
  3. 用户完成身份提供商认证
  4. OIDC 提供商返回 ID Token
  5. API Server 验证 Token 有效性
  6. 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.安全注意事项

  1. 必须使用 HTTPS 协议通信
  2. 严格限制 --oidc-groups-claim 的权限范围
  3. 定期轮换 OIDC 客户端 Secret
  4. 建议启用 API Server 的审计日志
  5. 生产环境推荐使用权威 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 证书使用