在Kubernetes中通过RBAC配置不同命名空间的权限,需遵循以下核心步骤:
- 明确权限边界:根据团队职能(如开发、测试、运维)划分命名空间,避免跨命名空间权限泄露。
- 精细化角色定义:
- 使用
Role
(命名空间级)定义具体权限(如对Pod的get/list),通过RoleBinding
绑定到用户/ServiceAccount。 - 跨命名空间复用权限时,用
ClusterRole
结合RoleBinding
(指定namespace),而非全局ClusterRoleBinding。
- 使用
- 实战示例:
# 创建开发环境的Role kind: Role metadata: namespace: dev name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list"] --- # 绑定到特定ServiceAccount kind: RoleBinding metadata: namespace: dev name: read-pods subjects: - kind: ServiceAccount name: ci-cd-agent namespace: dev roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io
- 关键验证命令:
kubectl auth can-i list pods --as=system:serviceaccount:dev:ci-cd-agent -n dev
直接验证权限是否生效。
- 避坑指南:
- 权限泄露:禁止在RoleBinding中引用跨命名空间的ClusterRoleBinding。
- 审计工具:定期通过
kubectl get rolebindings,clusterrolebindings --all-namespaces -o custom-columns=KIND:.kind,NAME:.metadata.name,ROLE:.roleRef.name,SUBJECT:.subjects
检查所有绑定关系。
经验总结:RBAC配置需遵循最小权限原则,同时通过命名空间隔离实现环境自治。建议结合GitOps工具(如Argo CD)实现权限声明式管理,确保审计追踪。