使用 kubeconfig 檔案組織叢集存取

使用 kubeconfig 檔案來組織關於叢集、使用者、命名空間和身份驗證機制的資訊。kubectl 命令列工具使用 kubeconfig 檔案來尋找選擇叢集以及與叢集 API 伺服器通訊所需的資訊。

預設情況下,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 檔案時使用的規則:

  1. 如果設定了 --kubeconfig 旗標,則僅使用指定的檔案。不要合併。只允許使用此旗標的一個實例。

    否則,如果設定了 KUBECONFIG 環境變數,則將其用作應合併的檔案清單。根據以下規則合併 KUBECONFIG 環境變數中列出的檔案:

    • 忽略空白的檔案名稱。
    • 對於內容無法還原序列化的檔案產生錯誤。
    • 第一個設定特定值或映射鍵的檔案獲勝。
    • 永遠不要更改值或映射鍵。範例:保留第一個檔案設定 current-context 的內容 (context)。範例:如果兩個檔案都指定了 red-user,則僅使用第一個檔案的 red-user 中的值。即使第二個檔案在 red-user 下有非衝突的條目,也將其捨棄。

    有關設定 KUBECONFIG 環境變數的範例,請參閱設定 KUBECONFIG 環境變數

    否則,使用預設的 kubeconfig 檔案 $HOME/.kube/config,而不進行合併。

  2. 根據此鏈結中的第一個命中來判斷要使用的內容 (context):

    1. 如果存在 --context 命令列旗標,則使用它。
    2. 使用合併的 kubeconfig 檔案中的 current-context

    此時允許空的內容 (context)。

  3. 判斷叢集和使用者。此時,可能存在或可能不存在 context (上下文)。根據此鏈中的第一個命中項判斷叢集和使用者,此鏈會執行兩次:一次針對使用者,一次針對叢集。

    1. 如果命令列標記存在,則使用它:--user--cluster
    2. 如果 context (上下文) 為非空,則從 context (上下文) 中取得使用者或叢集。

    此時使用者和叢集可能為空。

  4. 確定要使用的實際叢集資訊。此時,可能存在或可能不存在叢集資訊。根據此鏈建立叢集資訊的每個部分;第一個命中項獲勝。

    1. 如果命令列標記存在,則使用它們:--server--certificate-authority--insecure-skip-tls-verify
    2. 如果從合併的 kubeconfig 檔案中存在任何叢集資訊屬性,則使用它們。
    3. 如果沒有伺服器位置,則失敗。
  5. 確定要使用的實際使用者資訊。使用與叢集資訊相同的規則建立使用者資訊,但每個使用者僅允許一種身份驗證技術。

    1. 如果命令列標記存在,則使用它們:--client-certificate--client-key--username--password--token
    2. 使用來自合併的 kubeconfig 檔案中的 user 欄位。
    3. 如果存在兩種衝突的技術,則失敗。
  6. 對於任何仍然遺失的資訊,使用預設值,並可能提示輸入身份驗證資訊。

檔案參考

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

接下來的步驟

最後修改時間:2022 年 4 月 13 日下午 9:05 PST:kubectl 代理伺服器組態的文件修正 (81fe9b4e91)