减少容器管理内置权限点¶
从容器管理 v0.50.0 开始,您可以减少 Namespace 内置角色(NS Admin、NS Editor、NS Viewer)的权限。 本文以禁止 NS Viewer 查看 Pod 日志为例,说明如何减少内置角色的权限点。
前提条件¶
- 容器管理版本为 v0.50.0 或更高版本。
- 已接入 Kubernetes 集群或 创建 Kubernetes 集群。
- 具备 Global Cluster 的管理员权限,并且能够使用
kubectl操作该集群。
Note
- 只需在 Global Cluster 创建权限缩减规则。Kpanda 控制器会将计算后的内置角色权限同步到所有子集群, 同步过程可能需要一段时间。
- 权限缩减仅支持 Namespace 内置角色
role-template-ns-admin、role-template-ns-edit和role-template-ns-view,不支持 Cluster 级内置角色。 - 只能使用带有指定 Label 的 ClusterRole 缩减权限,不能使用 Role。不要直接修改内置 ClusterRole, 否则 Kpanda 控制器会覆盖您的修改。
内置角色与 Label 的对应关系¶
为目标角色创建权限缩减 ClusterRole 时,将对应 Label 的值设置为 "delete":
| 内置角色 | ClusterRole | Label |
|---|---|---|
| NS Admin | role-template-ns-admin |
rbac.kpanda.io/role-template-ns-admin: "delete" |
| NS Editor | role-template-ns-edit |
rbac.kpanda.io/role-template-ns-edit: "delete" |
| NS Viewer | role-template-ns-view |
rbac.kpanda.io/role-template-ns-view: "delete" |
Kpanda 会先合并内置权限和通过 merge 或 true 追加的权限,再减去所有 delete 规则中声明的权限:
操作步骤¶
以下步骤从 NS Viewer 中移除读取 Pod 日志的权限,同时保留查看 Pod 状态和其他资源的权限。
-
在 Global Cluster 中创建以下 ClusterRole:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: delete-ns-view-pod-log-read # (1)! labels: rbac.kpanda.io/source: "others" rbac.kpanda.io/role-template-ns-view: "delete" # (2)! rules: - apiGroups: [""] resources: ["pods/log"] verbs: ["get", "list", "watch"]- 名称可以自定义,但必须符合 Kubernetes 资源命名规范且不能与已有资源重名。
- 如果要缩减其他 Namespace 内置角色的权限,请替换为该角色对应的 Label,值保持为
"delete"。
-
应用 YAML 文件,并等待 Kpanda 控制器完成同步:
-
查看 NS Viewer 对应的内置 ClusterRole,确认
pods/log不再包含get、list和watch权限:同步完成后,已授予 NS Viewer 的用户将无法再查看 Pod 日志。
恢复权限¶
删除权限缩减 ClusterRole 后,Kpanda 会自动重新计算内置角色,并恢复相应权限:
等待同步完成后,运行以下命令确认权限已恢复:
使用限制¶
delete规则不支持resourceNames和nonResourceURLs。- 不支持从通配符
apiGroups: ["*"]或resources: ["*"]中仅删除某个具体值。如需删除通配符覆盖的全部值, 请在delete规则中也使用"*"。 - 不支持
*/subresource形式的资源通配符,例如*/scale。 - 如果原权限的
verbs为"*",可以删除get、list、watch、create、update、patch、delete和deletecollection等 Kubernetes 标准操作。对于自定义操作,请先确认 Kpanda 是否支持展开该操作。 - 无效的
delete配置不会生效,对应角色将保留内置默认权限。请检查 Kpanda 控制器日志并修正配置。