VM Runtime on GDC verwaltet eine Vielzahl von Ressourcen, die mit Ihren VMs zusammenhängen. Dazu gehören von GKE definierte Ressourcen, von KubeVirt definierte Ressourcen und Kubernetes-Ressourcen. VM Runtime auf GDC verwendet die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC), um Berechtigungen für verwaltete Ressourcen festzulegen und zu erzwingen. Damit Sie diese Ressourcen nutzen und Ihre VMs verwalten können, haben wir vier vorkonfigurierte ClusterRoles bereitgestellt:
kubevm.adminkubevm.editkubevm.viewkubevm.cluster.view
Diese integrierten Rollen bieten ein allgemeines Zugriffsmodell für die benutzerdefinierten Ressourcen, die mit der VM-Laufzeit in GDC zusammenhängen. Jede Rolle hat vordefinierte Berechtigungen für den Zugriff auf die Ressourcen. Dieses Dokument enthält Informationen zu Ressourcen, die von VM Runtime on GDC verwaltet werden, damit Clusteradministratoren ihr eigenes Zugriffsmodell anpassen können.
Vordefinierte ClusterRoles
In diesem Abschnitt werden die einzelnen vordefinierten ClusterRoles beschrieben. Diese ClusterRoles sind nur verfügbar, wenn VM Runtime on GDC aktiviert ist:
- Wenn die VM-Laufzeit auf GDC aktiviert ist, werden die vier vordefinierten ClusterRoles automatisch erstellt.
- Wenn die VM-Laufzeit auf GDC deaktiviert ist, werden die vier vordefinierten ClusterRoles gelöscht.
In der folgenden Tabelle sind die Clusterrollen und die zugehörigen Berechtigungen aufgeführt:
| Clusterrolle | Beschreibung | Zugriffsverben |
|---|---|---|
kubevm.admin |
Gewährt vollständigen Zugriff auf alle GKE-Ressourcen. |
|
kubevm.edit |
Gewährt Lese-/Schreibzugriff auf alle GKE-Ressourcen. |
|
kubevm.view |
Gewährt Lesezugriff auf alle GKE-Ressourcen. |
|
kubevm.cluster.view |
Gewährt Lesezugriff auf clusterbezogene Ressourcen. Diese Clusterrolle ist erforderlich, wenn die Rolle zum Bearbeiten/Anzeigen an einen Namespace gebunden ist, aber Zugriff auf clusterweite Ressourcen benötigt wird. |
|
Aggregierte ClusterRoles
Die ClusterRoles kubevm.admin, kubevm.view und kubevm.edit werden nicht direkt verwendet. Stattdessen werden diese drei Rollen mit den Kubernetes-Standard-ClusterRoles admin, view und edit aggregiert. Durch diese Aggregation werden die Kubernetes-Standardrollen erweitert, sodass sie zum Verwalten von GKE-Ressourcen verwendet werden können. Mit aggregierten ClusterRoles können Sie den Zugriff auf GKE-Ressourcen mithilfe von Kubernetes-Standardrollen verwalten oder eigene Rollen basierend auf den vordefinierten ClusterRoles erstellen.
Beispiel für ein Aggregationslabel
Die ClusterRole kubevm.edit hat das Label rbac.authorization.k8s.io/aggregate-to-edit: "true", wodurch sie mit der Kubernetes-ClusterRole edit aggregiert wird. Die Berechtigungen in der kubevm.edit-ClusterRole werden der Kubernetes-Standardrolle edit gewährt. Die kubevm.admin- und kubevm.view-ClusterRoles werden auf ähnliche Weise mit aggregate-to-admin- oder aggregate-to-view-Anmerkungen aggregiert.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kubevm.edit
labels:
kubevm: kubevm.edit
rbac.authorization.k8s.io/aggregate-to-edit: "true"
...
Typische Nutzerszenarien
In den folgenden Abschnitten wird beschrieben, wie Sie RoleBinding und ClusterRoleBinding verwenden, um einem Nutzer oder einer Gruppe von Nutzern die in den vordefinierten ClusterRoles angegebenen Berechtigungen zu gewähren.
Clusteradministrator
Wenn Sie einem Nutzer oder einer Gruppe von Nutzern Administratorberechtigungen gewähren möchten, erstellen Sie ein ClusterRoleBinding-Objekt mit der Kubernetes-Standard-ClusterRole admin.
Beispiel-ClusterRoleBinding
Das folgende admin-charlie-Beispiel für ClusterRoleBinding gewährt dem Nutzer charlie Administratorberechtigungen. Das ClusterRoleBinding-Objekt verwendet Berechtigungen aus der standardmäßigen Kubernetes-ClusterRole admin, die durch Aggregation Berechtigungen aus der vordefinierten ClusterRole kubevm.admin enthält.
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
Cluster-Viewer
Wenn Sie einem Nutzer oder einer Gruppe von Nutzern Betrachterberechtigungen gewähren möchten, erstellen Sie ein ClusterRoleBinding mit der Kubernetes-Standard-ClusterRole view. Ein ähnliches Beispiel für ClusterRoleBinding finden Sie unter Beispiel-ClusterRoleBinding.
Clustereditor
Wenn Sie einem Nutzer oder einer Gruppe von Nutzern Bearbeitungsberechtigungen gewähren möchten, erstellen Sie ein ClusterRoleBinding-Objekt mit der Kubernetes-Standard-ClusterRole edit. Ein ähnliches Beispiel für ClusterRoleBinding finden Sie unter Beispiel-ClusterRoleBinding.
Namespace-Editor
Wenn Sie einem Nutzer oder einer Gruppe von Nutzern Editorberechtigungen für einen Namespace erteilen möchten, müssen Sie zwei separate Bindungen erstellen:
Erstellen Sie eine RoleBinding für den Namespace und verweisen Sie auf die Kubernetes-Standard-ClusterRole
edit.Erstellen Sie ein ClusterRoleBinding, das auf die vordefinierte ClusterRole
kubevm.cluster.viewverweist. Diese ClusterRoleBinding ist erforderlich, da einige Ressourcen wievirtualmachinetypesundstorageclasseskeinen Namespace haben.
Beispiele für Rollenbindungen (Namespace-Editor)
In den folgenden Beispielen für RoleBinding und ClusterRoleBinding erhält der Nutzer charlie Editorberechtigungen für Ressourcen im Namespace 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
Namespace-Betrachter
Wenn Sie einem Nutzer oder einer Gruppe von Nutzern namensbezogene Betrachterberechtigungen gewähren möchten, müssen Sie zwei separate Bindungen erstellen:
Erstellen Sie eine RoleBinding für den Namespace und verweisen Sie auf die Kubernetes-Standard-ClusterRole
view.Erstellen Sie ein ClusterRoleBinding, das auf die vordefinierte ClusterRole
kubevm.cluster.viewverweist.
Ähnliche Beispiele für RoleBinding und ClusterRoleBinding finden Sie unter Beispiele für Rollenbindungen (Namespace-Editor).
Von VM Runtime on GDC verwendete Ressourcen
In den folgenden Abschnitten finden Sie Tabellen mit Ressourcen, die von VM Runtime on GDC verwendet werden. Diese Abschnitte dienen nur zu Informationszwecken. Wenn Sie planen, vordefinierte Rollen in den typischen Nutzerszenarien zu verwenden, die in den vorherigen Abschnitten beschrieben werden, gibt es keine spezielle Verwendung für diese Informationen.
Wenn Sie die vordefinierten Rollen nicht verwenden möchten, können Sie anhand dieser Ressourceninformationen eigene benutzerdefinierte Rollen erstellen.
Von Google Kubernetes Engine definierte Ressourcen
Die vordefinierten ClusterRoles konzentrieren sich auf den Zugriff auf in GKE definierte Ressourcen. In der folgenden Tabelle sind die GKE-Ressourcen und die Zugriffsrechte aufgeführt, die durch die einzelnen vordefinierten ClusterRoles gewährt werden.
| Ressource | Generiert | Clusterweit | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
|---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | Vollständig | Lesen | Lesen/Schreiben | – |
virtualmachinedisks |
– | – | Vollständig | Lesen | Lesen/Schreiben | – |
virtualmachines |
– | – | Vollständig | Lesen | Lesen/Schreiben | – |
gpuallocations |
– | – | Vollständig | Lesen | Lesen/Schreiben | – |
guestenvironmentdata |
Ja | – | Vollständig | Lesen | Lesen/Schreiben | – |
vmruntimes |
– | Ja | Vollständig | Lesen | Lesen/Schreiben | Lesen |
virtualmachinetypes |
– | Ja | Vollständig | Lesen | Lesen/Schreiben | Lesen |
vmhighavailabilitypolicies |
– | Ja | Vollständig | Lesen | Lesen/Schreiben | Lesen |
networkinterfaces |
Ja | – | Vollständig | Lesen | Lesen/Schreiben | – |
networks |
– | Ja | Vollständig | Lesen | Lesen/Schreiben | Lesen |
KubeVirt-Ressourcen
VM Runtime on GDC basiert auf dem Open-Source-Projekt KubeVirt. Standardmäßig werden die Berechtigungen für die KubeVirt-Ressourcen automatisch in den Kubernetes-Standardrollen zusammengefasst, ähnlich wie bei den von GKE verwalteten Ressourcen. Wenn Sie eigene benutzerdefinierte Rollen erstellen möchten, können Sie die Ressourceninformationen in der folgenden Tabelle verwenden:
| Ressource | Generiert | Clusterweit |
|---|---|---|
virtualmachineinstances/Console |
– | – |
virtualmachineinstances/VNC |
– | – |
virtualmachineinstances/Portweiterleitung |
– | – |
virtualmachineinstances/Starten |
– | – |
virtualmachineinstances/Beenden |
– | – |
virtualmachineinstances/Neu starten |
– | – |
virtualmachines |
Ja | – |
virtualmachineinstances |
Ja | – |
datavolumes |
– | – |
storageprofiles |
– | Ja |
cdiconfigs |
– | Ja |
Kubernetes-Ressourcen
Wenn Sie mit VM Runtime on GDC und VMs arbeiten, müssen Sie möglicherweise den Zugriff auf die folgenden Kubernetes-Ressourcen verwalten. Verwenden Sie die Ressourceninformationen in der folgenden Tabelle, wenn Sie eigene, benutzerdefinierte Rollen erstellen möchten:
| Ressource | Generiert | Clusterweit |
|---|---|---|
pods |
Ja | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | Ja |
storageclasses |
– | Ja |
configmaps |
– | – |
YAML-Beispiele für ClusterRole
Sie können YAML für die ClusterRoles mit dem folgenden kubectl-Befehl abrufen:
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
Ersetzen Sie Folgendes:
CLUSTERROLE_NAME: Der Name der ClusterRole, z. B.kubevm.cluster.view.- Dabei ist
KUBECONFIG_PATHder Pfad der kubeconfig-Datei für den Cluster.
Hier sind Beispiele für die Befehlsausgabe für jede der vier vordefinierten ClusterRoles:
kubevm.adminapiVersion: 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 - deletecollectionkubevm.editapiVersion: 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 - watchkubevm.viewapiVersion: 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 - watchkubevm.cluster.viewapiVersion: 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