首页 > 其他分享 >kubernetes之 RBAC

kubernetes之 RBAC

时间:2023-07-15 22:12:04浏览次数:36  
标签:kubectl kubernetes root RBAC master rbac k8s pods

第十一部分 RBAC
restful操作对象:许可授权都作用于角色,用户是什么角色,就拥有什么操作权限
授权插件:Node、ABAC、RBAC、Webhook
RBAC:Role-based AC
角色:Role
许可:permission
关联图示

客户端访问示意图:

role:
operations:许可
object:

rolebinging:
user account or service account
role

授权:定义标准的。
Role、RoleBinding:命名空间内级别
ClusterRole、ClusterRoleBinding:集群角色、集群角色绑定
视图:

RoleBinding限制在ns范围内,即使绑定了clusterRole,也只在ns内生效。
RoleBinding:只作用于当前名称空间。
clusterrolebindings:作用集群内所有ns。

Role、RoleBinding、clusterrole、clusterrolebindings都是标准的kubernetes资源。。
示例:为每个ns配置一个管理员,可配置一个clusterrole,RoleBinding绑定(这样角色可以作用于集群,用户管理各自的ns,互不干扰)。
[root@k8s-master ~]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
...
[root@k8s-master rbac]# cat role-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pods-reader
namespace: default
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
[root@k8s-master rbac]# kubectl create -f role-demo.yaml
role.rbac.authorization.k8s.io/pods-reader created
[root@k8s-master rbac]# kubectl get role
NAME AGE
pods-reader 10s
[root@k8s-master rbac]# kubectl describe role
Name: pods-reader
Labels: <none>
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
pods [] [] [get list watch]
开始绑定用户:
前面章节创建过sunny用户
[root@k8s-master rbac]# kubectl create rolebinding sunny-read-pods --role=pods-reader --user=sunny --dry-run -o yaml
[root@k8s-master rbac]# kubectl create rolebinding sunny-read-pods --role=pods-reader --user=sunny --dry-run -o yaml >rolebinding-demo.yam
[root@k8s-master rbac]# kubectl create -f rolebinding-demo.yaml
rolebinding.rbac.authorization.k8s.io/sunny-read-pods created
[root@k8s-master rbac]# kubectl get rolebinding
NAME AGE
sunny-read-pods 12s
[root@k8s-master rbac]# kubectl describe rolebinding
Name: sunny-read-pods
Labels: <none>
Annotations: <none>
Role:
Kind: Role
Name: pods-reader
Subjects:
Kind Name Namespace
---- ---- ---------
User sunny
验证测试:切换用户
[root@master ~]# kubectl config view 查看用户
[root@master ~]# kubectl config use-context sunny@kubernetes(切换用户,查看权限。切换后,影响同一个客户端)
[root@k8s-master rbac]# kubectl get pods -n kube-system
Error from server (Forbidden): pods is forbidden: User "sunny" cannot list resource "pods" in API group "" in the namespace "kube-system"
[root@k8s-master rbac]# kubectl get pods -A
Error from server (Forbidden): pods is forbidden: User "sunny" cannot list resource "pods" in API group "" at the cluster scope
[root@k8s-master rbac]# kubectl get pods -n default (rolebinding只对当前ns生效)
NAME READY STATUS RESTARTS AGE
myapp-0 1/1 Running 0 28h
...
[root@k8s-master rbac]# kubectl delete pods myapp-0
Error from server (Forbidden): pods "myapp-0" is forbidden: User "sunny" cannot delete resource "pods" in API group "" in the namespace "default"
假设需要授予所有权限,咱们可以使用*来代替。
避免账户切换后,影响统一客户端多窗口切换,可创建普通账户。
[root@k8s-master ~]# useradd ik8s
[root@k8s-master ~]# cp -rp .kube/ /home/ik8s
[root@k8s-master ~]# chown -R ik8s.ik8s /home/ik8s/
[root@k8s-master ~]# su - ik8s
[ik8s@k8s-master ~]$ kubectl config use-context sunny@kubernetes
Switched to context "sunny@kubernetes".
[ik8s@k8s-master ~]$ kubectl config view
[root@k8s-master rbac]# kubectl delete rolebinding sunny-read-pods 删除rolebinding,切换用户,立马没有操作权限了。
[root@k8s-master rbac]# kubectl config use-context sunny@kubernetes
Switched to context "sunny@kubernetes".
[root@k8s-master rbac]# kubectl get pods
Error from server (Forbidden): pods is forbidden: User "sunny" cannot list resource "pods" in API group "" in the namespace "default"

下面介绍ClusterRole
配置clusterrole,rolebinding晋级模式
ClusterRolebinding只能绑定ClusterRole
RoleBinding可以绑定ClusterRole、Role。
创建clusterrole
[root@k8s-master ~]# kubectl create clusterrole cluster-reader --verb=get,list,watch --resource=pods --dry-run -o yaml > clusterrole-demo.yaml
编辑配置文件,

