系列文章目錄
文章目錄
- 系列文章目錄
- 前言
- 一、預設的kubernetes-admin具有所有權限
- 1.1 檢視config裡面的user
- 1.2 如何檢視使用者屬于哪個使用者組
- 1.3 檢視使用者組所綁定的role/clusterrole
- 二、自定義的kubernetes-admin具有所有權限
- 總結
前言
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