使用 kubeconfig 檔案組織叢集存取
使用 kubeconfig 檔案來組織關於叢集、使用者、命名空間和身份驗證機制的資訊。kubectl
命令列工具使用 kubeconfig 檔案來尋找選擇叢集以及與叢集 API 伺服器通訊所需的資訊。
注意
用於配置叢集存取權限的檔案稱為kubeconfig 檔案。這是一種指稱配置檔案的通用方式。這並不表示有名為kubeconfig
的檔案。警告
僅使用來自信任來源的 kubeconfig 檔案。使用經過特殊設計的 kubeconfig 檔案可能會導致惡意程式碼執行或檔案洩露。如果您必須使用不受信任的 kubeconfig 檔案,請先仔細檢查它,就像您檢查 shell 腳本一樣。預設情況下,kubectl
會在 $HOME/.kube
目錄中尋找名為 config
的檔案。您可以透過設定 KUBECONFIG
環境變數或設定 --kubeconfig
旗標來指定其他 kubeconfig 檔案。
關於建立和指定 kubeconfig 檔案的逐步說明,請參閱配置多個叢集的存取權限。
支援多個叢集、使用者和身份驗證機制
假設您有多個叢集,而您的使用者和組件以各種方式進行身份驗證。例如:
- 執行的 kubelet 可能會使用憑證進行身份驗證。
- 使用者可能會使用權杖進行身份驗證。
- 管理員可能擁有一組憑證,他們將提供給個別使用者。
使用 kubeconfig 檔案,您可以組織您的叢集、使用者和命名空間。您還可以定義內容 (context) 以快速輕鬆地在叢集和命名空間之間切換。
內容 (Context)
kubeconfig 檔案中的內容 (context) 元素用於將存取參數分組在一個方便的名稱下。每個內容 (context) 都有三個參數:叢集、命名空間和使用者。預設情況下,kubectl
命令列工具使用來自目前內容 (context) 的參數與叢集進行通訊。
選擇目前的內容 (context):
kubectl config use-context
KUBECONFIG 環境變數
KUBECONFIG
環境變數保存 kubeconfig 檔案的清單。對於 Linux 和 Mac,清單是以冒號分隔的。對於 Windows,清單是以分號分隔的。KUBECONFIG
環境變數不是必要的。如果 KUBECONFIG
環境變數不存在,kubectl
將使用預設的 kubeconfig 檔案 $HOME/.kube/config
。
如果 KUBECONFIG
環境變數確實存在,kubectl
將使用有效的配置,這是合併 KUBECONFIG
環境變數中列出的檔案的結果。
合併 kubeconfig 檔案
若要查看您的配置,請輸入此命令:
kubectl config view
如先前所述,輸出可能來自單個 kubeconfig 檔案,或者可能是合併多個 kubeconfig 檔案的結果。
以下是 kubectl
在合併 kubeconfig 檔案時使用的規則:
如果設定了
--kubeconfig
旗標,則僅使用指定的檔案。不要合併。只允許使用此旗標的一個實例。否則,如果設定了
KUBECONFIG
環境變數,則將其用作應合併的檔案清單。根據以下規則合併KUBECONFIG
環境變數中列出的檔案:- 忽略空白的檔案名稱。
- 對於內容無法還原序列化的檔案產生錯誤。
- 第一個設定特定值或映射鍵的檔案獲勝。
- 永遠不要更改值或映射鍵。範例:保留第一個檔案設定
current-context
的內容 (context)。範例:如果兩個檔案都指定了red-user
,則僅使用第一個檔案的red-user
中的值。即使第二個檔案在red-user
下有非衝突的條目,也將其捨棄。
有關設定
KUBECONFIG
環境變數的範例,請參閱設定 KUBECONFIG 環境變數。否則,使用預設的 kubeconfig 檔案
$HOME/.kube/config
,而不進行合併。根據此鏈結中的第一個命中來判斷要使用的內容 (context):
- 如果存在
--context
命令列旗標,則使用它。 - 使用合併的 kubeconfig 檔案中的
current-context
。
此時允許空的內容 (context)。
- 如果存在
判斷叢集和使用者。此時,可能存在或可能不存在 context (上下文)。根據此鏈中的第一個命中項判斷叢集和使用者,此鏈會執行兩次:一次針對使用者,一次針對叢集。
- 如果命令列標記存在,則使用它:
--user
或--cluster
。 - 如果 context (上下文) 為非空,則從 context (上下文) 中取得使用者或叢集。
此時使用者和叢集可能為空。
- 如果命令列標記存在,則使用它:
確定要使用的實際叢集資訊。此時,可能存在或可能不存在叢集資訊。根據此鏈建立叢集資訊的每個部分;第一個命中項獲勝。
- 如果命令列標記存在,則使用它們:
--server
、--certificate-authority
、--insecure-skip-tls-verify
。 - 如果從合併的 kubeconfig 檔案中存在任何叢集資訊屬性,則使用它們。
- 如果沒有伺服器位置,則失敗。
- 如果命令列標記存在,則使用它們:
確定要使用的實際使用者資訊。使用與叢集資訊相同的規則建立使用者資訊,但每個使用者僅允許一種身份驗證技術。
- 如果命令列標記存在,則使用它們:
--client-certificate
、--client-key
、--username
、--password
、--token
。 - 使用來自合併的 kubeconfig 檔案中的
user
欄位。 - 如果存在兩種衝突的技術,則失敗。
- 如果命令列標記存在,則使用它們:
對於任何仍然遺失的資訊,使用預設值,並可能提示輸入身份驗證資訊。
檔案參考
kubeconfig 檔案中的檔案和路徑參考相對於 kubeconfig 檔案的位置。命令列上的檔案參考相對於目前工作目錄。在 $HOME/.kube/config
中,相對路徑以相對方式儲存,而絕對路徑以絕對方式儲存。
代理伺服器
您可以設定 kubectl
為每個叢集使用代理伺服器,方法是在您的 kubeconfig 檔案中使用 proxy-url
,如下所示
apiVersion: v1
kind: Config
clusters:
- cluster:
proxy-url: http://proxy.example.org:3128
server: https://k8s.example.org/k8s/clusters/c-xxyyzz
name: development
users:
- name: developer
contexts:
- context:
name: development