透過 Google Cloud 控制台管理叢集

本文說明如何透過Google Cloud 控制台,管理使用 Google Distributed Cloud 軟體在裸機上建立的管理員和使用者叢集。叢集管理功能包括登入叢集、查看工作負載、升級、更新及刪除叢集。

車隊成員和控制台

所有叢集都必須是機群的成員,這樣才能以統一的方式查看及管理多個叢集和工作負載。每個叢集機群都會與機群主專案建立關聯。

所有叢集都會在建立時註冊至機群:

  • 使用 bmctl 建立叢集時,請在叢集設定檔的 gkeConnect 區段中指定機群主專案。叢集會成為指定專案的機群成員。

  • 使用標準 GKE On-Prem API 用戶端 (主控台、Google Cloud CLI 或 Terraform) 建立管理員或使用者叢集時,叢集會成為指定專案中的 Fleet 成員。

Google Cloud以外的機群成員 (例如 Google Distributed Cloud) 會顯示在機群主專案的控制台中,以及其他機群叢集 (例如 GKE on Google Cloud)。您可透過控制台管理裸機叢集的程度,取決於下列因素:

  • 設定驗證後,即可登入叢集,並查看工作負載和其他詳細資料。

  • 如果已為叢集啟用叢集生命週期管理,您可以使用控制台升級管理員和使用者叢集,也可以使用控制台更新及刪除使用者叢集。如果未啟用這項功能,您只能使用管理工作站上的 bmctl 管理叢集生命週期。

查看已註冊的叢集

主控台的「GKE 叢集」頁面會顯示所有叢集。您不僅可以概覽整個機群,還能查看哪些叢集是由 GKE On-Prem API 管理 (適用於 Google Distributed Cloud)。

如要查看機群叢集,請按照下列步驟操作:

  1. 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。

    前往 GKE 叢集

  2. 選取 Google Cloud 專案。

    • 如果「Type」(類型) 欄顯示「Bare metal」(裸機),表示叢集是由 GKE On-Prem API 管理。請注意,只有管理員和使用者叢集可透過 GKE On-Prem API 管理。

    • 如果「Type」(類型) 欄顯示「External」(外部),表示叢集並非由 GKE On-Prem API 管理。

如要查看叢集的詳細資料,您必須登入並通過叢集的驗證程序。如要這麼做,請按照下列步驟操作:

設定驗證方法

如先前所述,所有叢集都會顯示在控制台的 GKE 叢集頁面。不過,如要查看節點和工作負載等詳細資料 (以及在啟用這項功能後執行叢集生命週期管理工作),您必須登入並通過叢集驗證。如要執行這項操作,您必須使用下列其中一種驗證方法設定叢集:

  • Google 身分:這個選項可讓您使用Google Cloud 身分登入,也就是與帳戶相關聯的電子郵件地址。Google Cloud 如果使用者已透過 Google 身分存取Google Cloud ,請使用這個選項。如果您在控制台中建立叢集,可以使用 Google 身分登入叢集,但必須為其他使用者設定驗證。

    使用 Google 身分登入是控制台最簡單的驗證方法,因此我們在「設定 Google 身分驗證」中詳細說明瞭如何設定。

  • OpenID Connect (OIDC):選取這個選項後,您就能使用第三方 OIDC 識別資訊提供者 (例如 Okta 或 Microsoft AD FS) 的身分,從控制台登入叢集。如果使用者在供應商處已有使用者名稱、密碼和安全性群組成員資格,建議使用這個選項。如要瞭解如何為叢集設定第三方 OIDC 驗證,請參閱下列指南:

  • 不記名權杖:如果上述 Google 提供的解決方案不適合貴機構,您可以設定 Kubernetes 服務帳戶的驗證,並使用該帳戶的不記名權杖登入。詳情請參閱「使用不記名權杖設定」。

授予必要角色

控制台的存取權由 Identity and Access Management (IAM) 控管。如要在控制台中管理叢集生命週期,您需要將某些 IAM 角色授予非專案擁有者的使用者:

  • 如要讓使用者存取主控台,至少需要授予下列角色:

    • roles/container.viewer:使用者可透過這個角色在主控台中查看 GKE 叢集頁面和其他容器資源。如要進一步瞭解這個角色包含的權限,或授予具備讀取和寫入權限的角色,請參閱 IAM 說明文件中的「Kubernetes Engine 角色」。

    • roles/gkehub.viewer:使用者可透過這個角色,在控制台中查看Google Cloud 以外的叢集。如要瞭解這個角色包含的權限,或授予具有讀取和寫入權限的角色,請參閱 IAM 說明文件中的「GKE Hub 角色」。

  • 如要讓使用者在主控台中管理叢集生命週期,請授予 roles/gkeonprem.admin IAM 角色。使用者取得 roles/gkeonprem.admin角色後,即可透過管理控制台,以管理員身分存取 GKE On-Prem API,進而管理叢集生命週期。如要進一步瞭解這個角色包含的權限,請參閱 IAM 說明文件中的「GKE On-Prem 角色」。

