-
创建ServiceAccount:为应用分配专用ServiceAccount,避免使用default账号。命令示例:
kubectl create serviceaccount <serviceaccount-name> -n <namespace>
-
定义角色(Role/ClusterRole):
- Role(命名空间级别):通过YAML定义资源操作权限,如
rules.apiGroups/resource/verbs
。示例:kind: Role rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list"]
- ClusterRole(集群级别):适用于跨命名空间权限,如访问Nodes或CRD。
- Role(命名空间级别):通过YAML定义资源操作权限,如
-
绑定角色(RoleBinding/ClusterRoleBinding):
- 将ServiceAccount与角色关联。命名空间内使用RoleBinding,跨命名空间使用ClusterRoleBinding。示例命令:
kubectl create rolebinding <binding-name> --role=<Role名> --serviceaccount=<namespace>:<serviceaccount-name> -n <namespace>
- 将ServiceAccount与角色关联。命名空间内使用RoleBinding,跨命名空间使用ClusterRoleBinding。示例命令:
-
配置Pod使用ServiceAccount:在Deployment/Pod的YAML中指定
serviceAccountName
字段,确保容器继承权限。 -
权限验证:
- 使用
kubectl auth can-i <verb> <resource> --as=system:serviceaccount:<namespace>:<serviceaccount-name>
进行权限检查 - 通过临时Pod执行
kubectl exec
命令测试实际访问能力
- 使用
-
权限更新与审计:
- 通过
kubectl edit role/<role-name>
动态调整权限规则 - 结合审计日志(audit-logging)监控异常访问行为
- 通过
注:生产环境建议遵循最小权限原则,定期使用工具如kube-bench进行RBAC配置合规性检查。