K8S 建立使用者賬號-User Account
阿新 • • 發佈:2020-08-08
建立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