【发布时间】:2021-07-08 06:57:31
【问题描述】:
RBAC 在 Kubernetes 中的工作方式我不太了解。
我会陈述我理解的和不理解的。基于documentation,RBAC API定义了4种kubernetes对象:
- 角色
- 集群角色
- 角色绑定
- 集群角色绑定
角色
角色定义了一组在特定命名空间内的权限。 Role 定义包含一个命名空间字段,并且 Role 对象是在该命名空间中创建的。来自文档:
角色总是在特定的命名空间内设置权限;创建角色时,必须指定它所属的命名空间。
我想这意味着角色中定义的所有规则仅应用于该命名空间中的对象。我会继续假设这个假设是正确的,否则请纠正我。
集群角色
相比之下,ClusterRole 是一个非命名空间资源。
据我所知(再次,如果我错了,请纠正我)ClusterRole 用于定义规则,这些规则定义了与未绑定到任何命名空间(例如节点)的资源有关的权限。
角色绑定 RoleBinding 对象是一个命名空间对象。它的功能是将Roles绑定到subjects,即授予具有特定角色的主题(用户、ServiceAccounts、组)。它还可以将主题与 ClusterRoles 绑定。
ClusterRoleBinding
我对这篇文章的方式不太感兴趣。
问题
我的问题是,为什么 RoleBinding 定义中有 namespace 元数据位?如果确实如我在 Role 部分中假设的那样,Role 仅授予该 Role 的指定命名空间中的对象权限,那么该限制已在 Role 对象本身中定义,为什么又在 RoleBinding 对象中定义?
当我写这些行时,我突然想到了这个问题的可选答案,请告诉我这是否正确:
RoleBinding 还可以将 ClusterRole 绑定到主题列表,并且在该 ClusterRole 中定义的权限将仅适用于 RoleBinding 对象中指定的命名空间中的资源。这就是为什么我们需要在 RoleBinding 定义中添加一个namespace 位。事实上,当我们使用 RoleBinding 来绑定 Role 而不是 ClusterRole 时,这并不是必需的。
对吗?
【问题讨论】:
标签: kubernetes