系列文章目录


前言

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实践类),完成了。

Logo

开源、云原生的融合云平台

更多推荐