在開啓了 TLS 的集羣中,每當與集羣交互的時候少不了的是身份認證,使用 kubeconfig(即證書) 和 token 兩種認證方式是最簡單也最通用的認證方式。html
以kubectl爲例介紹kubeconfig的配置。kubectl只是個go編寫的可執行程序,只要爲kubectl配置合適的kubeconfig,就能夠在集羣中的任意節點使用。kubectl默認會從$HOME/.kube目錄下查找文件名爲 config
的文件,也能夠經過設置環境變量 KUBECONFIG
或者經過設置 --kubeconfig
去指定其它 kubeconfig 文件。git
總之kubeconfig就是爲訪問集羣所做的配置。github
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
文件;配置文件描述了集羣、用戶和上下文bootstrap
本段設置了所須要訪問的集羣的信息。使用set-cluster設置了須要訪問的集羣,如上爲kubernetes,這只是個名稱,實際爲--server指向的apiserver;--certificate-authority設置了該集羣的公鑰;--embed-certs爲true表示將--certificate-authority證書寫入到kubeconfig中;--server則表示該集羣的kube-apiserver地址api
生成的kubeconfig 被保存到 ~/.kube/config
文件app
本段主要設置用戶的相關信息,主要是用戶證書。如上的用戶名爲admin,證書爲:/etc/kubernetes/ssl/admin.pem,私鑰爲:/etc/kubernetes/ssl/admin-key.pem。注意客戶端的證書首先要通過集羣CA的簽署,不然不會被集羣承認。此處使用的是ca認證方式,也能夠使用token認證,如kubelet的 TLS Boostrap機制下的bootstrapping使用的就是token認證方式。上述kubectl使用的是ca認證,不須要token字段ide
集羣參數和用戶參數能夠同時設置多對,在上下文參數中將集羣參數和用戶參數關聯起來。上面的上下文名稱爲kubenetes,集羣爲kubenetes,用戶爲admin,表示使用admin的用戶憑證來訪問kubenetes集羣的default命名空間,也能夠增長--namspace來指定訪問的命名空間。ui
最後使用kubectl config use-context kubernetes來使用名爲kubenetes的環境項來做爲配置。若是配置了多個環境項,能夠經過切換不一樣的環境項名字來訪問到不一樣的集羣環境。spa
使用kubeconfig還須要注意用戶已經通過受權(如RBAC受權),上述例子中用戶的證書中OU字段爲system:masters
,kube-apiserver
預約義的 RoleBinding cluster-admin
將 Group system:masters
與 Role cluster-admin
綁定,該 Role 授予了調用kube-apiserver
相關 API 的權限。code