k8s-RBAC

今天给大家讲一个RBAC,什么是RBAC?RBAC用来做什么的?下面我给大家讲解一下

RBAC基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对 计算机或网络资源的访问的方法

RBAC API声明了四种对象:

  1. Role:用来设置某个命名空间的访问权限,创建Role时必须指定该Role所属的命名空间
  2. ClusterRoles:集群范围内的访问权限,可以创建一个ClusterRole进行对所有的命名空间做为权限管理
  3. RoleBinding:是将角色中定义的权限赋予一个用户或者一个组,RoleBinding在指定的命名空间中执行授权
  4. 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

token

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

验证说明

总结一下,RBAC做为k8s的权限管理大致需要几大步

  1. 创建角色权限规则
  2. 创建所需要的用户
  3. 把用户与角色进行绑定