L'environnement d'exécution des VM sur GDC gère un large éventail de ressources liées à vos VM. Ces ressources incluent les ressources définies par l'édition Google Kubernetes Engine (GKE) Enterprise, celles définies par KubeVirt et les ressources Kubernetes. L'environnement d'exécution de VM sur GDC utilise le contrôle des accès basé sur les rôles (RBAC) pour définir et appliquer des autorisations pour les ressources gérées. Pour vous aider à utiliser ces ressources et à gérer vos VM, nous vous proposons quatre ClusterRoles préconfigurés:
kubevm.admin
kubevm.edit
kubevm.view
kubevm.cluster.view
Ces rôles intégrés fournissent un modèle d'accès généralisé aux ressources personnalisées liées à l'environnement d'exécution des VM sur GDC. Chaque rôle dispose d'autorisations prédéfinies pour fonctionner sur les ressources. Ce document fournit des informations sur les ressources gérées par l'environnement d'exécution de VM sur GDC afin que les administrateurs de cluster puissent personnaliser leur propre modèle d'accès.
ClusterRoles prédéfinis
Cette section décrit chacun des objets ClusterRole prédéfinis. Ces ClusterRoles ne sont disponibles que lorsque l'environnement d'exécution des VM sur GDC est activé:
- Lorsque l'environnement d'exécution des VM sur GDC est activé, les quatre ClusterRoles prédéfinis sont créés automatiquement.
- Lorsque l'environnement d'exécution des VM sur GDC est désactivé, les quatre ClusterRoles prédéfinis sont supprimés.
Le tableau suivant répertorie les rôles de cluster et les autorisations associées:
Rôle de cluster | Description | Verbes d'accès |
---|---|---|
kubevm.admin |
Accorde un accès complet à toutes les ressources de l'édition Google Kubernetes Engine (GKE) Enterprise. |
|
kubevm.edit |
Accorde un accès en lecture/écriture à toutes les ressources de l'édition Google Kubernetes Engine (GKE) Enterprise. |
|
kubevm.view |
Accorde un accès en lecture à toutes les ressources de l'édition Google Kubernetes Engine (GKE) Enterprise. |
|
kubevm.cluster.view |
Fournit un accès en lecture aux ressources au niveau du cluster. Ce rôle de cluster est nécessaire lorsque le rôle de modification ou de lecture est lié à un espace de noms, et que l'accès aux ressources par cluster est nécessaire. |
|
ClusterRoles agrégés
Les objets ClusterRole kubevm.admin
, kubevm.view
et kubevm.edit
ne sont pas utilisés directement. À la place, ces trois rôles sont agrégés vers les objets ClusterRole admin
, view
et edit
par défaut de Kubernetes, respectivement. Cette agrégation étend les rôles Kubernetes par défaut afin qu'ils puissent être utilisés pour gérer les ressources de Google Kubernetes Engine (GKE) de l'édition Enterprise. Avec les ClusterRoles agrégés, vous pouvez utiliser les rôles par défaut de Kubernetes pour gérer l'accès aux ressources de Google Kubernetes Engine (GKE) Enterprise ou créer vos propres rôles basés sur les ClusterRoles prédéfinis.
Exemple de libellé d'agrégation
Le ClusterRole kubevm.edit
possède le libellé rbac.authorization.k8s.io/aggregate-to-edit: "true"
, qui l'agrège dans le ClusterRole edit
de Kubernetes. Les autorisations de l'objet ClusterRole kubevm.edit
sont accordées au rôle edit
par défaut de Kubernetes. Les objets ClusterRole kubevm.admin
et kubevm.view
sont agrégés de la même manière avec les annotations aggregate-to-admin
ou 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"
...
Scénarios d'utilisation typiques
Les sections suivantes décrivent comment utiliser RoleBinding et ClusterRoleBinding pour accorder à un utilisateur ou à un ensemble d'utilisateurs les autorisations spécifiées dans les objets ClusterRole prédéfinis.
Administrateur de cluster
Pour accorder des autorisations d'administrateur à un utilisateur ou à un ensemble d'utilisateurs, créez un objet ClusterRoleBinding avec le ClusterRole admin
par défaut de Kubernetes.
Exemple de ClusterRoleBinding
L'exemple de clusterRoleBinding admin-charlie
suivant accorde à l'utilisateur les autorisations d'administrateur charlie
. ClusterRoleBinding utilise les autorisations du ClusterRole admin
Kubernetes par défaut, qui inclut les autorisations de l'objet ClusterRole kubevm.admin
prédéfini via l'agrégation.
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
Lecteur de cluster
Pour accorder des autorisations de lecteur à un utilisateur ou à un ensemble d'utilisateurs, créez un objet ClusterRoleBinding avec le rôle ClusterRole view
par défaut de Kubernetes. Consultez la section Exemple de ClusterRoleBinding pour obtenir un exemple de ClusterRoleBinding similaire.
Éditeur de cluster
Pour accorder des autorisations d'éditeur à un utilisateur ou à un ensemble d'utilisateurs, créez un objet ClusterRoleBinding avec le ClusterRole edit
par défaut de Kubernetes. Consultez la section Exemple de ClusterRoleBinding pour obtenir un exemple de ClusterRoleBinding similaire.
Éditeur d'espace de noms
Pour accorder des autorisations d'éditeur d'espace de noms à un utilisateur ou à un ensemble d'utilisateurs, vous devez créer deux liaisons distinctes:
Créez un objet RoleBinding sur l'espace de noms et référencez l'objet ClusterRole Kubernetes par défaut
edit
.Créez un objet ClusterRoleBinding qui référence l'objet ClusterRole
kubevm.cluster.view
prédéfini. Cet objet ClusterRoleBinding est nécessaire, car certaines ressources, telles quevirtualmachinetypes
etstorageclasses
, ne sont pas liées à un espace de noms.
Exemples de liaisons de rôles (éditeur d'espace de noms)
Les exemples de RoleBinding et de ClusterRoleBinding suivants donnent à l'utilisateur charlie
les autorisations d'éditeur pour les ressources de l'espace de noms 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
Lecteur d'espaces de noms
Pour accorder des autorisations de lecteur d'espace de noms à un utilisateur ou à un ensemble d'utilisateurs, vous devez créer deux liaisons distinctes:
Créez un objet RoleBinding sur l'espace de noms et référencez l'objet ClusterRole Kubernetes par défaut
view
.Créez un objet ClusterRoleBinding qui référence l'objet ClusterRole
kubevm.cluster.view
prédéfini.
Consultez la section Exemples de liaison de rôle (éditeur en espace de noms) pour obtenir des exemples d'objets RoleBinding et ClusterRoleBinding similaires.
Ressources utilisées par l'environnement d'exécution des VM sur GDC
Les sections suivantes contiennent des tables de ressources utilisées par l'environnement d'exécution de VM sur GDC. Ces sections sont données uniquement à titre d'information. Si vous envisagez d'utiliser des rôles prédéfinis dans les scénarios d'utilisation types décrits dans les sections précédentes, il n'y a pas d'utilisation spécifique pour ces informations.
Toutefois, si vous ne souhaitez pas utiliser les rôles prédéfinis, vous pouvez utiliser ces informations sur les ressources pour créer vos propres rôles personnalisés.
Ressources définies dans l'édition Google Kubernetes Engine (GKE) Enterprise
Les ClusterRoles prédéfinis se concentrent sur l'accès aux ressources définies par l'édition Google Kubernetes Engine (GKE) Enterprise. Le tableau suivant répertorie les ressources de l'édition Google Kubernetes Engine (GKE) Enterprise et les autorisations d'accès accordées par chacun des ClusterRoles prédéfinis.
Ressource | Généré | Par cluster | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | Complète | Read | Lecture/Écriture | – |
virtualmachinedisks |
– | – | Complète | Read | Lecture/Écriture | – |
virtualmachines |
– | – | Complète | Read | Lecture/Écriture | – |
gpuallocations |
– | – | Complète | Read | Lecture/Écriture | – |
guestenvironmentdata |
Oui | – | Complète | Read | Lecture/Écriture | – |
vmruntimes |
– | Oui | Complète | Read | Lecture/Écriture | Read |
virtualmachinetypes |
– | Oui | Complète | Read | Lecture/Écriture | Read |
vmhighavailabilitypolicies |
– | Oui | Complète | Read | Lecture/Écriture | Read |
networkinterfaces |
Oui | – | Complète | Read | Lecture/Écriture | – |
networks |
– | Oui | Complète | Read | Lecture/Écriture | Read |
Ressources KubeVirt
L'environnement d'exécution des VM sur GDC est basé sur le projet Open Source KubeVirt. Par défaut, les autorisations associées aux ressources KubeVirt sont automatiquement agrégées aux rôles Kubernetes par défaut, à l'instar des ressources gérées de l'édition Google Kubernetes Engine (GKE) Enterprise. Utilisez les informations liées aux ressources du tableau suivant si vous souhaitez créer vos propres rôles personnalisés:
Ressource | Généré | Par cluster |
---|---|---|
virtualmachineinstances /console |
– | – |
virtualmachineinstances /vnc |
– | – |
virtualmachineinstances /portforward |
– | – |
virtualmachineinstances /start |
– | – |
virtualmachineinstances /stop |
– | – |
virtualmachineinstances /restart |
– | – |
virtualmachines |
Oui | – |
virtualmachineinstances |
Oui | – |
datavolumes |
– | – |
storageprofiles |
– | Oui |
cdiconfigs |
– | Oui |
Ressources Kubernetes
Lorsque vous utilisez l'environnement d'exécution des VM sur GDC et sur des VM, vous devrez peut-être gérer l'accès aux ressources Kubernetes suivantes. Utilisez les informations liées aux ressources du tableau suivant si vous souhaitez créer vos propres rôles personnalisés:
Ressource | Généré | Par cluster |
---|---|---|
pods |
Oui | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | Oui |
storageclasses |
– | Oui |
configmaps |
– | – |
Exemples YAML ClusterRole
Vous pouvez récupérer le code YAML des objets ClusterRole à l'aide de la commande kubectl
suivante:
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
Remplacez les éléments suivants :
CLUSTERROLE_NAME
: nom du ClusterRole, par exemplekubevm.cluster.view
.KUBECONFIG_PATH
: chemin d'accès au fichier kubeconfig pour le cluster.
Voici des exemples de résultat de commande pour chacun des quatre ClusterRoles prédéfinis:
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