設定 kubectl 的叢集存取權

本頁說明如何在 Google Kubernetes Engine 中為 kubectl 指令列工具設定叢集存取權。

總覽

如果您在 Google Cloud Platform 專案中執行多個叢集,就必須選擇 kubectl 要與哪個叢集通訊。您可以在 Kubernetes 的 kubeconfig 檔案中設定目前背景資訊,以便為 kubectl 設定預設叢集。此外,您可以使用 --cluster 標記,針對特定的叢集來執行 kubectl 指令。

接下來的幾個小節將說明 kubeconfig 的運作方式、如何設定 kubectl 的預設叢集,以及如何針對特定的叢集執行個別的 kubectl 指令。

事前準備

如要為這個工作做好準備,請執行下列步驟:

  • 確認您已啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 確認您已安裝 Cloud SDK
  • 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  • 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud 更新到最新版本:
    gcloud components update

Kubernetes 設定檔

Kubernetes 使用名為 kubeconfig的 YAML 檔案來儲存 kubectl 的叢集驗證資訊。kubeconfig 包含 kubectl 在執行指令時參照的背景資訊清單。根據預設,該檔案儲存在 $HOME/.kube/config

「背景資訊」是一組存取參數。每個背景資訊都包含一個 Kubernetes 叢集、一位使用者和一個命名空間。「目前背景資訊」就是 kubectl 目前的預設叢集;也就是說,系統會針對該叢集執行所有的 kubectl 指令。

當您使用 gcloud container clusters create 建立叢集時,系統會自動將項目新增至您環境中的 kubeconfig,且目前背景資訊會變更成該叢集:

gcloud container clusters create my-cluster
Creating my-cluster...done
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster

當您使用 Google Cloud Platform Console,或是在不同的電腦上使用 gcloud 建立叢集時,您環境中的 kubeconfig「不會」更新。此外,如果某位專案團隊成員在自己的電腦上使用 gcloud 建立叢集,他的 kubeconfig 會更新,但您的並不會更新。請依照下方的操作說明,將這些叢集新增至您的本機 kubeconfig

關於叢集端點

所有叢集都有標準端點,端點就是 Kubernetes API 伺服器的 IP 位址,能讓 kubectl 和其他服務用來與您的叢集主要執行個體通訊。在 GCP Console 中,端點會顯示在叢集的「Details」(詳細資料) 分頁中的「Endpoints」(端點) 欄位下方,以及顯示在 gcloud container clusters describe 輸出內容的 endpoint 欄位中。

當您執行 gcloud container clusters get-credentials 時,您會看到指令在更新 kubeconfig 的過程中取得叢集端點。

私人叢集有兩個唯一的端點值:privateEndpoint (內部 IP 位址) 及 publicEndpoint (外部 IP 位址)。根據預設,當您針對私人叢集執行 get-credentials 時,系統會把外部 IP 位址設定為端點。如果您希望把內部 IP 位址當做端點,請參閱使用私人叢集的內部 IP 位址產生 kubeconfig 項目

關於 kubectl 的驗證

所有 GKE 叢集都設定成會接受 GCP 使用者和服務帳戶的身分,方法是驗證由 kubectl 提供的憑證,然後擷取與使用者或服務帳戶身分相關聯的電子郵件地址。因此,這些帳戶的憑證必須包含 userinfo.email OAuth 範圍,才能順利通過驗證。

當您使用 gcloud 以便為全新現有的叢集設定環境的 kubeconfig 時, 會將 本身使用的憑證提供給 kubectl。舉例來說,如果您使用 gcloud auth login,系統會把您的個人憑證提供給kubectl,包括 userinfo.email 範圍。這讓 GKE 叢集能夠驗證 kubectl 用戶端的真偽。

或者,您也可以選擇把 kubectl 設定成在 Compute Engine 執行個體上執行時,會使用 GCP 服務帳戶的憑證。不過,userinfo.email 範圍預設「不會」包含在由 Compute Engine 執行個體建立的憑證中。因此,您「必須」明確地新增這個範圍,例如在您建立 Compute Engine 執行個體時使用 --scopes 標記。

當使用者或 GCP 服務帳戶通過驗證之後,還必須「獲得授權」才能對 GKE 叢集進行任何動作。如要進一步瞭解如何設定授權,請參閱角色型存取權控管

查看 kubectl 的背景資訊

如要查看 kubectl 的目前背景資訊,請執行下列指令:

kubectl config current-context

查看 kubeconfig

如要查看環境的 kubeconfig,請執行下列指令:

kubectl config view

這個指令會傳回已產生 kubeconfig 個項目的所有叢集清單。如果該清單列出了 GKE 叢集,您就可以在目前的環境中針對該叢集執行 kubectl 指令。否則,您就必須為該叢集產生 kubeconfig 項目

產生 kubeconfig 項目

您必須在環境中產生 kubeconfig 項目,才能針對在 GCP Console 中建立的叢集,從另一台電腦或由另一位專案成員執行 kubectl 指令。

請執行下列指令來產生 kubeconfig 項目:

gcloud container clusters get-credentials [CLUSTER_NAME]

其中 [CLUSTER_NAME]是叢集的名稱。

kubeconfig 項目包含:

  1. 您的憑證,如 gcloud auth list 中所示;或是
  2. 您的應用程式預設憑證 (如果有設定的話)。

使用私人叢集的內部 IP 位址產生 kubeconfig 項目

當您執行 get-credentials 時,可以指定 --internal-ip 將私人叢集的內部 IP 位址寫入 kubeconfig

gcloud container clusters get-credentials --internal-ip [CLUSTER_NAME]

設定 kubectl 指令的預設叢集

如果您先前已經為叢集產生 kubeconfig 項目,您可以執行 gcloud container clusters get-credentials,將 kubectl 的目前背景資訊切換成該叢集。

舉例來說,假設某個專案有兩個叢集:my-clustermy-new-cluster。目前背景資訊是 my-new-cluster,但您想要針對 my-cluster 執行「所有」kubectl 指令。

您只要執行下列指令,就能將目前背景資訊切換成 my-cluster

gcloud container clusters get-credentials my-cluster

針對特定叢集執行個別的 kubectl 指令

您可以針對特定叢集執行個別的 kubectl 指令,方法是把該叢集的名稱顯示在 kubeconfig做為 --cluster 標記的引數來傳入。

舉例來說,假設某個環境有兩個叢集 (my-clustermy-new-cluster),而環境的目前背景資訊為 。您想要將應用程式部署到 my-new-cluster,但您不希望變更目前背景資訊。

您只要執行下列指令,就能將應用程式部署到 my-new-cluster

kubectl run my-app --image gcr.io/my-bucket/my-app:1.0 --cluster my-new-cluster

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件