本主題說明如何在 Tanzu Kubernetes Grid 中設定角色型存取控制 (RBAC)。
如果要使用標準的非管理員 kubeconfig
檔案來存取叢集,您必須在啟用及設定身分識別管理後,設定 RBAC 授權。如需 kubeconfig
檔案的詳細資訊,請參閱下面的管理員和非管理員 kubeconfig
檔案。
若要設定 RBAC 授權,請為要使用標準非管理員 kubeconfig
檔案的每個管理叢集和工作負載叢集,建立一或多個角色繫結:
如需角色繫結的詳細資訊,請參閱下面的角色和角色繫結。
kubeconfig
檔案若要授與使用者對管理叢集或工作負載叢集的存取權,您需要產生 kubeconfig
檔案,然後將此檔案提供給這些使用者共用。如果您將叢集的管理員 kubeconfig
提供給他們,他們就具備叢集的完整存取權,而無需進行驗證。但是,如果您提供給使用者的是標準的非管理員 kubeconfig
,則他們在您的 OIDC 或 LDAP 身分識別提供者中必須具有使用者帳戶,且您必須在叢集上設定 RBAC,以便將存取權限授與指定的使用者。
若要為管理叢集或工作負載叢集產生 kubeconfig
檔案,請針對管理叢集執行 tanzu mc kubeconfig get
,或針對工作負載叢集執行 tanzu cluster kubeconfig get
。執行這些命令時,命令的運作方式如下,其中有使用或不使用 --admin
選項:
--admin
,則該命令會產生包含內嵌式認證的管理員 kubeconfig
。當具有此 admin
版本的 kubeconfig
時,您與之共用該檔案的任何使用者都將具備叢集的完整存取權,且會略過身分識別提供者 (IdP) 的驗證。--admin
,則該命令會產生一個標準的非管理員 kubeconfig
,以提示使用者透過外部身分識別提供者進行驗證。之後,身分識別提供者會先驗證使用者的身分識別,然後使用者才能存取叢集的資源。如需有關這些命令的詳細資訊,請參閱:
角色會定義一組權限。您可以建立 Role
,以便在特定命名空間內定義角色,或者建立 ClusterRole
,以定義叢集範圍的角色。若要將該角色中所定義的權限授與使用者或使用者群組,您必須建立角色繫結。
資源 | 範圍 | 說明 |
---|---|---|
Role |
命名空間 | 定義可在命名空間特定的 RoleBinding 中使用的權限。 |
ClusterRole |
叢集 | 定義可在 ClusterRoleBinding 或命名空間特定的 RoleBinding 中使用的權限。 |
RoleBinding |
命名空間 | 授與特定命名空間內的權限。可以參考 Role 或 ClusterRole 。 |
ClusterRoleBinding |
叢集 | 授與叢集中所有命名空間之間的權限。只能參考 ClusterRole 。 |
預設使用者角色包括:
cluster-admin
:對叢集具備完整存取權。當用於 RoleBinding
中時,此角色會授與對繫結中指定命名空間內之任何資源的完整存取權。admin
:對命名空間中大多數資源具備管理員存取權。可以在命名空間內建立及修改角色和角色繫結。edit
:對命名空間中大多數物件 (例如:部署、服務和網繭) 具備讀寫存取權。無法檢視、建立或修改角色和角色繫結。view
:對命名空間中大多數物件具備唯讀存取權。無法檢視、建立或修改角色和角色繫結。如需這些角色的詳細資訊,請參閱 Kubernetes 說明文件中的使用 RBAC 授權。
本節說明如何:
kubeconfig
檔案在您執行 tanzu
和 kubectl
命令的所在機器上,如果存在瀏覽器,則此程序可讓您測試驗證程序的登入步驟。如果機器沒有瀏覽器,請參閱在沒有瀏覽器的機器上驗證使用者。
將管理叢集的標準 kubeconfig
匯出至本機檔案,例如 /tmp/id_mgmt_test_kubeconfig
。請注意,此命令不包含 --admin
選項,因此所匯出的 kubeconfig
是標準 kubeconfig
,而不是 admin
版本。
tanzu mc kubeconfig get --export-file /tmp/id_mgmt_test_kubeconfig
您會看到以下的確認:You can now access the cluster by specifying '--kubeconfig /tmp/id_mgmt_test_kubeconfig' flag when using 'kubectl' command
。
使用新建立的 kubeconfig
檔案來連線至管理叢集:
kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
驗證程序會要求使用者用來連接至叢集的機器上存在瀏覽器,因為執行 kubectl
命令時,會自動開啟 IdP 登入頁面,以便使用者可以登入叢集。您的瀏覽器應會開啟,並顯示 OIDC 提供者的登入頁面或 LDAPS 登入頁面。
LDAPS:
OIDC:
輸入存在於 OIDC 或 LDAP 伺服器中的使用者帳戶的認證。成功登入後,瀏覽器應會顯示:
回到您執行 tanzu
和 kubectl
命令所在的終端機:
如果您已為經過驗證的使用者,在叢集上設定了角色繫結,則會顯示 kubectl get pods -A
的輸出,其中顯示網繭資訊。
如果您未在叢集上設定角色繫結,您會看到一則訊息,指出拒絕使用者帳戶存取網繭:Error from server (Forbidden): pods is forbidden: User "[email protected]" cannot list resource "pods" in API group "" at the cluster scope
。發生這種情況的原因是,使用者已成功通過驗證,但他們尚未獲授權存取叢集上的任何資源。若要授權使用者存取叢集資源,您必須在管理叢集上建立角色繫結,如下所述。
若要授與非管理員使用者對管理叢集的存取權,請產生並散佈 kubeconfig
檔案,如上面的為管理叢集產生和測試非管理員 kubeconfig
檔案所述。若要使此 kubeconfig
正常運作,您必須先在管理叢集上建立角色繫結,以設定 RBAC。此角色繫結會將角色型權限指派給經過驗證的個別使用者或使用者群組。
若要建立角色繫結,請執行下列動作:
請確定您使用的是管理叢集的 admin
內容:
kubectl config current-context
如果內容不是管理叢集 admin
內容,請將 kubectl
設定為使用該內容。例如:
kubectl config use-context id-mgmt-test-admin@id-mgmt-test
列出現有角色:
若要查看命名空間範圍的完整角色清單,請執行:
kubectl get roles --all-namespaces
若要查看叢集範圍的完整角色清單,請執行:
kubectl get clusterroles
若要讓給定使用者與角色產生關聯,請建立角色繫結。
RoleBinding
可以參考 Role
或 ClusterRole
。ClusterRoleBinding
只能參考 ClusterRole
。以下範例是建立一個名為 id-mgmt-test-rb
叢集角色繫結,其會將叢集角色 cluster-admin
繫結至使用者 [email protected]
:
kubectl create clusterrolebinding id-mgmt-test-rb --clusterrole cluster-admin --user [email protected]
對於 --user
,請指定使用者的 OIDC 或 LDAP 使用者名稱。您已在 Tanzu Kubernetes Grid 安裝程式介面的 [身分識別管理 (Identity Management)] 區段中,或藉由設定 LDAP_*
或 OIDC_*
變數,設定了使用者名稱屬性和其他身分識別提供者詳細資料:
OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM
組態變數中。LDAP_USER_SEARCH_NAME_ATTRIBUTE
組態變數中。例如,對於 OIDC,使用者名稱通常是使用者的電子郵件地址。對於 LDAPS,則是 LDAP 使用者名稱,而不是電子郵件地址。
嘗試使用您在先前程序中建立的 kubeconfig
檔案,再次連線至管理叢集:
kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
此時,由於使用者已繫結至此管理叢集上的 cluster-admin
角色,因此應會顯示網繭清單。您可以與在管理叢集上為其設定角色繫結的所有使用者共用產生的 kubeconfig
檔案。
本節說明如何:
kubeconfig
檔案在您執行 tanzu
和 kubectl
命令的所在機器上,如果存在瀏覽器,則此程序可讓您測試驗證程序的登入步驟。如果機器沒有瀏覽器,請參閱在沒有瀏覽器的機器上驗證使用者。
若要驗證工作負載叢集上的使用者,請執行以下步驟:
取得工作負載叢集的標準非管理員 kubeconfig
,並匯出至檔案。以下範例會將叢集 my-cluster
的 kubeconfig
匯出至 my-cluster-kubeconfig
檔案。
tanzu cluster kubeconfig get my-cluster --export-file /tmp/my-cluster-kubeconfig
使用產生的檔案嘗試在叢集上執行作業。例如,執行:
kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
應會將您重新導向至身分識別提供者的登入頁面。使用身分識別提供者所提供的使用者帳戶成功登入後,如果您已為經過驗證的使用者,在叢集上設定了角色繫結,則輸出會顯示網繭資訊。
如果您尚未在叢集上設定角色繫結,則會看到以下訊息:Error from server (Forbidden): pods is forbidden: User "<user>" cannot list resource "pods" in API group "" at the cluster scope
。發生這種情況的原因是,該使用者在叢集上還沒有任何權限。若要授權使用者存取叢集資源,您必須在工作負載叢集上建立角色繫結。
若要完成工作負載叢集的身分識別管理組態,您必須為使用您在上一個步驟中產生的 kubeconfig
的使用者,建立角色繫結。
將 kubectl
內容設定為工作負載叢集的 admin
kubeconfig
。您需要切換至工作負載叢集的 admin
內容,才能建立角色繫結。例如,執行以下兩個命令,以變更為 admin
內容:
取得 kubeconfig
:
tanzu cluster kubeconfig get my-cluster --admin
切換內容:
kubectl config use-context my-cluster-admin@my-cluster
若要檢視現有角色,請執行:
若要查看命名空間範圍的完整角色清單,請執行:
kubectl get roles --all-namespaces
若要查看叢集範圍的完整角色清單,請執行:
kubectl get clusterroles
若要讓給定使用者與角色產生關聯,請建立角色繫結。
RoleBinding
可以參考 Role
或 ClusterRole
。ClusterRoleBinding
只能參考 ClusterRole
。以下範例是建立一個名為 workload-test-rb
叢集角色繫結,其會將叢集角色 cluster-admin
繫結至使用者 [email protected]
:
kubectl create clusterrolebinding workload-test-rb --clusterrole cluster-admin --user [email protected]
對於 --user
,請指定使用者的 OIDC 或 LDAP 使用者名稱。您已在 Tanzu Kubernetes Grid 安裝程式介面的 [身分識別管理 (Identity Management)] 區段中,或藉由設定 LDAP_*
或 OIDC_*
變數,設定了使用者名稱屬性和其他身分識別提供者詳細資料:
OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM
組態變數中。LDAP_USER_SEARCH_NAME_ATTRIBUTE
組態變數中。例如,對於 OIDC,使用者名稱通常是使用者的電子郵件地址。對於 LDAPS,則是 LDAP 使用者名稱,而不是電子郵件地址。
使用您在上面產生的標準 kubeconfig
檔案,嘗試再次於叢集上執行作業。例如,執行:
kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
此時,您應會看到正在工作負載叢集中執行的網繭清單。這是因為 my-cluster-kubeconfig
檔案的使用者已經過您的身分識別提供者的驗證,並在叢集上具有必要的權限。您可以與在叢集上為其設定角色繫結的所有使用者共用 my-cluster-kubeconfig
檔案。
與其他使用者共用產生的 kubeconfig
檔案,以允許他們存取叢集。