Kubernetes_18_查看一个用户具有哪些权限(RBAC实践类)
Posted 毛奇志
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes_18_查看一个用户具有哪些权限(RBAC实践类)相关的知识,希望对你有一定的参考价值。
系列文章目录
文章目录
前言
k8s有的时候权限不够,可以查看一个用户具有哪些权限
一、默认的kubernetes-admin具有所有权限
1.1 查看config里面的user
凡是使用kubeadm安装起来的k8s集群,在集群外使用fabric8连接,可以拥有对所有的资源resource进行所有的操作verb的权限,这是因为fabric8加载了 /root/.kube/config 文件,这个文件如下:
这个文件包括三个部分,分别是 集群cluster、用户user,以及将集群和用户绑定起来的上下文context,我们现在就看这个user,名称name为 kubernetes-admin。
这个用户下没有绑定任何的role,如下:
所以,这个用户一定要是绑定在某个用户组下面,然后这个用户组绑定role,所以这个用户才有对k8s资源的操作权限的。
user需要对k8s资源有操作权限,两种方式:
(1) user绑定role
(2) user绑定userGroup,然后这个userGroup绑定role.
Kubernetes 有着以下几个内建的用于特殊用户组userGroup,如下:
system:unauthenticated :未能通过任何一个授权插件检验的账号,即未通过认证测 试的用户所属的组 。
system :authenticated :认证成功后的用户自动加入的一个组,用于快捷引用所有正常通过认证的用户账号。
system : serviceaccounts :当前系统上的所有 Service Account 对象。
1.2 如何查看用户属于哪个用户组
无法查看一个用户组下面有哪些用户,但是可以查看一个用户属于哪个用户组
两种方法:
方式1:执行 cd /etc/kubernetes/pki ,然后查看 xxx.crt 文件
openssl x509 -in cbmljs.crt -noout -text
方式2:查看 kubectl 依赖的 config 文件(需要安装上python3和pyyaml)
cat /root/.kube/config | python3 -c 'import yaml, sys; print(yaml.safe_load(sys.stdin)["users"][0]["user"]["client-certificate-data"])'|base64 -d| openssl x509 -noout -text
| 左边表示输入,右边表示输出
cat /root/.kube/config
python -c 'import yaml, sys; print(yaml.load(sys.stdin)["users"][0]["user"]["client-certificate-data"])'
提取里面一点
base64 -d
openssl x509 -noout -text 输出
这里选择方式2,因为在 pki 目录下面没有找到 kubernetes-admin 用户对应的 .crt 文件,所以只能通过 /root/.kube/config 文件查看了(或者 /etc/kubernetes/admin.conf 文件),如下:
先给linux k8s主节点所在的linux机器安装python3,然后安装上 pyyaml 这个module,如下:
pip3 isntall pyyaml
执行 查看 /root/.kube/config 文件,可以看到 kubernetes-admin 关联的用户组是 system:masters
Subject中O(organization)的值代表用户组,CN (common name)代表用户名
1.3 查看用户组所绑定的role/clusterrole
查看 哪个 rolebinding 或者 clusterrolebinding 绑定了这个 用户组 system:masters
kubectl get clusterrolebinding -o wide -A | grep system:masters
可以看到 有一个名为 cluster-admin 的clusterrolebinding,绑定了一个名为 cluster-admin的 clusterrole 和一个名为 system:masters的用户或用户组。
接下来,查看这个 名为 cluster-admin 的clusterrole 有哪些全年
kubectl get clusterrole cluster-admin -o yaml
所以,解释了为什么fabric8使用 /root/.kube/config 这个文件,就可以操作整个k8s的所有资源,因为这个 config 文件里面的kubernetes-admin用户,属于 system:masters 用户组,同时这个用户组又绑定了 cluster-admin 这个 clusterrole,而 cluster-admin 这个clusterrole,拥有对所有 apiGroups 下任何类型的资源resource 的任何操作verb 的权限。
小结:默认用户 kubernetes-admin 在用户组 system:masters 里面,可以任意操作k8s的资源。
二、自定义的kubernetes-admin具有所有权限
笔者自己在 12.168.100.151 这个机器上新建 cbmljs 用户,要想看一下这个用户具有哪些权限
方式1:/etc/kubernetes/pki 目录下 crt 文件
方式2:使用pki目录下的三个文件,为 cbmlijs 生成的 config 文件
先看方式1,如下
cd /etc/kubernetes/pki
openssl x509 -in cbmljs.crt -noout -text
kubectl get clusterrolebinding -o wide -A | grep cbmljs
kubectl get rolebinding -o wide -A | grep cbmljs
kubectl get clusterrolebinding -o wide -A | grep k8s
kubectl get rolebinding -o wide -A | grep k8s
kubectl get clusterrole cluster-reader -o yaml
kubectl get role pods-reader -o yaml
cat /home/cbmljs/.kube/config | python3 -c ‘import yaml, sys; print(yaml.safe_load(sys.stdin)[“users”][0][“user”][“client-certificate-data”])’|base64 -d| openssl x509 -noout -text
总结
查看一个用户具有哪些权限(RBAC实践类),完成了。
以上是关于Kubernetes_18_查看一个用户具有哪些权限(RBAC实践类)的主要内容,如果未能解决你的问题,请参考以下文章
b2OJ_1565_[NOI2009]植物大战僵尸_拓扑排序+最大权闭合子图