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** 授权

  1. 生成用户证书(CN=linux84)
cfssl gencert -ca=ca.crt -ca-key=ca.key \
  -config=ca-config.json -profile=kubernetes \
  oldboyedu-csr.json | cfssljson -bare linux84-user
  1. RBAC 绑定
subjects:
- kind: User
  name: "linux84"
  apiGroup: rbac.authorization.k8s.io

场景 2:为组 **dev-team** 授权

  1. 生成组证书(O=dev-team)
{
  "CN": "dummy",
  "names": [{"O": "dev-team"}]
}
  1. RBAC 绑定
subjects:
- kind: Group
  name: "dev-team"
  apiGroup: rbac.authorization.k8s.io

4. 关键注意事项

  1. 唯一性规则

    • 用户名(CN)必须全局唯一
    • 组名(O)可重复用于多个用户
  2. 权限继承

graph TD
  A[Group: dev-team] -->|授权| B[RoleA]
  C[User: linux84] -->|属于| A
  C -->|直接授权| D[RoleB]

    • 用户既继承组的权限,也可拥有独立权限
  1. 证书复用

    • 一个证书可以同时包含 CNO 字段,既作为用户也属于组
{
  "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. 生产环境建议

  1. 组命名规范

    • 按功能划分:dev-teamops-team
    • 按环境划分:prod-userstest-users
  2. 审计友好性

"names": [
  {
    "O": "dev-team",
    "OU": "ProjectA"  // 追加部门/项目信息
  }
]
  1. 最小权限原则

    • 优先用组授权,减少单个用户的特权分配

调试命令

# 查看证书中的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

通过合理配置 CNO 字段,可以灵活实现用户与组的分层权限管理。

posted @ 2025-12-30 16:31  shuix1ng  阅读(0)  评论(0)    收藏  举报