VM Runtime on GDC utilizza il controllo controllo dell'accesso basato su ruoli (RBAC) per consentirti di impostare e applicare le autorizzazioni ai workload delle macchine virtuali. Queste autorizzazioni gestiscono l'accesso alle risorse definite da GKE, da KubeVirt e alle risorse Kubernetes principali.
Per semplificare la gestione degli accessi, VM Runtime on GDC fornisce ClusterRole preconfigurati per le operazioni di amministrazione, modifica e visualizzazione.
VM Runtime on GDC aggrega automaticamente questi ruoli nei ClusterRole Kubernetes predefiniti admin, edit e view. Per gli scenari con spazi dei nomi, un ruolo kubevm.cluster.view dedicato fornisce l'accesso in lettura alle risorse a livello di cluster. Gli amministratori possono anche utilizzare questi ruoli come modelli per progettare modelli di accesso personalizzati.
ClusterRole predefiniti
Questa sezione descrive ciascuno dei ClusterRole predefiniti. Questi ClusterRole sono disponibili solo quando il runtime VM su GDC è abilitato:
- Quando VM Runtime on GDC è abilitato, vengono creati automaticamente i quattro ClusterRole predefiniti.
- Quando VM Runtime on GDC è disabilitato, i quattro ClusterRole predefiniti vengono eliminati.
La tabella seguente elenca i ruoli del cluster e le relative autorizzazioni:
| Ruolo cluster | Descrizione | Verbi di accesso |
|---|---|---|
kubevm.admin |
Concede l'accesso completo a tutte le risorse GKE. |
|
kubevm.edit |
Concede l'accesso in lettura/scrittura a tutte le risorse GKE. |
|
kubevm.view |
Concede l'accesso in lettura a tutte le risorse GKE. |
|
kubevm.cluster.view |
Concede l'accesso in lettura alle risorse a livello di cluster. Questo ruolo del cluster è necessario quando il ruolo di modifica/visualizzazione è associato a uno spazio dei nomi, mentre è richiesto l'accesso alle risorse a livello di cluster. |
|
ClusterRole aggregati
I ClusterRole kubevm.admin, kubevm.view e kubevm.edit non vengono utilizzati direttamente. Questi tre ruoli vengono invece aggregati rispettivamente ai ClusterRole predefiniti di Kubernetes admin, view e edit. Questa aggregazione estende i ruoli Kubernetes predefiniti in modo che possano essere utilizzati per gestire le risorse GKE. Con i ClusterRole aggregati, puoi utilizzare i ruoli predefiniti di Kubernetes per gestire l'accesso alle risorse GKE o creare i tuoi ruoli in base ai ClusterRole predefiniti.
Esempio di etichetta di aggregazione
Il ClusterRole kubevm.edit ha l'etichetta rbac.authorization.k8s.io/aggregate-to-edit: "true", che lo aggrega al ClusterRole Kubernetes edit. Le autorizzazioni nel ClusterRole kubevm.edit vengono concesse al ruolo edit predefinito di Kubernetes. I ClusterRole kubevm.admin e kubevm.view vengono aggregati in modo simile con le annotazioni aggregate-to-admin o 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"
...
Scenari utente tipici
Le sezioni seguenti descrivono come utilizzare RoleBinding e ClusterRoleBinding per concedere le autorizzazioni specificate nei ClusterRole predefiniti a un utente o a un insieme di utenti.
Amministratore del cluster
Per concedere autorizzazioni amministrative a un utente o a un insieme di utenti, crea un ClusterRoleBinding con il ClusterRole admin predefinito di Kubernetes.
Esempio di ClusterRoleBinding
Il seguente esempio di ClusterRoleBinding admin-charlie concede all'utente charlie le autorizzazioni amministrative. ClusterRoleBinding utilizza le autorizzazioni del ClusterRole Kubernetes predefinito admin, che include le autorizzazioni del ClusterRole predefinito kubevm.admin tramite aggregazione.
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
Visualizzatore cluster
Per concedere le autorizzazioni di visualizzatore a un utente o a un insieme di utenti, crea un ClusterRoleBinding con il ClusterRole view predefinito di Kubernetes. Consulta
Esempio di ClusterRoleBinding per un esempio di ClusterRoleBinding simile.
Cluster editor
Per concedere le autorizzazioni di editor a un utente o a un insieme di utenti, crea un ClusterRoleBinding con il ClusterRole edit predefinito di Kubernetes. Consulta
Esempio di ClusterRoleBinding per un esempio di ClusterRoleBinding simile.
Namespaced editor
Per concedere le autorizzazioni di editor con namespace a un utente o a un insieme di utenti, devi creare due associazioni separate:
Crea un RoleBinding nello spazio dei nomi e fai riferimento al ClusterRole
editpredefinito di Kubernetes.Crea un ClusterRoleBinding che faccia riferimento al ClusterRole
kubevm.cluster.viewpredefinito. Questo ClusterRoleBinding è necessario perché alcune risorse, comevirtualmachinetypesestorageclasses, non hanno uno spazio dei nomi.
Esempi di associazione dei ruoli (editor con spazio dei nomi)
I seguenti esempi di RoleBinding e ClusterRoleBinding concedono all'utente charlie le autorizzazioni di editor per le risorse nello spazio dei nomi 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
Namespaced viewer
Per concedere le autorizzazioni di visualizzatore con namespace a un utente o a un insieme di utenti, devi creare due associazioni separate:
Crea un RoleBinding nello spazio dei nomi e fai riferimento al ClusterRole
viewpredefinito di Kubernetes.Crea un ClusterRoleBinding che faccia riferimento al ClusterRole
kubevm.cluster.viewpredefinito.
Per esempi simili di RoleBinding e ClusterRoleBinding, consulta Esempi di associazione dei ruoli (editor con spazio dei nomi).
Risorse utilizzate dal runtime VM su GDC
Le sezioni seguenti contengono tabelle delle risorse utilizzate dal runtime VM su GDC. Queste sezioni sono solo a scopo informativo. Se prevedi di utilizzare i ruoli predefiniti negli scenari utente tipici descritti nelle sezioni precedenti, queste informazioni non hanno un utilizzo specifico.
Tuttavia, se non vuoi utilizzare i ruoli predefiniti, puoi utilizzare queste informazioni sulle risorse per creare i tuoi ruoli personalizzati.
Risorse definite da Google Kubernetes Engine
I ClusterRole predefiniti si concentrano sull'accesso alle risorse definite da GKE. La tabella seguente elenca le risorse GKE e le autorizzazioni di accesso concesse da ciascuno dei ClusterRole predefiniti.
| Risorsa | Generato | Per cluster | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
|---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | Completa | Leggi | Lettura/scrittura | – |
virtualmachinedisks |
– | – | Completa | Leggi | Lettura/scrittura | – |
virtualmachines |
– | – | Completa | Leggi | Lettura/scrittura | – |
gpuallocations |
– | – | Completa | Leggi | Lettura/scrittura | – |
guestenvironmentdata |
Sì | – | Completa | Leggi | Lettura/scrittura | – |
vmruntimes |
– | Sì | Completa | Leggi | Lettura/scrittura | Leggi |
virtualmachinetypes |
– | Sì | Completa | Leggi | Lettura/scrittura | Leggi |
vmhighavailabilitypolicies |
– | Sì | Completa | Leggi | Lettura/scrittura | Leggi |
networkinterfaces |
Sì | – | Completa | Leggi | Lettura/scrittura | – |
networks |
– | Sì | Completa | Leggi | Lettura/scrittura | Leggi |
Risorse KubeVirt
VM Runtime on GDC si basa sul progetto open source KubeVirt. Per impostazione predefinita, le autorizzazioni per le risorse KubeVirt vengono aggregate automaticamente ai ruoli Kubernetes predefiniti, in modo simile alle risorse gestite da GKE. Utilizza le informazioni sulle risorse nella tabella seguente se vuoi creare ruoli personalizzati:
| Risorsa | Generato | Per cluster |
|---|---|---|
virtualmachineinstances/console |
– | – |
virtualmachineinstances/vnc |
– | – |
virtualmachineinstances/portforward |
– | – |
virtualmachineinstances/start |
– | – |
virtualmachineinstances/fermata |
– | – |
virtualmachineinstances/restart |
– | – |
virtualmachines |
Sì | – |
virtualmachineinstances |
Sì | – |
datavolumes |
– | – |
storageprofiles |
– | Sì |
cdiconfigs |
– | Sì |
Risorse Kubernetes
Quando lavori con VM Runtime on GDC e con le VM, potresti dover gestire l'accesso alle seguenti risorse Kubernetes. Utilizza le informazioni sulle risorse nella tabella seguente se vuoi creare i tuoi ruoli personalizzati:
| Risorsa | Generato | Per cluster |
|---|---|---|
pods |
Sì | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | Sì |
storageclasses |
– | Sì |
configmaps |
– | – |
Esempi YAML di ClusterRole
Puoi recuperare il file YAML per i ClusterRole con il seguente comando kubectl:
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
Sostituisci quanto segue:
CLUSTERROLE_NAME: il nome del ClusterRole, ad esempiokubevm.cluster.view.KUBECONFIG_PATH: il percorso del file kubeconfig del cluster.
Ecco alcuni esempi di output comando per ciascuno dei quattro ClusterRole predefiniti:
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