如何創建一個用戶、授權操作k8s集羣的過程?

本篇帶給大家如何創建一個用戶、授權操作k8s集羣的過程。希望對你有所幫助!
背景

172.16.99.128是的我k8s集羣的master節點,此處是從這裏獲取集羣的證書。

創建訪問architechure命名空間的用戶
1.給用戶devops 創建一個私鑰
openssl genrsa -out devops.key 2048
2.使用我們剛剛創建的私鑰創建一個證書籤名請求文件:devops.csr,要注意需要確保在-subj參數中指定用戶名和組(CN表示用戶名,O表示組)
openssl req -new -key devops.key -out devops.csr -subj "/CN=devops/O=architechure"
3.然後找到我們的Kubernetes集羣的CA

我們使用的是kubeadm安裝的集羣,CA相關證書位於/etc/kubernetes/pki/目錄下面,如果你是二進制方式搭建的,你應該在最開始搭建集羣的時候就已經指定好了CA的目錄,我們會利用該目錄下面的ca.crt和ca.key兩個文件來批准上面的證書請求,生成最終的證書文件,我們這裏設置證書的有效期爲500天

scp [email protected]:/etc/kubernetes/pki/ca.crt .
scp [email protected]:/etc/kubernetes/pki/ca.key .
openssl x509 -req -in devops.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out devops.crt -days 500
➜  ls -al
total 72
drwxr-xr-x  11 marion  staff   352 Dec 25 11:32 .
drwxr-xr-x  13 marion  staff   416 Dec 25 11:26 ..
-rw-r--r--   1 marion  staff    17 Dec 25 11:32 .srl
-rw-r--r--   1 marion  staff  1156 Dec 25 11:32 README.md
-rw-r--r--   1 marion  staff  1025 Dec 25 11:30 ca.crt
-rw-------   1 marion  staff  1675 Dec 25 11:30 ca.key
-rw-r--r--   1 marion  staff  1009 Dec 25 11:32 devops.crt
-rw-r--r--   1 marion  staff   924 Dec 25 11:30 devops.csr
-rw-r--r--   1 marion  staff  1679 Dec 25 11:27 devops.key
4.現在我們可以使用剛剛創建的證書文件和私鑰文件在集羣中創建新的憑證:
kubectl config set-credentials devops --client-certificate=devops.crt  --client-key=devops.key
5.通過剛纔創建的用戶憑證創建新的上下文(Context)
kubectl config set-context devops-context --cluster=cluster-tf26gt9mmk --namespace=architechure --user=devops
6.嘗試通過該用戶操作命令
➜  kubectl get pods --context=devops-context
Error from server (Forbidden): pods is forbidden: User "devops" cannot list resource "pods" in API group "" in the namespace "architechure" # 因爲該devops-context還沒有操作API的權限
7.給用戶創建一個role的角色devops.role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: devops-role
  namespace: architechure
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["deployments", "replicasets", "pods"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # 也可以使用['*']

然後在集羣中創建該角色

kubectl apply -f ./devops.role.yaml
8.創建權限與角色之間的綁定關係devops-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: devops-rolebinding
  namespace: architechure
subjects:
- kind: User
  name: devops
  apiGroup: ""
roleRef:
  kind: Role
  name: devops-role # 上一步創建的devops-role實體
  apiGroup: ""

在集羣中創建角色與用戶之間的綁定關係

k apply -f ./devops-rolebinding.yaml
9.此時我們可以通過kubecm切換到該角色上

如何創建一個用戶、授權操作k8s集羣的過程?如何創建一個用戶、授權操作k8s集羣的過程?

此時,從下圖就可以查看到當前集羣的有一個新的用戶角色devops,上面用到的Kubecm我們之前也分享過,如果需要可以點此跳轉

如何創建一個用戶、授權操作k8s集羣的過程?如何創建一個用戶、授權操作k8s集羣的過程?

10.權限驗證
> kubectl get pods
No resources found in architechure namespace.
> kubectl get replicasets
No resources found in architechure namespace.
> kubectl get deploy
No resources found in architechure namespace.
> kubectl get svc
Error from server (Forbidden): services is forbidden: User "devops" cannot list resource "services" in API group "" in the namespace "architechure"

總結一下就是:

  • 根據集羣的CA證書創建出來用戶證書
  • 根據用戶證書創建該用戶在集羣內的憑證和上下文內容
  • 要想用戶能進行基本的操作,需要對用戶針對apiGroup授權
爲devops用戶增加指定命名空間的權限
1.我們先把當前上下文切換到之前有權限操作的user-tf26gt9mmk用戶上
kubecm switch
# select dev

否則以下步驟會出錯:

2.首先需要創建針對指定命名空間的上下文
kubectl config set-context devops-context --cluster=cluster-tf26gt9mmk --namespace=default --user=devops

此時查詢列舉default空間下的pods是不行的,因爲還沒允許操作

kubectl get pods --context=devops-context
Error from server (Forbidden): pods is forbidden: User "devops" cannot list resource "pods" in API group "" in the namespace "default"
3.創建default空間下的role與rolebinding

devops-role-default.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: devops-role
  namespace: default
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["deployments", "replicasets", "pods"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # 也可以使用['*']

devops-rolebinding-default.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: devops-rolebinding
  namespace: default
subjects:
- kind: User
  name: devops
  apiGroup: ""
roleRef:
  kind: Role
  name: devops-role
  apiGroup: ""

然後我們在集羣中創建這兩個對象

kubectl apply -f devops-role-default.yaml
kubectl apply -f devops-rolebinding-default.yaml
4.查看role資源對象是否創建
kubectl get role -A |grep devops-role # 分別在architechure和default命名空間下
architechure                   devops-role                                      2021-05-17T07:57:27Z
default                        devops-role                                      2021-05-28T03:19:24Z
5.切換當前上下文環境,驗證是否可以操作資源
kubecm switch
# select devops-context
kubectl get pods -n default
kubectl get pods -n architechure

到這裏就基本上說清楚如何創建一個用戶、授權操作k8s集羣的過程了。

本文地址:https://www.linuxprobe.com/kubernetes-rbac-role.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章