GDC 上的 VM Runtime 可管理與 VM 相關的各種資源。這些資源包括 GKE 定義的資源、KubeVirt 定義的資源,以及 Kubernetes 資源。GDC 上的 VM 執行階段會使用角色型存取權控管 (RBAC),設定及強制執行受管理資源的權限。為協助您使用這些資源及管理 VM,我們提供了四個預先設定的 ClusterRole:
kubevm.admin
kubevm.edit
kubevm.view
kubevm.cluster.view
這些內建角色提供與 GDC VM Runtime 相關自訂資源的一般存取模型。每個角色都具有預先建立的權限,可對資源執行作業。本文提供 VM Runtime on GDC 管理的資源相關資訊,方便叢集管理員自訂存取模式。
預先定義的 ClusterRole
本節將說明每個預先定義的 ClusterRole。只有在啟用 VM Runtime on GDC 時,才能使用這些 ClusterRole:
- 啟用 GDC 上的 VM 執行階段時,系統會自動建立四個預先定義的 ClusterRole。
- 停用 GDC 上的 VM Runtime 時,系統會刪除四個預先定義的 ClusterRole。
下表列出叢集角色及其相關權限:
叢集角色 | 說明 | 存取動詞 |
---|---|---|
kubevm.admin |
具備所有 GKE 資源的完整存取權。 |
|
kubevm.edit |
可讀取/寫入所有 GKE 資源。 |
|
kubevm.view |
可讀取所有 GKE 資源。 |
|
kubevm.cluster.view |
可讀取叢集資源。如果編輯/檢視角色繫結至命名空間,但需要存取叢集資源,則必須使用這個叢集角色。 |
|
匯總 ClusterRole
kubevm.admin
、kubevm.view
和 kubevm.edit
ClusterRole 不會直接使用,這三種角色會分別匯總至 Kubernetes 預設的 admin
、view
和 edit
ClusterRole。這項彙整作業會擴充預設 Kubernetes 角色,以便管理 GKE 資源。透過匯總的 ClusterRole,您可以使用 Kubernetes 預設角色管理 GKE 資源的存取權,或根據預先定義的 ClusterRole 建立自己的角色。
匯總標籤範例
kubevm.edit
ClusterRole 具有 rbac.authorization.k8s.io/aggregate-to-edit: "true"
標籤,可將其匯總至 Kubernetes edit
ClusterRole。kubevm.edit
ClusterRole 中的權限會授予 Kubernetes 預設edit
角色。kubevm.admin
和 kubevm.view
ClusterRole 會以類似方式,透過 aggregate-to-admin
或 aggregate-to-view
註解彙整。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kubevm.edit
labels:
kubevm: kubevm.edit
rbac.authorization.k8s.io/aggregate-to-edit: "true"
...
常見使用者情境
以下各節說明如何使用 RoleBinding 和 ClusterRoleBinding,將預先定義 ClusterRole 中指定的權限授予使用者或一組使用者。
叢集管理員
如要授予使用者或使用者群組管理員權限,請使用 Kubernetes 預設的 admin
ClusterRole 建立 ClusterRoleBinding。
ClusterRoleBinding 範例
下列 admin-charlie
範例 ClusterRoleBinding 會授予使用者 charlie
管理員權限。ClusterRoleBinding 會使用預設 Kubernetes admin
ClusterRole 的權限,包括透過彙整從預先定義的 kubevm.admin
ClusterRole 取得的權限。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-charlie
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: charlie
叢集檢視器
如要授予使用者或使用者群組檢視者權限,請使用 Kubernetes 預設的 view
ClusterRole 建立 ClusterRoleBinding。如需類似的 ClusterRoleBinding 範例,請參閱「ClusterRoleBinding 範例」。
叢集編輯者
如要將編輯者權限授予使用者或一組使用者,請使用 Kubernetes 預設 edit
ClusterRole 建立 ClusterRoleBinding。如需類似的 ClusterRoleBinding 範例,請參閱「ClusterRoleBinding 範例」。
命名空間編輯器
如要將命名空間編輯者權限授予使用者或一組使用者,您需要建立兩個不同的繫結:
在命名空間中建立 RoleBinding,並參照預設的 Kubernetes
edit
ClusterRole。建立參照預先定義
kubevm.cluster.view
ClusterRole 的 ClusterRoleBinding。由於部分資源 (例如virtualmachinetypes
和storageclasses
) 不屬於命名空間,因此需要這個 ClusterRoleBinding。
角色繫結範例 (命名空間編輯器)
下列 RoleBinding 和 ClusterRoleBinding 範例會授予使用者 charlie
default
命名空間中資源的編輯者權限:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: edit-charlie
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: edit
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: charlie
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubevm-cluster-view-charlie
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kubevm.cluster.view
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: charlie
命名空間檢視者
如要將命名空間檢視者權限授予使用者或一組使用者,您需要建立兩個不同的繫結:
在命名空間中建立 RoleBinding,並參照預設的 Kubernetes
view
ClusterRole。建立參照預先定義
kubevm.cluster.view
ClusterRole 的 ClusterRoleBinding。
如需類似的 RoleBinding 和 ClusterRoleBinding 範例,請參閱角色繫結範例 (命名空間編輯器)。
VM Runtime on GDC 使用的資源
以下各節包含 GDC 上 VM Runtime 使用的資源表。這些章節僅供參考。 如果您打算在上述章節所述的典型使用者情境中使用預先定義的角色,這項資訊就沒有特定用途。
不過,如果您不想使用預先定義的角色,可以利用這項資源資訊建立自訂角色。
Google Kubernetes Engine 定義的資源
預先定義的 ClusterRole 主要著重於存取 GKE 定義的資源。下表列出 GKE 資源,以及各預先定義 ClusterRole 授予的存取權。
資源 | 已產生 | 叢集層級 | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | 完整 | 讀取 | 讀取/寫入 | – |
virtualmachinedisks |
– | – | 完整 | 讀取 | 讀取/寫入 | – |
virtualmachines |
– | – | 完整 | 讀取 | 讀取/寫入 | – |
gpuallocations |
– | – | 完整 | 讀取 | 讀取/寫入 | – |
guestenvironmentdata |
是 | – | 完整 | 讀取 | 讀取/寫入 | – |
vmruntimes |
– | 是 | 完整 | 讀取 | 讀取/寫入 | 讀取 |
virtualmachinetypes |
– | 是 | 完整 | 讀取 | 讀取/寫入 | 讀取 |
vmhighavailabilitypolicies |
– | 是 | 完整 | 讀取 | 讀取/寫入 | 讀取 |
networkinterfaces |
是 | – | 完整 | 讀取 | 讀取/寫入 | – |
networks |
– | 是 | 完整 | 讀取 | 讀取/寫入 | 讀取 |
KubeVirt 資源
GDC 上的 VM Runtime 是以 KubeVirt 開放原始碼專案為基礎。根據預設,系統會自動將 KubeVirt 資源的權限彙整至預設 Kubernetes 角色,與 GKE 管理的資源類似。如要建立自訂角色,請使用下表中的資源資訊:
資源 | 已產生 | 叢集層級 |
---|---|---|
virtualmachineinstances /console |
– | – |
virtualmachineinstances /vnc |
– | – |
virtualmachineinstances /portforward |
– | – |
virtualmachineinstances /start |
– | – |
virtualmachineinstances /站 |
– | – |
virtualmachineinstances /restart |
– | – |
virtualmachines |
是 | – |
virtualmachineinstances |
是 | – |
datavolumes |
– | – |
storageprofiles |
– | 是 |
cdiconfigs |
– | 是 |
Kubernetes 資源
在 GDC 和 VM 上使用 VM 執行階段時,您可能需要管理下列 Kubernetes 資源的存取權。如要建立自訂角色,請使用下表中的資源資訊:
資源 | 已產生 | 叢集層級 |
---|---|---|
pods |
是 | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | 是 |
storageclasses |
– | 是 |
configmaps |
– | – |
ClusterRole YAML 範例
您可以使用下列 kubectl
指令,擷取 ClusterRole 的 YAML:
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
更改下列內容:
CLUSTERROLE_NAME
:ClusterRole 的名稱,例如kubevm.cluster.view
。KUBECONFIG_PATH
:叢集 kubeconfig 檔案的路徑。
以下是四個預先定義的 ClusterRole 的指令輸出範例:
kubevm.admin
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.admin rbac.authorization.k8s.io/aggregate-to-admin: "true" name: kubevm.admin resourceVersion: "16654950" uid: 3296c279-6e85-4ea6-b250-548bf0c3e935 rules: - apiGroups: - vm.cluster.gke.io resources: - virtualmachineaccessrequests - virtualmachinedisks - virtualmachines - gpuallocations - guestenvironmentdata - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - delete - create - update - patch - list - watch - deletecollection - apiGroups: - networking.gke.io resources: - networkinterfaces - networks verbs: - get - delete - create - update - patch - list - watch - deletecollection
kubevm.edit
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.edit rbac.authorization.k8s.io/aggregate-to-edit: "true" name: kubevm.edit resourceVersion: "16654951" uid: 237bf9ae-b2c8-4303-94dc-e6425a2df331 rules: - apiGroups: - vm.cluster.gke.io resources: - virtualmachineaccessrequests - virtualmachinedisks - virtualmachines - gpuallocations - guestenvironmentdata - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - delete - create - update - patch - list - watch - apiGroups: - networking.gke.io resources: - networkinterfaces - networks verbs: - get - delete - create - update - patch - list - watch
kubevm.view
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.view rbac.authorization.k8s.io/aggregate-to-view: "true" name: kubevm.view resourceVersion: "16654953" uid: b5b54e2d-0097-4698-abbd-aeac212d0a34 rules: - apiGroups: - vm.cluster.gke.io resources: - virtualmachineaccessrequests - virtualmachinedisks - virtualmachines - gpuallocations - guestenvironmentdata - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - list - watch - apiGroups: - networking.gke.io resources: - networkinterfaces - networks verbs: - get - list - watch
kubevm.cluster.view
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.cluster.view name: kubevm.cluster.view resourceVersion: "16654956" uid: b25dde64-67da-488b-81d2-1a08f9a4a7c1 rules: - apiGroups: - vm.cluster.gke.io resources: - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - list - watch - apiGroups: - networking.gke.io resources: - networks verbs: - get - list - watch