当前位置: 首页 > news >正文

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

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

  • 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.核心组件

  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-urlOIDC 提供商的 URL(必须与 Token 中的 iss 声明一致)
--oidc-client-idAPI Server 在 OIDC 提供商处注册的客户端 ID
--oidc-username-claim指定用做用户名的 JWT 声明字段(默认为 sub
--oidc-groups-claim指定用做用户组的 JWT 声明字段
--oidc-ca-fileOIDC 提供商 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 证书使用

相关文章:

  • ​​​​​​​​​​​​​​如何使用函数指针来调用函数
  • MySql数据库运维学习笔记
  • c语言socket()函数的概念和使用案例
  • 常用设计模式(embeded Qt)
  • 主流虚拟化技术讲解
  • 用Python实现的双向链表类,包含了头插、尾插、归并排序等功能
  • 再探动态规划--背包问题
  • 听懂 弦外之音
  • C++算法基础笔记
  • C++STL容器之set
  • IEEE 会议论文作者信息Latex模板
  • 【Bluedroid】AVRCP 连接源码分析(一)
  • VUE四:Vue-cli
  • flink系列之:使用flink cdc3从mysql数据库同步数据到doris和starrocks
  • QEMU源码全解析 —— 内存虚拟化(17)
  • 计算机网络-面试总结
  • 常用高压缩率的视频容器格式,并进行大比例压缩
  • Windows 上源码安装 FastGPT
  • S7-1200如何利用时钟存储器做震荡电路
  • QQ登录测试用例报告
  • 商务部:外贸优品中华行活动采购意向超167亿元
  • A股2024年年报披露收官,四分之三公司盈利
  • 龙翔被撤销南京市人大常委会主任职务,此前已被查
  • 拍摄《我们这一代》的肖全开展“江浙沪叙事”
  • 证监会副主席王建军被查
  • 铺就长三角南北“交通动脉”,乍嘉苏改高速扩建项目首桩入位