下列指令顯示如何授予管理主控台叢集生命週期所需的最低角色:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=MEMBER \
    --role=roles/container.viewer

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=MEMBER \
    --role=roles/gkehub.viewer

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=MEMBER \
    --role=roles/gkeonprem.admin

其中:

  • PROJECT_ID 是機群主專案。如果是使用 bmctl 建立的叢集,這個專案就是您在使用者叢集設定檔的 gkeConnect 區段中設定的專案。如果是透過控制台建立的叢集,這個專案就是您在建立叢集時選擇的專案。

  • MEMBER 是使用者的電子郵件地址,格式為 user:emailID,例如:user:alice@example.com

在控制台中啟用叢集生命週期管理

使用標準工具 (控制台、gcloud CLI 或 Terraform) 建立的管理員和使用者叢集,會自動註冊 GKE On-Prem API,讓您在控制台中執行叢集生命週期管理工作。在 Google Distributed Cloud 1.16 以上版本中,使用 bmctl 建立使用者和管理員叢集時,系統預設會向 GKE On-Prem API 註冊這些叢集。如要在 GKE On-Prem API 中註冊叢集,請按照「設定叢集,以便透過 GKE On-Prem API 管理」一文中的步驟操作。

設定 Google 身分驗證

如要讓使用者透過 Google 帳戶登入叢集,請設定下列項目:

  • 使用者必須具備特定 Identity and Access Management (IAM) 角色,才能在「GKE 叢集」頁面中查看及操作叢集。

  • 使用者必須新增至 Kubernetes 角色型存取權控管 (RBAC) 政策,連線閘道才能使用 Connect 代理程式存取叢集的 Kubernetes API 伺服器。

設定 RBAC 授權

每個叢集的 Kubernetes API 伺服器都必須能夠授權來自控制台的要求。如要設定授權,您必須為每個叢集的使用者設定 Kubernetes 角色型存取權控管 (RBAC) 政策。在下列情況下,您的 Google 帳戶會以管理員身分新增至使用者叢集,並具備完整存取權:

  • 您已在控制台中建立使用者叢集。

  • 您使用 gcloud CLI 建立使用者叢集,且 Google 帳戶是在叢集建立指令的 --admin-users 標記中指定。

  • 您使用 Terraform 建立使用者叢集,並在 authorization.admin_users.username 欄位中指定 Google 帳戶。

  • 您使用 bmctl 建立使用者叢集,並在 clusterSecurity.authorization.clusterAdmin.gcpAccounts 中設定 Google 帳戶。

叢集建立完成後,您可以新增其他管理員。您可以透過下列任一方式授予叢集管理存取權。提供兩種不同的 gcloud 指令。

  • gcloud ... generate-gateway-rbac 指令必須在管理員工作站上執行,因為該指令需要存取叢集的 kubeconfig 和環境 (通常只在管理員工作站上)。您可以使用 generate-gateway-rbac 指令自訂 RBAC 政策,但使用者電子郵件地址不會在控制台的「叢集詳細資料」部分顯示為管理員。

  • 您可以在管理員工作站或任何可存取 GKE On-Prem API 的電腦上執行 gcloud ... update 指令。

請注意,如果您在 Google Cloud 控制台中建立管理員叢集,系統會授予該叢集的唯讀存取權。如要取得 clusterrole/cluster-admin 角色,必須由具備該角色的使用者透過 gcloud ... generate-gateway-rbac 指令新增您。

generate-gateway-rbac

