使用不記名權杖進行驗證
本頁面說明如何使用不記名權杖登入 Google Cloud以外的已註冊叢集,設定驗證。設定完成後,叢集管理員就能從Google Cloud 控制台登入叢集。支援 Kubernetes 驗證中指定的許多不記名憑證。最簡單的方式是在叢集中建立 Kubernetes 服務帳戶 (KSA),然後使用其不記名憑證登入。
其他驗證方法
除了使用不記名權杖設定驗證之外,您也可以根據貴機構的需求,設定下列其中一種驗證方法:
Google 身分,可讓使用者透過 Google Cloud 身分登入。如果使用者已透過 Google 帳戶存取 Google Cloud ,請使用這個選項。
如果叢集已設定為使用 OIDC 識別資訊提供者,您可以使用此方法從 Google Cloud 控制台向叢集進行驗證。如要瞭解如何為 GKE 叢集設定 OIDC,請參閱下列指南:
- 使用 OIDC 設定 GKE Identity Service 的叢集。本指南說明如何為所有 GKE 叢集類型,逐一設定叢集的 OIDC 驗證。
- 為機群設定 GKE Identity Service。 這個選項可讓您為支援的叢集類型,在機群層級設定 OIDC。機群層級設定適用於Google Cloud上的 GKE 叢集、所有 GKE 叢集類型,以及 AWS 上的 EKS 連接叢集。
如果 Google 提供的驗證方法不適合貴機構,請按照本頁面的操作說明,使用不記名權杖設定驗證。
透過 Google Cloud 控制台授予 IAM 角色以取得存取權
如要使用 Google Cloud 控制台查看已連線的叢集,使用者至少需要下列 IAM 角色:
roles/container.viewer
。使用者可透過這個角色在 Google Cloud 控制台中查看容器資源,包括 GKE 叢集頁面。如要進一步瞭解這個角色包含的權限,請參閱 IAM 說明文件中的「Kubernetes Engine 角色」。roles/gkehub.viewer
。使用者可透過這個角色,在 Google Cloud 控制台中查看Google Cloud 外部的叢集。如果機群不含外部叢集,使用者就不需要這個角色 Google Cloud。如要進一步瞭解這個角色包含的權限,請參閱 IAM 說明文件中的「GKE Hub 角色」。
執行下列指令來授予這些角色:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/gkehub.viewer
更改下列內容:
PROJECT_ID
:機群主機專案的專案 ID。EMAIL_ADDRESS
:與使用者 Google Cloud 帳戶相關聯的電子郵件地址。
如要進一步瞭解如何授予 IAM 角色,請參閱 IAM 說明文件中的「管理專案、資料夾和機構的存取權」。
設定角色型存取權控管
叢集存取權是透過 Kubernetes 角色型存取權控管 (RBAC) 機制控管。
建議您或叢集管理員為登入叢集的每位使用者建立 KSA。使用不記名權杖就像使用密碼,因此每位使用者都應擁有自己的帳戶。以 KSA 的不記名憑證登入時,所有作業都會以 KSA 身分執行,且僅限於 KSA 持有的 RBAC 角色。
如要透過主控台存取叢集,KSA 至少須在叢集中擁有下列 RBAC 角色:
建立及套用 cloud-console-reader
RBAC 角色
如要透過 Google Cloud 控制台
存取叢集資源,經過驗證的使用者必須具備相關的 Kubernetes 權限。如果您不想授予這些使用者更廣泛的權限 (例如叢集管理員權限),可以建立自訂 RBAC 角色,其中包含查看叢集節點、永久磁碟區、Pod 和儲存空間類別所需的最低權限。您可以在叢集中建立 ClusterRole
RBAC 資源 cloud-console-reader
,定義這組權限。
cloud-console-reader
會授予使用者叢集節點、永久磁碟區、Pod 和儲存空間類別的 get
、list
和 watch
權限,讓使用者查看這些資源的詳細資料。
kubectl
如要建立 cloud-console-reader
ClusterRole
並套用至叢集,請執行下列指令:
cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cloud-console-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml
接著,請按照下一節的說明,將這個角色授予 KSA。
建立並授權 KSA
kubectl
如要建立 KSA 並將權限繫結至該 KSA,請按照下列步驟操作:
建立 KSA 和
ClusterRoleBinding
資源,將view
和cloud-console-reader
Kubernetes RBACClusterRoles
繫結至 KSA:KSA_NAME=KSA_NAME kubectl create serviceaccount ${KSA_NAME} kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${KSA_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}
更改下列內容:
KSA_NAME
:您為 KSA 選擇的名稱VIEW_BINDING_NAME
:您為view
ClusterRoleBinding
資源選擇的名稱;您可以為其命名,但以 KSA 命名可能最簡單CLOUD_CONSOLE_READER_BINDING_NAME
:您為cloud-console-reader
ClusterRoleBinding
資源選擇的名稱;您也可以為這個資源指定任何名稱
視服務帳戶應有的存取權而定,將其他角色繫結至 KSA。如需相關選項,請參閱 Kubernetes 預設角色。
舉例來說,如果您想從 Cloud Marketplace 部署 Kubernetes 應用程式,請將
cluster-admin
角色繫結至 KSA:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:KSA_NAME
將
BINDING_NAME
替換為服務帳戶的叢集角色繫結名稱。
授權其他帳戶
kubectl
如要讓其他使用者或服務帳戶存取叢集,請建立 ClusterRoleBinding
資源,將 view
和 cloud-console-reader
角色繫結至他們的帳戶:
繫結
view
和cloud-console-reader
ClusterRoles
:ACCOUNT_NAME=ACCOUNT_NAME kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${ACCOUNT_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}
更改下列內容:
ACCOUNT_NAME
:Kubernetes 服務帳戶VIEW_BINDING_NAME
:您為view
ClusterRoleBinding
資源選擇的名稱;您可以為其指定任何名稱,但以使用者或服務帳戶命名可能最簡單CLOUD_CONSOLE_READER_BINDING_NAME
:您為view
ClusterRoleBinding
資源選擇的名稱;您也可以將此資源命名為任何名稱
視帳戶應有的存取權,繫結其他角色。如需相關選項,請參閱 Kubernetes 預設角色。
舉例來說,如要繫結
cluster-admin
角色,請執行下列指令:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
將
BINDING_NAME
替換為服務帳戶的叢集角色繫結名稱。
取得 KSA 的不記名憑證
kubectl
若要取得 KSA 的不記名憑證,請執行下列指令︰
SECRET_NAME=KSA_NAME-token kubectl apply -f - << __EOF__ apiVersion: v1 kind: Secret metadata: name: "${SECRET_NAME}" annotations: kubernetes.io/service-account.name: "${KSA_NAME}" type: kubernetes.io/service-account-token __EOF__ until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do echo "waiting for token..." >&2; sleep 1; done kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode
將 KSA_NAME
替換成您為 KSA 選擇的名稱。
從該指令的輸出複製憑證並加以儲存,供使用者登入 Google Cloud 控制台。