一、RBAC概述

RBAC引入了四个新的顶级资源对象。Role、ClusterRole、RoleBinding、 ClusterRoleBinding。同其他 API 资源对象一样,用户可以使用 kubectl 或者 API 调用等 方式操作这些资源对象。kubernetes集群相关所有的交互都通过apiserver来完成,对于这样集中式管理的系统来说,从1.6版本起,K8S默认启用RBAC访问控制策略,目前RBAC已作为稳定的功能,通过启动文件kube-apiserver.service中的-authorization-mode=RBAC来启用RABC。在RBAC API中,通过如下步骤进行授权:

  • 「定义角色」:在定义角色时会指定此角色对于资源访问控制的规则;
  • 「绑定角色」:将主体与角色进行绑定,对用户进行访问授权;

二、RBAC资源对象

在 Kubernetes 中,RBAC 是一种强大的访问控制机制,用于管理对集群资源的访问权限。RBAC 可以帮助管理员精确地控制用户、ServiceAccount 或其他实体对 Kubernetes API 中资源的操作权限。RBAC 基于角色的授权模型使得管理员可以定义角色和角色绑定,从而实现对不同用户或实体的访问权限控制。RBAC 由四个基本概念组成:

  • 「角色(Role)」:角色定义了一组操作权限,例如对某个命名空间下资源的读取、创建或删除等操作。
  • 「角色绑定(RoleBinding)」:角色绑定将特定的角色授予 User、Group 或者 ServiceAccount,从而赋予它们相应的权限。
  • 「集群角色(ClusterRole)」:类似于角色,但作用范围更广,可以授权对整个集群中资源的操作权限。
  • 「集群角色绑定(ClusterRoleBinding)」:将集群角色绑定给 User、Group 或者 ServiceAccount,授予它们在整个集群范围内的权限。

三、角色

一个角色就是一组权限的集合,这里的权限都是许可形式的,「不存在拒绝的规则」。Role 总是用来在某个名字空间内设置访问权限;在你创建 Role 时,你必须指定该 Role 所属的名字空间。与之相对,ClusterRole 则是一个集群作用域的资源。这两种资源的名字不同(Role 和 ClusterRole) 是因为 Kubernetes 对象要么是名字空间作用域的,要么是集群作用域的,不可两者兼具。ClusterRole 有若干用法。你可以用它来:

  • 定义对某名字空间域对象的访问权限,并将在个别名字空间内被授予访问权限;
  • 为名字空间作用域的对象设置访问权限,并被授予跨所有名字空间的访问权限;
  • 为集群作用域的资源定义访问权限。

如果你希望在名字空间内定义角色,应该使用 Role;如果你希望定义集群范围的角色,应该使用 ClusterRole。

1.Role 示例

(1) 命令方式创建

如果忘记了命令方式,也可以通过kubectl create role –help查阅帮助,如下图:

help

kubectl create role pod-reader \
--verb=get,list,watch \
--resource=pods