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,這只是個名稱,實際為--server指向的apiserver;--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認證方式。上述kubectl使用的是ca認證,不需要token字段

上下文參數

集群參數用戶參數可以同時設置多對,在上下文參數中將集群參數用戶參數關聯起來。上面的上下文名稱為kubenetes,集群為kubenetes,用戶為admin,表示使用admin的用戶憑證來訪問kubenetes集群的default命名空間,也可以增加--namspace來指定訪問的命名空間。

最后使用kubectl config use-context kubernetes來使用名為kubenetes的環境項來作為配置。如果配置了多個環境項,可以通過切換不同的環境項名字來訪問到不同的集群環境。

備注

使用kubeconfig還需要注意用戶已經經過授權(如RBAC授權),上述例子中用戶的證書中OU字段為system:masterskube-apiserver 預定義的 RoleBinding cluster-admin 將 Group system:masters 與 Role cluster-admin 綁定,該 Role 授予了調用kube-apiserver 相關 API 的權限。

參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM