設定多叢集的存取權

本頁說明如何使用組態檔來設定多個叢集的存取權。在一個或多個組態檔中定義叢集、使用者和內容之後,您可以使用 kubectl config use-context 指令在叢集之間快速切換。

準備開始前

您需要有一個 Kubernetes 叢集,並且必須設定 kubectl 命令列工具以與您的叢集通訊。建議在至少有兩個節點且未充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用以下 Kubernetes 實驗環境之一

若要檢查 kubectl 是否已安裝,請執行 kubectl version --client。kubectl 版本應在叢集 API 伺服器的次要版本範圍內。

定義叢集、使用者和內容

假設您有兩個叢集,一個用於開發工作,另一個用於測試工作。在 development 叢集中,您的前端開發人員在名為 frontend 的命名空間中工作,而您的儲存開發人員在名為 storage 的命名空間中工作。在您的 test 叢集中,開發人員在預設命名空間中工作,或者他們會視情況建立輔助命名空間。開發叢集的存取權需要憑證驗證。測試叢集的存取權需要使用者名稱和密碼驗證。

建立一個名為 config-exercise 的目錄。在您的 config-exercise 目錄中,建立一個名為 config-demo 的檔案,內容如下

apiVersion: v1
kind: Config
preferences: {}

clusters:
- cluster:
  name: development
- cluster:
  name: test

users:
- name: developer
- name: experimenter

contexts:
- context:
  name: dev-frontend
- context:
  name: dev-storage
- context:
  name: exp-test

組態檔描述叢集、使用者和內容。您的 config-demo 檔案具有描述兩個叢集、兩個使用者和三個內容的框架。

前往您的 config-exercise 目錄。輸入以下指令以將叢集詳細資訊新增至您的組態檔

kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
kubectl config --kubeconfig=config-demo set-cluster test --server=https://5.6.7.8 --insecure-skip-tls-verify

將使用者詳細資訊新增至您的組態檔

kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile
kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password

將內容詳細資訊新增至您的組態檔

kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development --namespace=frontend --user=developer
kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development --namespace=storage --user=developer
kubectl config --kubeconfig=config-demo set-context exp-test --cluster=test --namespace=default --user=experimenter

開啟您的 config-demo 檔案以查看新增的詳細資訊。除了開啟 config-demo 檔案之外,您也可以使用 config view 指令。

kubectl config --kubeconfig=config-demo view

輸出顯示兩個叢集、兩個使用者和三個內容

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: test
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: test
    namespace: default
    user: experimenter
  name: exp-test
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file
- name: experimenter
  user:
    # Documentation note (this comment is NOT part of the command output).
    # Storing passwords in Kubernetes client config is risky.
    # A better alternative would be to use a credential plugin
    # and store the credentials separately.
    # See https://kubernetes.dev.org.tw/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
    password: some-password
    username: exp

上面的 fake-ca-filefake-cert-filefake-key-file 是憑證檔案路徑名稱的預留位置。您需要將這些變更為您環境中憑證檔案的實際路徑名稱。

有時您可能想要在此處使用內嵌的 Base64 編碼資料,而不是個別的憑證檔案;在這種情況下,您需要在金鑰中新增後綴 -data,例如 certificate-authority-dataclient-certificate-dataclient-key-data

每個內容都是一個三元組 (叢集、使用者、命名空間)。例如,dev-frontend 內容表示「使用 developer 使用者的認證來存取 development 叢集的 frontend 命名空間」。

設定目前的內容

kubectl config --kubeconfig=config-demo use-context dev-frontend

現在,無論何時您輸入 kubectl 命令,該動作都將應用於 dev-frontend 環境定義中列出的叢集和命名空間。並且該命令將使用 dev-frontend 環境定義中列出的使用者的憑證。

若要僅查看與目前環境定義相關聯的組態資訊,請使用 --minify 旗標。

kubectl config --kubeconfig=config-demo view --minify

輸出顯示與 dev-frontend 環境定義相關聯的組態資訊

apiVersion: v1
clusters:
- cluster:
    certificate-authority: fake-ca-file
    server: https://1.2.3.4
  name: development
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
current-context: dev-frontend
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file

現在假設您想要在測試叢集中工作一段時間。

將目前的環境定義變更為 exp-test

kubectl config --kubeconfig=config-demo use-context exp-test

