設定多叢集的存取權
本頁說明如何使用組態檔來設定多個叢集的存取權。在一個或多個組態檔中定義叢集、使用者和內容之後,您可以使用 kubectl config use-context
指令在叢集之間快速切換。
注意
用於設定叢集存取權的檔案有時稱為 kubeconfig 檔案。這是指組態檔的一般方式。這並不表示有一個名為kubeconfig
的檔案。警告
僅使用來自信任來源的 kubeconfig 檔案。使用特製的 kubeconfig 檔案可能會導致惡意程式碼執行或檔案洩露。如果您必須使用不受信任的 kubeconfig 檔案,請先仔細檢查,就像檢查 Shell 指令稿一樣。準備開始前
您需要有一個 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
將使用者詳細資訊新增至您的組態檔
注意
將密碼儲存在 Kubernetes 用戶端組態中是有風險的。更好的替代方案是使用認證外掛程式並將其分開儲存。請參閱:client-go 認證外掛程式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 --kubeconfig=config-demo config unset users.<name>
- 若要移除叢集,您可以執行
kubectl --kubeconfig=config-demo config unset clusters.<name>
- 若要移除內容,您可以執行
kubectl --kubeconfig=config-demo config unset contexts.<name>
將內容詳細資訊新增至您的組態檔
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-file
、fake-cert-file
和 fake-key-file
是憑證檔案路徑名稱的預留位置。您需要將這些變更為您環境中憑證檔案的實際路徑名稱。
有時您可能想要在此處使用內嵌的 Base64 編碼資料,而不是個別的憑證檔案;在這種情況下,您需要在金鑰中新增後綴 -data
,例如 certificate-authority-data
、client-certificate-data
、client-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 存取驗證資訊以更詳細地了解此內容。