快速读懂-使用 RBAC 定义和应用权限-kubernetes&openshift

42 篇文章 0 订阅
18 篇文章 0 订阅

1、参考资料openshift官方文档和kubernetes中文文档

  1. openshift 官方文档
  2. kubernetes中文文档

2、概念理解:

RBAC;
Role、ClusterRole;
RoleBinding、ClusterRoleBinding;
RoleBinding、ClusterRole

2.1、Role-Based Access、RBAC

RBAC:基于角色的访问控制 (Role-Based Access、RBAC) 对象决定是否允许用户在项目内执行给定的操作。

先让一个用户(Users)扮演一个角色(Role),让角色(Role)拥有权限,从而让用户拥有这样的权限,然后在授权机制当中,只需要将权限授予某个角色,此时用户将获取对应角色的权限,从而实现角色的访问控制;

2.2、Role和ClusterRole

Role是一系列的权限的集合,例如一个Role可以包含读取 Pod 的权限和列出 Pod 的权限, ClusterRole 跟 Role 类似,但是可以在集群中全局使用。Role只能授予单个namespace 中资源的访问权限。 ClusterRole授权 >= Role授予(与Role类似),但ClusterRole属于集群级别对象:1.集群范围(cluster-scoped)的资源访问控制(如:节点访问权限);2.非资源类型(如“/ healthz”)3.所有namespaces 中的namespaced 资源(如 pod)。

2.3、RoleBinding和ClusterRoleBinding

RoleBinding是将Role中定义的权限授予给用户或用户组。它包含一个subjects列表(users,groups ,service accounts),并引用该Role,Role有了权限,用户也就有了权限。RoleBinding在某个namespace 内授权,ClusterRoleBinding适用在集群范围内使用。RoleBinding可以引用相同namespace下定义的Role。

2.4、使用RoleBinding去绑定ClusterRole

如果有10个名称空间,每个名称空间都需要一个管理员,而这些管理员的权限都是一致的。那么此时需要去定义这样的管理员,使用RoleBinding就需要创建10个Role,这样显得很麻烦。为此当使用RoleBinding去绑定一个ClusterRole时,该User仅仅拥有对当前名称空间的集群操作权限,而不是拥有所有名称空间的权限,所以此时只需要创建一个ClusterRole代替掉10个Role就解决了以上的需求

3.RBAC应用

3.1 Role --> User -->Rolebinding

kubectl create role -h

在这里插入图片描述

使用kubectl create进行创建角色(role),指定角色名称,–verb指定权限,–resource指定资源或者资源组,–dry-run:此模式不会真的创建;

##--dry-run模式看一下role的定义,resources是资源,verbs是操作权限
kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml

在这里插入图片描述
查看role的定义,创建role, 查询role

Honglei:Desktop honglei$ vi pods-reader-role.yaml
Honglei:Desktop honglei$ cat pods-reader-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pods-reader
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch
Honglei:Desktop honglei$ kubectl apply -f pods-reader-role.yaml
role.rbac.authorization.k8s.io/pods-reader created
Honglei:Desktop honglei$ kubectl get role
NAME          AGE
pods-reader   15s
Honglei:Desktop honglei$

3.2 RoleBinding角色绑定

#查看命令帮助
kubectl create rolebinding -h

kubectl create rolebinding NAME --clusterrole=NAME|–role=NAME [–user=username] [–group=groupname]
使用kubectl create进行创建角色绑定,指定角色绑定的名称,–role|–clusterrole指定绑定哪个角色,–user指定哪个用户;

  1. 导出rolebinding资源定义清单文件
kubectl explain role  #查看资源定义清单字段
kubectl explain rolebinding  #查看资源定义清单字段
kubectl create rolebinding test-read-pods --role=pods-reader --user=test --dry-run -o yaml > rolebinding-demo.yaml

在这里插入图片描述

  1. 创建、授权test、确认、验证
    在这里插入图片描述

3.3 ClusterRole–>ClusterRoleBinding–>User

kubectl explain clusterrole  #查看资源定义清单字段
kubectl explain clusterrolebinding  #查看资源定义清单字段
导出clusterrole的资源定义清单文件
kubectl create clusterrole cluster-read --verb=get,list,watch --resource=pods -o yaml >clusterrole-demo.yaml

在这里插入图片描述
后面将kubernetes的用户切换到test下,随后对test赋予clusterrole的权限

#查看
kubectl config view

创建clusterrolebinding

导出yaml资源定义清单文件:
kubectl create clusterrolebinding test-read-all-pods --clusterrole=cluster-read --user=test --dry-run -o yaml >clusterrolebinding-demo.yaml

在这里插入图片描述
然后切换账户测试,可以查看pod,但是因为没有权限所以不能删除pod。
以上可见,对用户test进行集群角色绑定,用户test将会获取对集群内所有资源的(namespace)对应权限。

3.4 clusterrole --> rolebinding --> user

将test通过rolebinding到集群角色clusterrole中,此时,test仅作用于当前名称空间的所有pods资源的权限.

#删除之前的clusterrolebinding
kubectl delete clusterrolebinding test-read-all-pods
#导出yaml资源定义清单文件
kubectl create rolebinding test-read-pods --clusterrole=cluster-read --user=test --dry-run -o yaml >rolebinding-clusterrole-dmeo.yaml
#创建rolebinding,将test绑定到clusterrole
kubectl apply -f rolebinding-clusterrole-dmeo.yaml
#查看rolebinding
kubectl  get rolebinding test-read-pods
kubectl  describe rolebinding test-read-pods
#切换账号测试知test可以访问当前namespace的pod,但是不能访问其他namespace的pod;
因为这种绑定方式,clusterrole是被降级的;

3.5 RBAC的三种授权访问方式

RBAC不仅可以对user进行访问权限的控制,还可以通过group和serviceaccount进行访问权限控制。user即单个用户,group是对一个组内的user进行授权;通过RBAC对serviceaccount进行访问授权时,就可以实现Pod对其他资源的访问权限进行控制。也就是说,当我们对serviceaccount进行rolebinding或clusterrolebinding,会使创建Pod拥有对应角色的权限和apiserver进行通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

[shenhonglei]

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值