K8S中rbac服务授权
在 Kubernetes 的 RBAC 认证体系中,组(Group) 和 用户(User) 的配置主要在以下方面存在差异:
1. 证书配置区别
用户证书(User)
{
"CN": "linux84", // 用户名(唯一标识)
"names": [
{
"O": "oldboyedu" // 用户所属组(可选)
}
]
}
**CN**(Common Name):直接作为用户名,在 RBAC 中通过User类型绑定
subjects:
- kind: User
name: "linux84" # 必须与CN完全匹配
apiGroup: rbac.authorization.k8s.io
组证书(Group)
{
"CN": "dummy", // 可忽略(通常无实际作用)
"names": [
{
"O": "dev-team" // 组名(核心字段)
}
]
}
**O**(Organization):作为组名,在 RBAC 中通过Group类型绑定
subjects:
- kind: Group
name: "dev-team" # 必须与O字段匹配
apiGroup: rbac.authorization.k8s.io
2. RBAC 绑定方式对比
| 配置项 | 用户(User) | 组(Group) |
|---|---|---|
| 证书字段 | CN 作为用户名 |
O 作为组名 |
| 绑定类型 | kind: User |
kind: Group |
| 适用场景 | 个人开发者、管理员 | 团队、部门(批量授权) |
| 示例 | name: "linux84" |
name: "dev-team" |
3. 实际应用示例
场景 1:为用户 **linux84** 授权
- 生成用户证书(CN=linux84)
cfssl gencert -ca=ca.crt -ca-key=ca.key \
-config=ca-config.json -profile=kubernetes \
oldboyedu-csr.json | cfssljson -bare linux84-user
- RBAC 绑定:
subjects:
- kind: User
name: "linux84"
apiGroup: rbac.authorization.k8s.io
场景 2:为组 **dev-team** 授权
- 生成组证书(O=dev-team)
{
"CN": "dummy",
"names": [{"O": "dev-team"}]
}
- RBAC 绑定:
subjects:
- kind: Group
name: "dev-team"
apiGroup: rbac.authorization.k8s.io
4. 关键注意事项
-
唯一性规则:
-
- 用户名(
CN)必须全局唯一 - 组名(
O)可重复用于多个用户
- 用户名(
-
权限继承:
graph TD
A[Group: dev-team] -->|授权| B[RoleA]
C[User: linux84] -->|属于| A
C -->|直接授权| D[RoleB]
-
- 用户既继承组的权限,也可拥有独立权限
-
证书复用:
-
- 一个证书可以同时包含
CN和O字段,既作为用户也属于组
- 一个证书可以同时包含
{
"CN": "linux84",
"names": [{"O": "dev-team"}]
}
subjects:
- kind: User
name: "linux84"
apiGroup: rbac.authorization.k8s.io
- kind: Group
name: "dev-team"
apiGroup: rbac.authorization.k8s.io
5. 生产环境建议
-
组命名规范:
-
- 按功能划分:
dev-team、ops-team - 按环境划分:
prod-users、test-users
- 按功能划分:
-
审计友好性:
"names": [
{
"O": "dev-team",
"OU": "ProjectA" // 追加部门/项目信息
}
]
-
最小权限原则:
-
- 优先用组授权,减少单个用户的特权分配
调试命令
# 查看证书中的CN和O字段
openssl x509 -in linux84.pem -noout -subject
# 输出示例:subject=/O=oldboyedu/CN=linux84
# 验证RBAC绑定
kubectl auth can-i list pods --as linux84
kubectl auth can-i create deployments --as-group dev-team
通过合理配置 CN 和 O 字段,可以灵活实现用户与组的分层权限管理。

浙公网安备 33010602011771号