K8s之配置文件kubeconfig生成


使用kubectl通過終端連接到k8s集群之后。可以設置要在那個命名空間下進行操作。

查看當前的工作上下文

#kubectl config view

apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://130.211.122.180
name: lithe-cocoa-92103_kubernetes
contexts:
- context:
cluster: lithe-cocoa-92103_kubernetes
user: lithe-cocoa-92103_kubernetes
name: lithe-cocoa-92103_kubernetes
current-context: lithe-cocoa-92103_kubernetes
kind: Config
preferences: {}
users:
- name: lithe-cocoa-92103_kubernetes
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b
- name: lithe-cocoa-92103_kubernetes-basic-auth
user:
password: h5M0FtUUIflBSdI7
username: admin

設置工作上下文,前提是該命名空間已經存在

 kubectl config set-context prod --namespace=production --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes

切換

kubectl config use-context pro

驗證是否已經切換到了新的上下文

kubectl config current-context


 

在開啟了 TLS 的集群中,每當與集群交互的時候少不了的是身份認證,使用 kubeconfig(即證書) 和 token 兩種認證方式是最簡單也最通用的認證方式。

以kubectl為例介紹kubeconfig的配置。kubectl只是個go編寫的可執行程序,只要為kubectl配置合適的kubeconfig,就可以在集群中的任意節點使用。kubectl默認會從$HOME/.kube目錄下查找文件名為 config 的文件,也可以通過設置環境變量 KUBECONFIG 或者通過設置 --kubeconfig 去指定其它 kubeconfig 文件。

總之kubeconfig就是為訪問集群所作的配置。

# 配置kubernetes集群參數
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=https://172.17.213.60:6443

# 配置客戶端認證參數
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地址

用戶參數
本段主要設置用戶的相關信息,主要是用戶證書。如上的用戶名為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:masters,kube-apiserver 預定義的 RoleBinding cluster-admin 將 Group system:masters 與 Role cluster-admin 綁定,該 Role 授予了調用kube-apiserver 相關 API 的權限。

 


免責聲明!

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



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