如何建立一個使用者、授權操作k8s叢集的過程?

大雄45發表於2021-06-24
導讀 本篇帶給大家如何建立一個使用者、授權操作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 root@172.16.99.128:/etc/kubernetes/pki/ca.crt .
scp root@172.16.99.128:/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叢集的過程了。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2778141/,如需轉載,請註明出處,否則將追究法律責任。

相關文章