创建clusterrolebinding
[root@k8s-master rbac]# kubectl create clusterrolebinding sunny-read-all-pods --clusterrole=cluster-read --user=sunny --dry-run -oyaml> clusterrolebinding-demo.yaml
[root@k8s-master rbac]# vim clusterrolebinding-demo.yaml
[root@k8s-master rbac]# kubectl create -f clusterrolebinding-demo.yaml
clusterrolebinding.rbac.authorization.k8s.io/sunny-read-all-pods created
[ik8s@k8s-master ~]$ kubectl get clusterrolebinding |grep sunn
sunny-read-all-pods 10s
[ik8s@k8s-master ~]$ kubectl describe clusterrolebinding sunny-read-all-pods
验证测试:切换用户验证读权限ok,没有授权删除,故没有删除权限
换成cluster服务,只授予读权限,在全集群内都可生效。
ClusterRole绑定RoleBinding会降级,由集群权限变成RoleBinding单个ns范围内。

不妨使用rolebing绑定clusterrole试试,
换成cluster服务,只授予读权限,在全集群内都可生效。
RoleBinding绑定ClusterRole会降级,由集群权限变成RoleBinding单个ns范围内。这部分自行演示下。


[root@k8s-master ~]# kubectl get clusterrole admin -oyaml
aggregationRule:
clusterRoleSelectors:
- matchLabels:
rbac.authorization.k8s.io/aggregate-to-admin: "true"
...
可以通过github官网查看flannel yaml配置文件。加深理解四个RBAC含义。
自此,完成了RABC的学习过程。

 

标签:kubectl,kubernetes,root,RBAC,master,rbac,k8s,pods
From: https://www.cnblogs.com/sunnyyangwang/p/17557071.html

相关文章

  • kubernetes之 认证和serviceaccount
    第十部分认证和serviceaccount前面讲的都是admin超级用户在操作k8s,Kubectl不能所有人都可以使用和访问。用户访问逻辑图,认证:第一种令牌认证token,最简单的认证,(只需要对方认证的共享密钥即可)服务器需要认可客户端的证书。授权:RBAC,基于角色的访问控制,目前用的比较多。    ......
  • kubernetes之 statefulset控制器
    第九部分statefulset控制器参考:https://blog.csdn.net/styshoo/article/details/73731993     https://blog.51cto.com/xuexinhuan/5424144即便是有状态管理,也需要使用脚本来运维。CoreOS:OperatorStatusfulSet:有状态Cattle,petPetSet->StatefulSeta、稳定......
  • kubernetes网络模式
     一个K8s的集群中至少有三个网络:集群节点所在的网络,这个网络就是你的主机所在的网络,通常情况下是你的网络基础设施提供。如果你的node处于不同的网段,那么你需要保证路由可达。如上图中的192.168.10.0/24和10.0.0.0/8这两个网络第二个网络是Pod的网络,K8s中一个Pod由多个......
  • Ubuntu部署Kubernetes
    Docker安装信任Docker的GPG公钥:curl-fsSLhttps://repo.huaweicloud.com/docker-ce/linux/ubuntu/gpg|sudoapt-keyadd-`添加软件仓库:sudoadd-apt-repository"deb[arch=amd64]https://repo.huaweicloud.com/docker-ce/linux/ubuntu$(lsb_release-cs)stable"......
  • kubernetes之 pv、pcv、cm、secret引入
    第八部分pv、pcv、cm、secret引入pv、pvc如果pvc需要空间很多,pv空间不足以支持,那么生产的pod就会一致hang住,这就需要根据pvc容量,动态生成pv了。借助中间层StorageClass:针对尚有存储空间,还未做成PV的空间进行分类。需要restful接口,做强认证cm明文存储数据,信息容易泄露secret基于b......
  • kubernetes 实现 list-watch 的底层原理
    我们都知道,controller-manager,scheduler,kubelet会向apiserver监听感兴趣的对象,当监听对象的内容或状态发生变化后,对应的事件会立即推送到监听者。借由这套事件通知机制,kubernetes才能良好地运转。那么这套事件通知机制是如何实现并驱动的呢?1.etcd在k8s中,apiserver是......
  • (二)kubernetes部署kafka
    与前面的zookeeper一样需要持久化存储,因此还是先创建PV,然后再部署kafka。2、配置nfs创建需要作为nfs共享的目录mkdir/home/nfs/kafka-0添加权限chmod777/home/nfs/kafka-0编辑配置root@ubuntu:#vim/etc/export#/etc/exports:theaccesscontrollistforfilesyste......
  • Kubernetes轻量级日志工具Loki安装及踩坑记录
    Loki简介Loki是Grafana出品的一个轻量级日志系统,熟悉ELK的都知道ELK使用起来的成本,而且仅仅是日志检索使用ELK的话有点大材小用了。Loki8技术栈中使用了以下组件。Promtail用来将容器日志发送到Loki或者Grafana服务上的日志收集工具,该工具主要包括发现采集目标以及给日志......
  • kubernetes之 存储卷
    第八部分kubernetes之存储卷脱离节点而存在共享存储。存储卷不属于容器,他属于pod缓存,宿主机,不具备真正意义上存储,宿主机退役后,存储资源随之丢失,除非宿主机上也挂载独立的卷信息。容器真正意义上的存储卷类型emptyDir:pod删除,存储内容也删除,只能当临时存储空间或缓存使用,无真正意......
  • kubernetes之 Pod控制器
    第五部分Pod控制器1、pod回顾apiVersion,kind,metadata,spec,status(只读)spec:containersnodeSelectornodeNamerestartPolicy:Always,Never,OnFailurecontainers:nameimageimagePullPolicy:Always、Never、IfNotPresentports:......