基本概念

ref:https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/

RBAC(Role-based access control)也叫基于角色的访问控制,是一种管理Kubernetes资源权限的授权机制。
RBAC 权限策略直接使用 kubectl 或 Kubernetes API 进行配置。用户可以被授权使用 RBAC 本身进行授权策略更改,从而可以在不放弃对集群主节点的 ssh 访问的情况下委派资源管理。RBAC 策略可以轻松映射到 Kubernetes API 中使用的资源和操作。

RBAC 背后有一些基本思想是理解它的基础。从本质上讲,RBAC 是一种授予用户对Kubernetes API 资源的精细访问权限的方式。使用 RBAC 鉴权基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对 计算机或网络资源的访问的方法。
RBAC 鉴权机制使用 rbac.authorization.k8s.io API 组 来驱动鉴权决定,允许你通过 Kubernetes API 动态配置策略。要启用 RBAC,在启动 API 服务器 时将 —authorization-mode 参数设置为一个逗号分隔的列表并确保其中包含 RBAC。

API 对象

RBAC API 声明了四种 Kubernetes 对象:Role、ClusterRole、RoleBinding 和 ClusterRoleBinding。你可以像使用其他 Kubernetes 对象一样, 通过类似 kubectl 这类工具 描述对象, 或修补对象。

Role 和 ClusterRole

Roles角色是权限的集合。例如,可以定义一个角色以包含对 pod 的读取权限和对 pod 的列表权限。ClusterRole 就像一个角色,但可以在集群中的任何地方使用。Role 总是用来在某个名字空间 内设置访问权限;在你创建 Role 时,你必须指定该 Role 所属的名字空间。

与之相对,ClusterRole 则是一个集群作用域的资源。这两种资源的名字不同(Role 和 ClusterRole)是因为 Kubernetes 对象要么是名字空间作用域的,要么是集群作用域的, 不可两者兼具。

ClusterRole 有若干用法。你可以用它来:
定义对某名字空间域对象的访问权限,并将在各个名字空间内完成授权;
为名字空间作用域的对象设置访问权限,并跨所有名字空间执行授权;
为集群作用域的资源定义访问权限。
如果你希望在名字空间内定义角色,应该使用 Role; 如果你希望定义集群范围的角色,应该使用 ClusterRole。

RBAC 的 Role 或 ClusterRole 中包含一组代表相关权限的规则。 这些权限是纯粹累加的(不存在拒绝某操作的规则)。

RoleBinding 和 ClusterRoleBinding

角色绑定(Role Binding)是将角色中定义的权限赋予一个或者一组用户。 它包含若干 主体(用户、组或服务账户)的列表和对这些主体所获得的角色的引用。 RoleBinding 在指定的名字空间中执行授权,而 ClusterRoleBinding 在集群范围执行授权。

RoleBinding 将角色映射到一个用户或一组用户,将角色的权限授予这些用户对该命名空间中的资源的权限。ClusterRoleBinding 允许用户被授予 ClusterRole 以在整个集群中进行授权。
一个 RoleBinding 可以引用同一的名字空间中的任何 Role。 或者,一个 RoleBinding 可以引用某 ClusterRole 并将该 ClusterRole 绑定到 RoleBinding 所在的名字空间。 如果你希望将某 ClusterRole 绑定到集群中所有名字空间,你要使用 ClusterRoleBinding。

RoleBinding 或 ClusterRoleBinding 对象的名称必须是合法的 路径区段名称。