在Kubernetes中实现权限控制与角色管理的核心是通过RBAC(基于角色的访问控制)模型,结合ServiceAccount、Role、ClusterRole、RoleBinding及ClusterRoleBinding对象。以下是关键步骤:
-
命名空间隔离:
- 使用
kubectl create namespace <namespace>
创建独立命名空间,隔离不同环境(如dev/prod)。
- 使用
-
角色定义:
- Role(命名空间级权限):通过
rules
字段定义对特定资源(如pods、services)的操作权限(get/list/update等)。 - ClusterRole(集群级权限):适用于非命名空间资源(如nodes)或跨命名空间的权限聚合。
- Role(命名空间级权限):通过
-
角色绑定:
- RoleBinding:将Role与用户/ServiceAccount绑定到特定命名空间。
- ClusterRoleBinding:将ClusterRole权限全局授予主体(慎用)。
-
服务账户管理:
- 为每个微服务创建专用ServiceAccount(
kubectl create serviceaccount <name>
),避免使用default账户。 - 在Deployment中通过
serviceAccountName
字段显式关联Pod与ServiceAccount。
- 为每个微服务创建专用ServiceAccount(
-
最小权限原则:
- 通过
kubectl auth can-i --as=system:serviceaccount:<namespace>:<sa> <verb> <resource>
验证权限是否按需分配。 - 定期审计RoleBinding,清理未使用的权限。
- 通过
-
集群级权限控制:
- 使用
ClusterRole
配合aggregationRule
聚合通用权限(如监控组件需要的只读权限)。 - 通过
kubeconfig
文件管理外部用户证书/OIDC集成,结合RBAC细化访问控制。
- 使用
补充实践:
- 通过
kubectl describe rolebinding
检查权限映射关系 - 使用工具如kubeaudit进行权限合规性扫描
- 对敏感操作(如exec/port-forward)实施审批流程控制