RBAC-實現不同用戶擁有不同權限

關於RBAC相關的知識點可以參考kubernetes官方文檔:https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#kubectl-create-rolebinding

1、用戶"wangqing"可以查看default、kube-system 兩個namespace下的pod以及pod日誌權限

2、用戶"xiaowang"可以在default這個namespace下pod執行命令,並且可以刪除pod

一、Serviceaccount服務賬戶和命名空間;

首先我們可以創建一個命名空間"kube-users",將兩個serviceaccount賬號同一管理;

#kubectl create ns kube-users

創建兩個serviceaccount兩個服務賬號,指定上述的kube-users的命名空間

#kubectl create sa wangaing -n kube-users

#kubectl create sa xiaowang -n kube-users

查看kube-users下創建的兩個serviceaccount服務賬號

# kubectl get sa -n kube-users

NAME SECRETS AGE
wangqing 1 77m
xiaowang 1 77m  

創建serviceaccount兩個服務賬號的同時也會生成對應的secret,我們在登陸的時候可以查看secret-token進行登錄驗證

[root@k8s-master01 ~]#kubectl get secret -n kube-users

NAME                   TYPE                                  DATA   AGE
wangqing-token-v45sp   kubernetes.io/service-account-token   3      76m
xiaowang-token-tzpgc   kubernetes.io/service-account-token   3      75m 

namespace以及serviceaccount創建完之後,默認是沒有任何權限的,接下來需要創建不同權限clusterrole和rolebinding將我們的sa(serviceaccount)賬戶與之綁定,即可實現不同用戶擁有對namspace不同的管理權限了

二、創建不同權限的clusterrole

2.1、創建查詢namespace下權限的clusterrole

#vim namespace-list.yaml 

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: namespace-readonly
rules:
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - metrics.k8s.io
  resources:
  - pods
  verbs:
  - get
  - list
  - watch

#kubectl create -f namespace-list.yaml

2.2、將名爲"namespace-readonly"的clusterrole綁定全局命名空間“kube-users”下,那麼此時,“kube-users”下所有的serviceaccount賬戶都具有對全局的namespace查詢權限

#vim namespace-readonly.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: namespace-readonly-sa
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: namespace-readonly. #指定名爲“namespace-readonly”的clusterrole
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:serviceaccounts:kube-users #針對該"kube-users"namespace下的serviceaccount進行授權,授權查詢全局namespace的權限

#kubectl create -f namespace-readonly.yaml

驗證clusterrolebinding綁定的之後的secretaccount賬戶,驗證一下kube-users下的sa是否對namespace僅是隻讀權限

 

 2.3、創建一個具有查看pod權限的clusterrole

#vim pod-log.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-log
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - pods/log
  verbs:
  - get
  - list
  - watch

#kubectl create -f pod-log.yaml  

2.4、創建一個rolebinding.在kube-system和default兩個Namespace中,將具有查詢pod日誌權限的"pod-log"clusterrole授權給kube-users命名空間下的wangqing服務賬戶(ServiceAccount)

#kubectl create rolebinding wangqing-pod-log --clusterrole=pod-log --serviceaccount=kube-users:wangqing --namespace=kube-system
#kubectl create rolebinding wangqing-pod-log --clusterrole=pod-log --serviceaccount=kube-users:wangqing --namespace=default

通過wangqing這個sa賬戶登錄驗證除了能查看pod狀態的權限之外,其它權限(執行、刪除、更新)都沒有。如果執行未授權的操作將會報錯,如下圖所示:

 2.5、創建一個擁有對pod執行、刪除權限的clusterrole

#vim pod-exec.yaml 

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-exec
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
- apiGroups:
  - ""
  resources:
  - pods/exec
  verbs:
  - create

#vim pod-delete.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-delete
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - delete

#kubectl create -f pod-delete.yaml -f pod-exec.yaml

創建兩個Rolebinding:

在namespace "default"中,將一個名爲"pod-exec“ ClusterRole對象中的執行權限授予namespace中名稱爲“xiaowang”的服務賬戶(ServiceAccount):

#kubectl create rolebinding xiaowang-pod-exec --clusterrole=pod-exec --serviceaccount=kube-users:xiaowang --namespace=default

在namespace "default"中,將一個名爲"pod-delete“ ClusterRole對象中的執行權限授予namespace中名稱爲“xiaowang”的服務賬戶(ServiceAccount):

#kubectl create rolebinding xiaowang-pod-delete --clusterrole=pod-delete --serviceaccount=kube-users:xiaowang --namespace=default

驗證:通過xiaowang這個serviceaccount這個賬戶登錄到界面可以看到在default這個命名空間下可以對pod進行執行、刪除等操作

END!

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