通過配置kubeconfig文件實現集群權限精細化管理
更新時間 2024-09-05 16:27:45
最近更新時間: 2024-09-05 16:27:45
分享文章
本節介紹了云容器引擎的最佳實踐: 通過配置kubeconfig文件實現集群權限精細化管理。
集群權限精細化管理的背景
云容器引擎默認給用戶的kubeconfig文件對集群操作的權限相當于root級別,這樣的權限級別對于某用戶來說過大,很不便于對集群的精細化管理。為了達到對集群精細化管理的目標,我們可以通過kubeconfig設置特定的用戶,然后給用戶賦予集群的部分操作權限(如:增、查、改)。
注意事項
下面配置步驟操作前,請先確保您的機器上有kubectl工具,若沒有請到社區下載與集群版本對應的或者最新的kubectl。
基于Role實現集群權限精細化管理的配置步驟
說明下述示例創建一個用戶,并且該用戶只能查看default下的Pod,不能查看其他namespace下的Pod且不能刪除default下的任何Pod。
- 配置ServiceAccount,名稱為test-sa,命名空間為default
kubectl create sa test-sa -n default
- 創建Role,并配置針對不同資源相對應的操作權限
vi addRole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: test-role
namespace: default
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
- apiGroups:
- apps
resources:
- pods
verbs:
- get
- list
- watch
kubectl create -f addRole.yaml
- 配置RoleBinding,將sa綁定到Role上,讓sa獲取相應權限
vi addRoleBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: myrolebinding
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: test-role
subjects:
- kind: ServiceAccount
name: test-sa
namespace: default
kubectl create -f addRoleBinding.yaml
- 配置集群訪問信息
4.1 通過sa的名稱test-sa獲取sa對應的密鑰,第一列test-sa-token-nttvl即為密鑰名
kubectl get secret -n default |grep test-sa
4.2 將密鑰中的ca.crt解碼后導出
kubectl get secret test-sa-token-d6b4q -n default -oyaml |grep ca.crt: | awk '{print $2}' |base64 -d > ca.crt
4.3 設置集群訪問方式,其中dev 為需要訪問的集群名稱,10.50.208.30為集群ApiServer地址,test.config為配置文件的存放路徑
(1)如果通過內部ApiServer地址,執行命令如下:
kubectl config set-cluster dev --server=//10.50.208.30:6443 --certificate-authority=ca.crt --embed-certs=true --kubeconfig=test.config
(2)如果通過公網ApiServer地址,執行命令如下:
kubectl config set-cluster dev --server=//10.50.208.30:6443 --kubeconfig=test.config --insecure-skip-tls-verify=true
集群ApiServer地址為內網ApiServer地址,綁定彈性IP后也可為公網ApiServer地址。如下圖:
- 配置集群認證信息
5.1 獲取集群的token信息
token=$(kubectl describe secret test-sa-token-d6b4q -n default | awk '/token:/{print $2}')
5.2 設置使用集群的用戶ui-admin
kubectl config set-credentials ui-admin --token=$token --kubeconfig=test.config
- 配置集群認證訪問的上下文信息,ui-admin@test為上下文的名稱
kubectl config set-context ui-admin@test --cluster=dev --user=ui-admin --kubeconfig=test.config
- 設置上下文
kubectl config use-context ui-admin@test --kubeconfig=test.config
驗證權限
查詢default命名空間下的pod資源。
kubectl get pod -n default --kubeconfig=test.config
被拒絕訪問其他命名空間的pod資源。
kubectl get pod -n test-rq --kubeconfig=test.config
不可以刪除default命名空間下的pod資源。
kubectl delete pod -n default cephfs-provisioner-8689474666-d2gsw --kubeconfig=test.config
基于ClusterRole實現集群權限精細化管理的配置步驟
請參考:集群命名空間RBAC授權