如要將 RBAC 政策套用至使用者,請在管理工作站上執行下列步驟:

  1. 執行下列指令來更新元件 (如有需要):

    gcloud components update
    
  2. 為使用者和服務帳戶產生並套用叢集的 RBAC 政策:

    gcloud container fleet memberships generate-gateway-rbac  \
        --membership=MEMBERSHIP_NAME \
        --role=ROLE \
        --users=USERS \
        --project=PROJECT_ID \
        --kubeconfig=KUBECONFIG_PATH \
        --context=KUBECONFIG_CONTEXT \
        --apply
    

    更改下列內容:

    • MEMBERSHIP_NAME:用於在叢集機群中代表叢集的專屬名稱。在 Google Distributed Cloud 中,成員名稱和叢集名稱相同。
    • ROLE:您要在叢集上授予使用者的 Kubernetes 角色。如要授予使用者叢集中所有命名空間內全部資源的完整存取權,請指定 clusterrole/cluster-admin。如要提供唯讀存取權,請指定 clusterrole/view。如要限制存取權,請建立自訂角色,例如:role/mynamespace/namespace-reader。執行指令前,自訂角色必須已存在。
    • USERS:以半形逗號分隔的清單,列出要授予權限的使用者 (使用者帳戶或服務帳戶) 電子郵件地址。例如: --users=222larabrown@gmail.com,test-acct@test-project.iam.gserviceaccount.com
    • PROJECT_ID:機群主專案的專案 ID。
    • KUBECONFIG_PATH:kubeconfig 檔案的本機路徑,其中包含叢集的項目。
    • KUBECONFIG_CONTEXT:叢集的內容,因為其出現在 kubeconfig 檔案中。如要從指令列取得目前的環境,請執行 kubectl config current-context。無論是否使用目前的環境,請務必執行下列指令,確認環境可存取叢集:

      kubectl get namespaces \
        --kubeconfig=KUBECONFIG_PATH \
        --context=KUBECONFIG_CONTEXT

    執行 gcloud container fleet memberships generate-gateway-rbac 後,輸出內容結尾會顯示類似下列的內容,為了方便閱讀,部分內容已遭截斷:

    Validating input arguments.
    Specified Cluster Role is: clusterrole/cluster-admin
    Generated RBAC policy is:
    --------------------------------------------
    ...
    Applying the generate RBAC policy to cluster with kubeconfig: /usr/local/google/home/foo/.kube/config, context: kind-kind
    Writing RBAC policy for user: foo@example.com to cluster.
    Successfully applied the RBAC policy to cluster.
    

    這是透過連線閘道存取叢集的環境。

    如要進一步瞭解 generate-gateway-rbac 指令,請參閱 gcloud CLI 參考指南

update

  1. 執行下列指令來更新元件:

    gcloud components update
    
  2. 為需要獲派 clusterrole/cluster-admin 角色的每位使用者加入 --admin-users 旗標,然後執行下列指令。 您無法在單一旗標中指定多位使用者。請務必在指令中加入 Google 帳戶,因為指令會使用您在指令中指定的使用者,覆寫授權清單。

    gcloud container bare-metal clusters update USER_CLUSTER_NAME \
      --admin-users YOUR_GOOGLE_ACCOUNT \
      --admin-users ADMIN_GOOGLE_ACCOUNT_1 \
    

除了授予 Kubernetes clusterrole/cluster-admin 角色,這項指令也會授予使用者透過 Connect 閘道存取叢集所需的 RBAC 政策。

bmctl

如要將 RBAC 政策套用至使用者,請在管理工作站上執行下列步驟:

  1. 在叢集設定檔中新增 clusterSecurity.authorization 區段。指定您的電子郵件地址,以及需要管理叢集的其他使用者電子郵件地址。例如:

    ...
    clusterSecurity:
      authorization:
        clusterAdmin:
          gcpAccounts: [alex@example.com,hao@example.com,sasha@example.com]
    ...
    
  2. 更新叢集:

    bmctl update cluster \
        -c CLUSTER_NAME \
        --kubeconfig=KUBECONFIG
    

    進行下列變更:

    • CLUSTER_NAME 替換為要更新的叢集名稱。
    • 如果叢集是自我管理叢集 (例如管理員或獨立叢集),請將 KUBECONFIG 替換為叢集 kubeconfig 檔案的路徑。如果叢集是使用者叢集,請將 KUBECONFIG 替換為管理員叢集的 kubeconfig 檔案路徑。

主控台

如要將 RBAC 政策套用至使用者,請在控制台中執行下列步驟:

  1. 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。

    前往 GKE 叢集

  2. 選取使用者叢集所在的 Google Cloud 專案。

  3. 在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」

  4. 在「授權」部分,按一下「管理員使用者」欄位,然後輸入每位使用者的電子郵件地址。

  5. 使用者新增完畢後,請按一下「完成」

更多資訊