今天给大家讲一个RBAC,什么是RBAC?RBAC用来做什么的?下面我给大家讲解一下
RBAC基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对 计算机或网络资源的访问的方法
RBAC API声明了四种对象:
- Role:用来设置某个命名空间的访问权限,创建Role时必须指定该Role所属的命名空间
- ClusterRoles:集群范围内的访问权限,可以创建一个ClusterRole进行对所有的命名空间做为权限管理
- RoleBinding:是将角色中定义的权限赋予一个用户或者一个组,RoleBinding在指定的命名空间中执行授权
- ClusterRoleBinding:要跨整个集群完成访问权限的授予
我们对RBAC有了一定的了解,下面我们实操一下
首先我们查看一下对那个资源进行权限划分,查看资源的版本
# kubectl api-resources

我们现在创建一个pods的资源权限
apiVersion: rbac.authorization.k8s.io/v1
kind: Role #资源为Role
metadata:
namespace: lhl #Role必须指定ns
name: pods #这个资源的名称
rules:
- apiGroups: ["v1"] # "" 标明 core API 组
#- apiGroups: [""] #值为空表示pods所有的
resources: ["pods"] #授权的资源对象
verbs: ["get", "watch", "list"] #指定权限
# verbs: ["*"] #权限为所有
然后我们创建一个用户xiaoze
kubectl create serviceaccount xiaoze -nlhl
在创建RoleBinding来绑定用户与角色
apiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定允许 "jane" 读取 "default" 名字空间中的 Pods
kind: RoleBinding
metadata:
name: rolebinding-pods
namespace: lhl
subjects:
# 你可以指定不止一个“subject(主体)”
- kind: ServiceAccount
name: xiaoze # "name" 是区分大小写的
namespace: lhl
roleRef:
# "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系
kind: Role # 此字段必须是 Role 或 ClusterRole
name: pods # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配
apiGroup: rbac.authorization.k8s.io
然后我们查询一个xiaoze这个用户的token
kubectl get secret -nlhl #查询用户

拿到用户名称然后查询token
kubectl describe secret xiaoze-token-cw8ww -nlhl

然后登录web使用这个用户的token登录

总结一下,RBAC做为k8s的权限管理大致需要几大步
- 创建角色权限规则
- 创建所需要的用户
- 把用户与角色进行绑定