1. 程式人生 > 實用技巧 >K8S 建立使用者賬號-User Account

K8S 建立使用者賬號-User Account

建立k8s User Account

準備工作

mkdir /root/pki/
將k8s ca.pem  ca-key.pem 證書拷貝到此目錄
cp /opt/kubernetes/ssl/ca-key.pem  /root/pki/
cp /opt/kubernetes/ssl/ca.pem  /root/pki/

  

一、建立證書

1.建立user私鑰

(umask 077;openssl genrsa -out dev.key 2048)

2.建立證書籤署請求

 O=組織資訊,CN=使用者名稱

openssl req -new -key dev.key -out dev.csr -subj "/O=k8s/CN=dev"

3.簽署證書

openssl  x509 -req -in dev.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out dev.crt -days 365
Signature ok
subject=/O=k8s/CN=dev

二、建立配置檔案

kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE      #叢集配置
kubectl config set-credentials NAME --kubeconfig=/PATH/TO/SOMEFILE #使用者配置
kubectl config set-context    #context配置
kubectl config use-context    #切換context
* --embed-certs=true的作用是不在配置檔案中顯示證書資訊。
* --kubeconfig=/root/dev.conf用於建立新的配置檔案,如果不加此選項,則內容會新增到家目錄下.kube/config檔案中,可以使用use-context來切換不同的使用者管理k8s叢集。
* context簡單的理解就是用什麼使用者來管理哪個叢集,即使用者和叢集的結合。

  

建立叢集配置

kubectl config set-cluster k8s --server=https://192.168.124.61:6443 \
--certificate-authority=ca.pem \
--embed-certs=true  \
--kubeconfig=/root/dev.conf

  

建立使用者配置

kubectl config set-credentials dev \
--client-certificate=dev.crt \
--client-key=dev.key \
--embed-certs=true \
--kubeconfig=/root/dev.conf

建立context配置

kubectl config set-context dev@k8s \
--cluster=k8s \
--user=dev \
--kubeconfig=/root/dev.conf

  

切換context

kubectl config use-context dev@k8s --kubeconfig=/root/dev.conf
kubectl config view --kubeconfig=/root/dev.conf

建立系統使用者

useradd dev
mkdir -p /home/dev/.kube
cp /root/dev.conf /home/dev/.kube/config
chown dev.dev -R /home/dev/
su - dev

  

k8s驗證檔案

kubectl get pod

這個時候不成功是因為沒有進行許可權繫結

建立Role

root@k8s-master:~# cat pods-reader.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pods-reader
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch
 

建立Rolebinding

使用者dev和role pods-reader的繫結

root@k8s-master:~# cat cbmljs-pods-reader.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: cbmljs-pods-reader
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pods-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: dev

  

到這一步就可以進行驗證了

kubectl get pod

我們是可以檢視檢視default名稱空間的pod,但是其他空間的pod是無法檢視的。

建立ClusterRole

root@k8s-master:~# cat cluster-reader.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-reader
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch

建立ClusterRoleBinding

root@k8s-master:~# cat cbmljs-read-all-pod.yaml 
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: billy-read-all-pods
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: dev

驗證結果

kubectl get pod --all-namespaces

就可以看到所有名稱空間的pod了.

許可權繫結指定的namespace

kubectl create rolebinding devuser-admin-rolebinding(rolebinding的名字) --clusterrole=admin(clusterrole的名字,admin在k8s所有namespace下都有最高許可權) --user=devuser(將admin的許可權賦予devuser使用者) --namespace=dev(範圍是dev這個namespace下) 即dev

  

參考:

https://blog.csdn.net/cbmljs/article/details/102953428