kubeconfig是用來記錄集群、User、預設Namespace以及身份驗證機制的資料。
當我們使用kubectl這個工具在執行各種指令時,它就會透過kubeconfig來得知要到哪個集群,使用哪個使用者等資訊來完成這個命令。我們在使用kubeconfig時,不需要像之前一樣建立Object,而是可以直接建立檔案,然後讓kubectl等工具來讀取這邊的設定。
我們先來看看官網上面的kubeconfig的YAML:
apiVersion: v1
clusters:
- cluster:
certificate-authority: fake-ca-file
server: https://1.2.3.4
name: development
- cluster:
insecure-skip-tls-verify: true
server: https://5.6.7.8
name: scratch
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: scratch
namespace: default
user: experimenter
name: exp-scratch
current-context: exp-scratch
kind: Config
preferences: {}
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
- name: experimenter
user:
password: some-password
username: exp
從上方可以發現這個YAML主要可以分為三大類:clusters、users、contexts。
我們可能會管理到很多集群,像是Production、Stagging、Development之類有著不同功能的集群,在這裡就可以記錄這些集群的資訊。
我們在各個集群中可能都會擔任不同的使用者,像是我們自己建立的集群,可能自己就是Admin。而公司的集群,我們可能就沒有那麼大的權限。這邊就是把各個使用者列出來。
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
此外在這邊也可以看到client-certificate和client-key,它們的值為路徑,我們最好填入絕對路徑,而非相對路徑。避免環境變數被改變時,會發生非預期的錯誤。
除了使用相對路徑,還可以直接帶入值,只要在後面加上-data,像是client-certificate-data或client-key-data。另外要注意的是,這些值必須要Secret一樣經過Base64編碼。
Context的意思就是上下文,這邊紀錄了會在哪些Cluster使用了哪些User。
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: scratch
namespace: default
user: experimenter
name: exp-scratch
current-context: exp-scratch
像是這邊第二個context叫dev-storage,我們在development這個cluster使用developer這個user。
而這邊的namespace代表我們這個context預設的namespace。
此外我們還可以看到一個欄位current-context,這就是我們使用kubectl會使用到的context。
首先我們要知道預設的kubeconfig file的位置在:
$HOME/.kube/config
觀看當前的kubeconfig
kubectl config view
# 如果加上--kubeconfig,則可以指定要使用哪個kubeconfig file
kubectl config view --kubeconfig=my-custom-config
# 如果想要查指令的說明,可以加-h
kubectl config -h
如果要改變current-context
# prod-user@proudction指的是我們要改變成這個context
kubectl config use-context prod-user@proudction
改變當前預設的namespace
kubectl config set-context --current --namespace=NAMESPACE
如果想要改變預設的kubeconfig,可以透過宣告環境變數,或是直接取代原本的檔案。
# 更新環境變數
export KUBECONFIG=my-custom-config
# 覆蓋舊的kubeconfig
mv my-custom-config $HOME/.kube/config
還有很多的使用方法可以參考官網,或是直接使用-h來查找~