kubernetes中kubeconfig的用法
在開啟了 TLS 的集群中,每當與集群交互的時候少不了的是身份認證,使用 kubeconfig(即證書) 和 token 兩種認證方式是最簡單也最通用的認證方式。
以kubectl為例介紹kubeconfig的配置。kubectl只是個go編寫的可執行程序,只要為kubectl配置合適的kubeconfig,就可以在集群中的任意節點使用。kubectl默認會從$HOME/.kube目錄下查找文件名為 config
的文件,也可以通過設置環境變量 KUBECONFIG
或者通過設置 --kubeconfig
去指定其它 kubeconfig 文件。
總之kubeconfig就是為訪問集群所作的配置。
export KUBE_APISERVER="https://172.20.0.113:6443" # 設置集群參數 kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/ssl/ca.pem --embed-certs=true --server=${KUBE_APISERVER} # 設置客戶端認證參數 kubectl config set-credentials admin --client-certificate=/etc/kubernetes/ssl/admin.pem --embed-certs=true--client-key=/etc/kubernetes/ssl/admin-key.pem # 設置上下文參數 kubectl config set-context kubernetes --cluster=kubernetes --user=admin # 設置默認上下文 kubectl config use-context kubernetes
生成的 kubeconfig 被保存到 ~/.kube/config
文件;配置文件描述了集群、用戶和上下文
集群參數
本段設置了所需要訪問的集群的信息。使用set-cluster設置了需要訪問的集群,如上為kubernetes;--certificate-authority設置了該集群的公鑰;--embed-certs為true表示將--certificate-authority證書寫入到kubeconfig中;--server則表示該集群的kube-apiserver地址
生成的kubeconfig 被保存到 ~/.kube/config
文件
用戶參數
本段主要設置用戶的相關信息,主要是用戶證書。如上的用戶名為admin,證書為:/etc/kubernetes/ssl/admin.pem,私鑰為:/etc/kubernetes/ssl/admin-key.pem。註意客戶端的證書首先要經過集群CA的簽署,否則不會被集群認可。此處使用的是ca認證方式,也可以使用token認證,如kubelet的 TLS Boostrap機制下的bootstrapping使用的就是token認證方式。
上下文參數
集群參數和用戶參數可以同時設置多對,在上下文參數中將集群參數和用戶參數關聯起來。上面的上下文名稱為kubenetes,集群為kubenetes,用戶為admin,表示使用admin的用戶憑證來訪問kubenetes集群的default命名空間,也可以增加--namspace來指定訪問的命名空間。
最後使用kubectl config use-context kubernetes來使用名為kubenetes的環境項來作為配置。如果配置了多個環境項,可以通過切換不同的環境項名字來訪問到不同的集群環境。
備註
使用kubeconfig還需要註意用戶已經經過授權(如RBAC授權),上述例子中用戶的證書中OU字段為system:masters
,kube-apiserver
預定義的 RoleBinding cluster-admin
將 Group system:masters
與 Role cluster-admin
綁定,該 Role 授予了調用kube-apiserver
相關 API 的權限。
參考:
- https://k8smeetup.github.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/
- https://k8smeetup.github.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/
- https://jimmysong.io/kubernetes-handbook/guide/kubectl-user-authentication-authorization.html
- http://kubernetes.kansea.com/docs/user-guide/kubectl
kubernetes中kubeconfig的用法