Kubernetes的权限控制与角色管理主要通过RBAC(Role-Based Access Control)实现,核心步骤如下:
- 启用RBAC:确保API Server启动参数包含
--authorization-mode=RBAC
。 - 定义角色(Role/ClusterRole):
- Role作用于单个命名空间,通过YAML定义资源操作权限(如get、list、create)。
- ClusterRole作用于集群范围(如访问nodes、persistentvolumes)。
- 绑定角色(RoleBinding/ClusterRoleBinding):
- 将角色与用户/服务账户(ServiceAccount)绑定,RoleBinding限定命名空间,ClusterRoleBinding全局生效。
- 服务账户(ServiceAccount):为Pod分配特定ServiceAccount实现精细化权限控制。
示例配置:
# 创建开发命名空间只读角色
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: dev
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
# 绑定服务账户
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: dev
subjects:
- kind: ServiceAccount
name: ci-cd-bot
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
最佳实践:
- 遵循最小权限原则
- 使用命名空间隔离不同团队/环境
- 定期审计权限(kubectl get rolebindings --all-namespaces)
- 通过
kubectl auth can-i
命令验证权限