使用 kubeconfig 檔案組織叢集訪問

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

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

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

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

    • 忽略空檔名。
    • 對於內容無法反序列化的檔案生成錯誤。
    • 第一個設定特定值或對映鍵的檔案獲勝。
    • 永不更改值或對映鍵。示例:保留第一個檔案設定 current-context 的上下文。示例:如果兩個檔案都指定了 red-user,則僅使用第一個檔案中 red-user 的值。即使第二個檔案在 red-user 下有不衝突的條目,也將其丟棄。

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

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

  2. 根據此鏈中的第一個匹配項確定要使用的上下文:

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

    此時允許空上下文。

  3. 確定叢集和使用者。此時,可能存在或不存在上下文。根據此鏈中的第一個匹配項確定叢集和使用者,此鏈執行兩次:一次用於使用者,一次用於叢集:

    1. 如果存在命令列標誌:--user--cluster,則使用它們。
    2. 如果上下文非空,則從上下文中獲取使用者或叢集。

    此時使用者和叢集可以是空的。

  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 中,相對路徑以相對方式儲存,絕對路徑以絕對方式儲存。

代理

你可以透過在 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

下一步

上次修改時間:2022 年 4 月 13 日下午 9:05 PST:kubectl 代理配置的文件修復 (81fe9b4e91)