現在,您輸入的任何 kubectl 命令都將應用於 test 叢集的預設命名空間。並且該命令將使用 exp-test 環境定義中列出的使用者的憑證。

檢視與新的目前環境定義 exp-test 相關聯的組態。

kubectl config --kubeconfig=config-demo view --minify

最後,假設您想要在 development 叢集的 storage 命名空間中工作一段時間。

將目前的環境定義變更為 dev-storage

kubectl config --kubeconfig=config-demo use-context dev-storage

檢視與新的目前環境定義 dev-storage 相關聯的組態。

kubectl config --kubeconfig=config-demo view --minify

建立第二個組態檔

在您的 config-exercise 目錄中,建立一個名為 config-demo-2 且包含以下內容的檔案

apiVersion: v1
kind: Config
preferences: {}

contexts:
- context:
    cluster: development
    namespace: ramp
    user: developer
  name: dev-ramp-up

先前的組態檔定義了一個名為 dev-ramp-up 的新環境定義。

設定 KUBECONFIG 環境變數

查看您是否有一個名為 KUBECONFIG 的環境變數。 如果有的話,請儲存您 KUBECONFIG 環境變數的目前值,以便稍後還原。 例如

Linux

export KUBECONFIG_SAVED="$KUBECONFIG"

Windows PowerShell

$Env:KUBECONFIG_SAVED=$ENV:KUBECONFIG

KUBECONFIG 環境變數是組態檔的路徑清單。 該清單對於 Linux 和 Mac 是以冒號分隔,對於 Windows 則是以分號分隔。 如果您有 KUBECONFIG 環境變數,請熟悉清單中的組態檔。

暫時將兩個路徑附加到您的 KUBECONFIG 環境變數。 例如

Linux

export KUBECONFIG="${KUBECONFIG}:config-demo:config-demo-2"

Windows PowerShell

$Env:KUBECONFIG=("config-demo;config-demo-2")

在您的 config-exercise 目錄中,輸入此命令

kubectl config view

輸出顯示從您的 KUBECONFIG 環境變數中列出的所有檔案合併的資訊。 特別注意,合併的資訊具有來自 config-demo-2 檔案的 dev-ramp-up 環境定義,以及來自 config-demo 檔案的三個環境定義

contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: ramp
    user: developer
  name: dev-ramp-up
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: test
    namespace: default
    user: experimenter
  name: exp-test

有關 kubeconfig 檔案如何合併的更多資訊,請參閱使用 kubeconfig 檔案組織叢集存取

瀏覽 $HOME/.kube 目錄

如果您已經有一個叢集,並且可以使用 kubectl 與叢集互動,那麼您可能在 $HOME/.kube 目錄中擁有一個名為 config 的檔案。

前往 $HOME/.kube,看看那裡有哪些檔案。 通常,會有一個名為 config 的檔案。 此目錄中也可能還有其他組態檔。 簡要熟悉這些檔案的內容。

將 $HOME/.kube/config 附加到您的 KUBECONFIG 環境變數

如果您有 $HOME/.kube/config 檔案,並且它尚未列在您的 KUBECONFIG 環境變數中,請立即將其附加到您的 KUBECONFIG 環境變數。 例如

Linux

export KUBECONFIG="${KUBECONFIG}:${HOME}/.kube/config"

Windows Powershell

$Env:KUBECONFIG="$Env:KUBECONFIG;$HOME\.kube\config"

檢視從現在列在您的 KUBECONFIG 環境變數中的所有檔案合併的組態資訊。 在您的 config-exercise 目錄中,輸入

kubectl config view

清除

將您的 KUBECONFIG 環境變數還原為其原始值。 例如

Linux

export KUBECONFIG="$KUBECONFIG_SAVED"

Windows PowerShell

$Env:KUBECONFIG=$ENV:KUBECONFIG_SAVED

檢查 kubeconfig 代表的主體

在驗證叢集之後,您將獲得哪些屬性(使用者名稱、群組)並不總是顯而易見的。 如果您同時管理多個叢集,情況可能會更具挑戰性。

有一個 kubectl 子命令可以檢查主體屬性,例如針對您選取的 Kubernetes 用戶端環境定義的使用者名稱:kubectl auth whoami

閱讀用於用戶端的 API 存取驗證資訊以更詳細地了解此內容。

下一步

上次修改時間:2023 年 7 月 12 日 凌晨 1:25 PST:修訂文件首頁 (9520b96a61)