Kubernetes 中的 RBAC 是什么?

在 Kubernetes 中,RBAC(基于角色的访问控制)是一种授权模式,用于控制用户对 Kubernetes 资源的访问。它通过授予用户角色或绑定获取一组权限,代替了基于用户和名称空间设置 ACL 的旧模式。

RBAC 的主要特性是:

  • 基于角色的访问控制:用户通过被授予的角色得到权限。
  • 支持对 Kubernetes API 资源的细粒度访问控制。
  • 支持基于名称空间的访问控制。
  • 支持控制用户对跨类型资源(如Pod、Deployment等)的访问。

RBAC 的主要组成包括:

  • Role:一组权限的集合,定义在特定的名称空间中。
  • ClusterRole:一组跨名称空间的权限集合。
  • RoleBinding:将 Role 赋予给指定的用户/用户组。
  • ClusterRoleBinding:将 ClusterRole 赋予给指定的用户/用户组。
  • Subject:被赋予 Role 或 ClusterRole 的用户、用户组或服务帐户。

RBAC 授权包含 3 个步骤:

  1. 创建和配置角色(Role/ClusterRole),权限必须明确指定要授予的权限。
  2. 创建角色绑定(RoleBinding/ClusterRoleBinding)将角色赋予给主体(Subject)。
  3. 根据被绑定的角色,主体获得对应的权限。

例如:
一个 Role 定义:

yaml
kind: Role   
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] 
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

一个 RoleBinding 定义:

yaml
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane 
roleRef:
  apiGroup: rbac.authorization.k8s.io 
  kind: Role   
  name: pod-reader

这个例子中:

  1. 创建了一个 pod-reader Role,拥有读取 Pod 资源的权限。
  2. 创建一个 read-pods RoleBinding,将 pod-reader 角色赋予给用户 jane。
  3. 用户 jane 获得 pod-reader 角色的权限,可以读取 default 名称空间下的 Pod。

所以总结来说,RBAC 的主要作用是实现细粒度的授权控制,其主要特征是:

  1. 基于角色的访问控制,简化授权管理。
  2. 支持对 Kubernetes API 资源的细粒度控制。
  3. 支持基于名称空间的访问控制。
  4. 支持控制用户对跨资源访问的控制。

它的工作步骤是:

  1. 创建角色(Role/ClusterRole)定义一组权限。
  2. 创建角色绑定(RoleBinding/ClusterRoleBinding)将角色赋予主体。
  3. 主体根据绑定获得的角色获得对应权限。