使用 kubeconfig 檔案組織叢集訪問
使用 kubeconfig 檔案來組織有關叢集、使用者、名稱空間和身份驗證機制的資訊。kubectl
命令列工具使用 kubeconfig 檔案來查詢選擇叢集以及與叢集的 API 伺服器通訊所需的資訊。
注意
用於配置叢集訪問的檔案稱為 _kubeconfig 檔案_。這是指代配置檔案的一種通用方式。它並不意味著存在一個名為kubeconfig
的檔案。警告
只使用來自可信源的 kubeconfig 檔案。使用特製 kubeconfig 檔案可能導致惡意程式碼執行或檔案洩露。如果必須使用不可信的 kubeconfig 檔案,請像檢查 shell 指令碼一樣,首先仔細檢查它。預設情況下,kubectl
在 $HOME/.kube
目錄中查詢名為 config
的檔案。你可以透過設定 KUBECONFIG
環境變數或設定 --kubeconfig
標誌來指定其他 kubeconfig 檔案。
有關建立和指定 kubeconfig 檔案的分步說明,請參閱 配置對多個叢集的訪問。
支援多個叢集、使用者和身份驗證機制
假設你有多個叢集,並且你的使用者和元件以各種方式進行身份驗證。例如:
- 正在執行的 kubelet 可能使用證書進行身份驗證。
- 使用者可能使用令牌進行身份驗證。
- 管理員可能擁有一組證書,他們將其提供給各個使用者。
透過 kubeconfig 檔案,你可以組織你的叢集、使用者和名稱空間。你還可以定義上下文,以便在叢集和名稱空間之間快速輕鬆地切換。
上下文
kubeconfig 檔案中的 _context_ 元素用於將訪問引數歸組到一個方便的名稱下。每個上下文有三個引數:叢集、名稱空間和使用者。預設情況下,kubectl
命令列工具使用 _當前上下文_ 中的引數與叢集通訊。
選擇當前上下文
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
的上下文。示例:如果兩個檔案都指定了red-user
,則僅使用第一個檔案中red-user
的值。即使第二個檔案在red-user
下有不衝突的條目,也將其丟棄。
有關設定
KUBECONFIG
環境變數的示例,請參閱 設定 KUBECONFIG 環境變數。否則,使用預設的 kubeconfig 檔案
$HOME/.kube/config
,不進行合併。根據此鏈中的第一個匹配項確定要使用的上下文:
- 如果存在
--context
命令列標誌,則使用它。 - 使用合併的 kubeconfig 檔案中的
current-context
。
此時允許空上下文。
- 如果存在
確定叢集和使用者。此時,可能存在或不存在上下文。根據此鏈中的第一個匹配項確定叢集和使用者,此鏈執行兩次:一次用於使用者,一次用於叢集:
- 如果存在命令列標誌:
--user
或--cluster
,則使用它們。 - 如果上下文非空,則從上下文中獲取使用者或叢集。
此時使用者和叢集可以是空的。
- 如果存在命令列標誌:
確定要使用的實際叢集資訊。此時,可能存在或不存在叢集資訊。根據此鏈構建叢集資訊的每個部分;第一個匹配項獲勝:
- 如果存在命令列標誌:
--server
、--certificate-authority
、--insecure-skip-tls-verify
,則使用它們。 - 如果合併的 kubeconfig 檔案中存在任何叢集資訊屬性,則使用它們。
- 如果沒有伺服器位置,則失敗。
- 如果存在命令列標誌:
確定要使用的實際使用者資訊。使用與叢集資訊相同的規則構建使用者資訊,但每個使用者只允許一種身份驗證技術:
- 如果存在命令列標誌:
--client-certificate
、--client-key
、--username
、--password
、--token
,則使用它們。 - 使用合併的 kubeconfig 檔案中的
user
欄位。 - 如果存在兩種衝突的技術,則失敗。
- 如果存在命令列標誌:
對於仍缺失的任何資訊,使用預設值並可能提示輸入身份驗證資訊。
檔案引用
kubeconfig 檔案中的檔案和路徑引用是相對於 kubeconfig 檔案位置的。命令列中的檔案引用是相對於當前工作目錄的。在 $HOME/.kube/config
中,相對路徑以相對方式儲存,絕對路徑以絕對方式儲存。
代理
你可以透過在 kubeconfig 檔案中使用 proxy-url
為每個叢集配置 kubectl
以使用代理,如下所示:
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