用於配置集羣訪問信息的文件叫做 kubeconfig 文件,在開啓了 TLS 的集羣中,每次與集羣交互時都須要身份認證,生產環境通常使用證書進行認證,其認證所須要的信息會放在 kubeconfig 文件中。此外,k8s 的組件均可以使用 kubeconfig 鏈接 apiserver,client-go 、operator、helm 等其餘組件也使用 kubeconfig 訪問 apiserver。node
1、kubeconfig 配置文件的生成
kubeconfig 的一個示例:sql
1apiVersion: v1
2clusters:
3- cluster:
4 certificate-authority-data: xxx
5 server: https://xxx:6443
6 name: cluster1
7- cluster:
8 certificate-authority-data: xxx
9 server: https://xxx:6443
10 name: cluster2
11contexts:
12- context:
13 cluster: cluster1
14 user: kubelet
15 name: cluster1-context
16- context:
17 cluster: cluster2
18 user: kubelet
19 name: cluster2-context
20current-context: cluster1-context
21kind: Config
22preferences: {}
23users:
24- name: kubelet
25 user:
26 client-certificate-data: xxx
27 client-key-data: xxx
apiVersion 和 kind 標識客戶端解析器的版本和模式,不該手動編輯。 preferences 指定可選(和當前未使用)的 kubectl 首選項。json
一、clusters模塊
cluster中包含 kubernetes 集羣的端點數據,包括 kubernetes apiserver 的完整 url 以及集羣的證書頒發機構。api
可使用 kubectl config set-cluster
添加或修改 cluster 條目。瀏覽器
二、users 模塊
user 定義用於向 kubernetes 集羣進行身份驗證的客戶端憑據。ruby
可用憑證有 client-certificate、client-key、token 和 username/password
。 username/password
和 token
是兩者只能選擇一個,但 client-certificate
和 client-key
能夠分別與它們組合。微信
可使用kubectl config set-credentials
添加或者修改 user 條目。app
三、contexts 模塊
context 定義了一個命名的cluster、user、namespace
元組,用於使用提供的認證信息和命名空間將請求發送到指定的集羣。工具
三個都是可選的,僅使用 cluster、user、namespace 之一指定上下文,或指定none
。url
未指定的值或在加載的 kubeconfig 中沒有相應條目的命名值將被替換爲默認值。
加載和合並 kubeconfig 文件的規則很簡單,但有不少,具體能夠查看加載和合並kubeconfig規則。
可使用kubectl config set-context
添加或修改上下文條目。
四、current-context 模塊
current-context 是做爲cluster、user、namespace
元組的 key,
當 kubectl 從該文件中加載配置的時候會被默認使用。
能夠在 kubectl 命令行裏覆蓋這些值,經過分別傳入--context=CONTEXT、 --cluster=CLUSTER、--user=USER 和 --namespace=NAMESPACE
。
以上示例中若不指定 context 則默認使用 cluster1-context。
1kubectl get node --kubeconfig=./kubeconfig --context=cluster2-context
可使用 kubectl config use-context
更改 current-context。
五、kubectl 生成 kubeconfig 的示例
kubectl 能夠快速生成 kubeconfig,如下是一個示例:
1$ kubectl config set-credentials myself --username=admin --password=secret
2$ kubectl config set-cluster local-server --server=http://localhost:8080
3$ kubectl config set-context default-context --cluster=local-server --user=myself
4$ kubectl config use-context cluster-context
5$ kubectl config set contexts.default-context.namespace the-right-prefix
6$ kubectl config view
若使用手寫 kubeconfig 的方式,推薦一個工具 kubeval,能夠校驗 kubernetes yaml 或 json 格式的配置文件是否正確。
2、使用 kubeconfig 文件配置 kuebctl 跨集羣認證
kubectl 做爲操做 k8s 的一個客戶端工具,只要爲 kubectl 提供鏈接 apiserver 的配置(kubeconfig),kubectl 能夠在任何地方操做該集羣,固然,若 kubeconfig 文件中配置多個集羣,kubectl 也能夠輕鬆地在多個集羣之間切換。
kubectl 加載配置文件的順序:
一、kubectl 默認鏈接本機的 8080 端口
二、從 $HOME/.kube 目錄下查找文件名爲 config 的文件
三、經過設置環境變量 KUBECONFIG 或者經過設置去指定其它 kubeconfig 文件
1# 設置 KUBECONFIG 的環境變量
2export KUBECONFIG=/etc/kubernetes/kubeconfig/kubelet.kubeconfig
3# 指定 kubeconfig 文件
4kubectl get node --kubeconfig=/etc/kubernetes/kubeconfig/kubelet.kubeconfig
5# 使用不一樣的 context 在多個集羣之間切換
6kubectl get node --kubeconfig=./kubeconfig --context=cluster1-context
開篇的示例就是多集羣認證方式配置的一種。
參考:
https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/
https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/
本文分享自微信公衆號 - 田飛雨(kubeConChina)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。