kubernetes 中 kubeconfig 的用法


用於配置集群訪問信息的文件叫作 kubeconfig 文件,在開啟了 TLS 的集群中,每次與集群交互時都需要身份認證,生產環境一般使用證書進行認證,其認證所需要的信息會放在 kubeconfig 文件中。此外,k8s 的組件都可以使用 kubeconfig 連接 apiserver,client-go 、operator、helm 等其他組件也使用 kubeconfig 訪問 apiserver。

一、kubeconfig 配置文件的生成

kubeconfig 的一個示例:

apiVersion: v1 clusters: - cluster: certificate-authority-data: xxx server: https://xxx:6443 name: cluster1 - cluster: certificate-authority-data: xxx server: https://xxx:6443 name: cluster2 contexts: - context: cluster: cluster1 user: kubelet name: cluster1-context - context: cluster: cluster2 user: kubelet name: cluster2-context current-context: cluster1-context kind: Config preferences: {} users: - name: kubelet user: client-certificate-data: xxx client-key-data: xxx 

apiVersion 和 kind 標識客戶端解析器的版本和模式,不應手動編輯。 preferences 指定可選(和當前未使用)的 kubectl 首選項。

1、clusters模塊

cluster中包含 kubernetes 集群的端點數據,包括 kubernetes apiserver 的完整 url 以及集群的證書頒發機構。

可以使用 kubectl config set-cluster 添加或修改 cluster 條目。

2、users 模塊

user 定義用於向 kubernetes 集群進行身份驗證的客戶端憑據。

可用憑證有 client-certificate、client-key、token 和 username/password
username/passwordtoken 是二者只能選擇一個,但 client-certificateclient-key 可以分別與它們組合。

可以使用 kubectl config set-credentials 添加或者修改 user 條目。

3、contexts 模塊

context 定義了一個命名的cluster、user、namespace元組,用於使用提供的認證信息和命名空間將請求發送到指定的集群。

三個都是可選的,僅使用 cluster、user、namespace 之一指定上下文,或指定none

未指定的值或在加載的 kubeconfig 中沒有相應條目的命名值將被替換為默認值。
加載和合並 kubeconfig 文件的規則很簡單,但有很多,具體可以查看加載和合並kubeconfig規則

可以使用kubectl config set-context添加或修改上下文條目。

4、current-context 模塊

current-context 是作為cluster、user、namespace元組的 key,
當 kubectl 從該文件中加載配置的時候會被默認使用。

可以在 kubectl 命令行里覆蓋這些值,通過分別傳入--context=CONTEXT、--cluster=CLUSTER、--user=USER 和 --namespace=NAMESPACE
以上示例中若不指定 context 則默認使用 cluster1-context。

kubectl  get node --kubeconfig=./kubeconfig --context=cluster2-context 

可以使用 kubectl config use-context 更改 current-context。

5、kubectl 生成 kubeconfig 的示例

kubectl 可以快速生成 kubeconfig,以下是一個示例:

$ kubectl config set-credentials myself --username=admin --password=secret $ kubectl config set-cluster local-server --server=http://localhost:8080 $ kubectl config set-context default-context --cluster=local-server --user=myself $ kubectl config use-context cluster-context $ kubectl config set contexts.default-context.namespace the-right-prefix $ kubectl config view 

若使用手寫 kubeconfig 的方式,推薦一個工具 kubeval,可以校驗 kubernetes yaml 或 json 格式的配置文件是否正確。

二、使用 kubeconfig 文件配置 kuebctl 跨集群認證

kubectl 作為操作 k8s 的一個客戶端工具,只要為 kubectl 提供連接 apiserver 的配置(kubeconfig),kubectl 可以在任何地方操作該集群,當然,若 kubeconfig 文件中配置多個集群,kubectl 也可以輕松地在多個集群之間切換。

kubectl 加載配置文件的順序:
1、kubectl 默認連接本機的 8080 端口
2、從 $HOME/.kube 目錄下查找文件名為 config 的文件
3、通過設置環境變量 KUBECONFIG 或者通過設置去指定其它 kubeconfig 文件

# 設置 KUBECONFIG 的環境變量 export KUBECONFIG=/etc/kubernetes/kubeconfig/kubelet.kubeconfig # 指定 kubeconfig 文件 kubectl get node --kubeconfig=/etc/kubernetes/kubeconfig/kubelet.kubeconfig # 使用不同的 context 在多個集群之間切換 kubectl get node --kubeconfig=./kubeconfig --context=cluster1-context 

開篇的示例就是多集群認證方式配置的一種。



作者:田飛雨
鏈接:https://www.jianshu.com/p/99853cac56b8


免責聲明!

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



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