Learn
Kubernetes/23-rbac

RBAC 权限控制

谁能在哪个命名空间删除 Pod?哪个 ServiceAccount 能读取 Secret?Kubernetes 通过 RBAC(Role-Based Access Control) 进行细粒度授权,遵循「最小权限」原则。

1. 四个核心对象

  • Role / ClusterRole:定义「一组权限规则」。Role 限定在单个命名空间,ClusterRole 集群范围。
  • RoleBinding / ClusterRoleBinding:把角色绑定到用户、组或 ServiceAccount。
ℹ️ClusterRole 也能绑到命名空间

ClusterRole 既可用 ClusterRoleBinding 做集群级授权,也可用 RoleBinding 在指定命名空间内绑定(权限被限制在该命名空间)。

2. 定义角色

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
  namespace: default
rules:
  - apiGroups: [""]
    resources: ["pods", "pods/log"]
    verbs: ["get", "list", "watch"]

3. 绑定到 ServiceAccount

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
  - kind: ServiceAccount
    name: reporter
    namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

4. 常用排查命令

# 查看当前身份能做什么
kubectl auth can-i delete pods --as=system:serviceaccount:default:reporter
kubectl auth can-i "*" "*"        # 是否集群管理员
 
# 查看某主体拥有的权限
kubectl get rolebindings -n default
⚠️慎用 cluster-admin

cluster-admin ClusterRole 拥有集群全部权限。给普通应用或 CI 账号绑定时务必收窄到具体资源和动词,避免横向移动风险。

小结

  • RBAC 四件套:Role/ClusterRole + RoleBinding/ClusterRoleBinding
  • 权限规则由 apiGroups/resources/verbs 组成
  • 用 kubectl auth can-i 验证授权,遵循最小权限
  • 下一章学习 NetworkPolicy 如何隔离 Pod 间网络 →