为什么RoleBinding定义中的名称位是kubernetes

为什么RoleBinding定义中的名称位是kubernetes,kubernetes,Kubernetes,在Kubernetes中RBAC的工作方式中有一些我不太理解的地方 我将陈述我理解的和不理解的。RBAC API根据定义了4种kubernetes对象: 角色 集群角色 RoleBinding 堆芯滚压成形 角色 角色在特定命名空间中定义一组权限。角色定义包含一个namepsace字段,角色对象是在该名称空间中创建的。从文档中: 角色始终在特定命名空间内设置权限;创建角色时,必须指定它所属的命名空间 我想这意味着角色中定义的所有规则只应用于该命名空间中的对象。我会继续假设这个假设是真的,否则

在Kubernetes中RBAC的工作方式中有一些我不太理解的地方

我将陈述我理解的和不理解的。RBAC API根据定义了4种kubernetes对象:

  • 角色
  • 集群角色
  • RoleBinding
  • 堆芯滚压成形
角色
角色在特定命名空间中定义一组权限。角色定义包含一个namepsace字段,角色对象是在该名称空间中创建的。从文档中:

角色始终在特定命名空间内设置权限;创建角色时,必须指定它所属的命名空间

我想这意味着角色中定义的所有规则只应用于该命名空间中的对象。我会继续假设这个假设是真的,否则请纠正我

集群角色

相比之下,ClusterRole是一个非命名空间的资源

据我所知(同样,如果我错了,请纠正我的错误),ClusterRole用于定义规则,这些规则定义与未绑定到任何命名空间(如节点)的资源相关的权限

角色绑定 RoleBinding对象是命名空间对象。其功能是将角色绑定到主题,即授予具有特定角色的主题(用户、服务帐户、组)。它还可以将主题与ClusterRole绑定

集群角色绑定
我对这篇文章的方式不太感兴趣

问题 我的问题是,为什么RoleBinding定义中有
名称空间
元数据位?如果确实如我在角色部分中所假设的那样,角色只向该角色的指定命名空间中的对象授予权限,那么该限制已在角色对象本身中定义,为什么还要在角色绑定对象中再次定义

当我写这些行的时候,我突然想到了这个问题的一个可选答案,请告诉我这是否正确:

RoleBinding还可以将ClusterRole绑定到主题列表,并且该ClusterRole中定义的权限将仅应用于RoleBinding对象中指定的命名空间中的资源。这就是为什么我们需要在RoleBinding定义中使用
名称空间
位的原因。实际上,当我们使用RoleBinding绑定角色而不是ClusterRole时,并不需要这样做


对吗?

正如你所说。
RoleBinding
需要指定
namespace
,因为它还可以引用未命名的
ClusterRole
。因此,
ClusterRole
可以(在某些情况下)被视为特定命名空间中角色的模板

ClusterRole是这个用例的一个很好的例子:您可以在RoleBinding(namespaced)中引用这个ClusterRole(不带名称空间):


因此,用户
jane
将获得ClusterRole
edit
中定义的权限,但仅限于命名空间
my命名空间中的权限

谢谢!如果是这样,为什么我们首先需要一个角色对象?为什么不直接使用ClusterRoles?不客气。集群角色在整个集群中可见。Clusterroles仅位于特定的命名空间中。如果您只需要ClusterRoles,这可能会变得混乱(有时您只需要特定命名空间中的角色)
apiVersion: rbac.authorization.k8s.io/v1namespace.
kind: RoleBinding
metadata:
  name: editor
  namespace: my-namespace
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: edit
  apiGroup: rbac.authorization.k8s.io