iT邦幫忙

2022 iThome 鐵人賽

DAY 25
1
DevOps

30天準備CKA考試系列 第 25

Day 25:KUBECONFIG

  • 分享至 

  • xImage
  •  

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。

Clusters

我們可能會管理到很多集群,像是Production、Stagging、Development之類有著不同功能的集群,在這裡就可以記錄這些集群的資訊。

Users

我們在各個集群中可能都會擔任不同的使用者,像是我們自己建立的集群,可能自己就是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編碼。

Contexts

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來查找~

參考資料

使用 kubeconfig 文件组织集群访问

配置对多集群的访问


上一篇
Day 24:TLS
下一篇
Day 26:Authorization
系列文
30天準備CKA考試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言