El entorno de ejecución de máquinas virtuales de GDC gestiona una amplia gama de recursos relacionados con tus máquinas virtuales. Estos recursos incluyen recursos definidos por GKE, recursos definidos por KubeVirt y recursos de Kubernetes. VM Runtime en GDC usa el control de acceso basado en roles (RBAC) para definir y aplicar permisos a los recursos gestionados. Para ayudarte a trabajar con estos recursos y gestionar tus VMs, hemos proporcionado cuatro ClusterRoles preconfigurados:
kubevm.adminkubevm.editkubevm.viewkubevm.cluster.view
Estos roles integrados proporcionan un modelo de acceso generalizado a los recursos personalizados relacionados con el entorno de ejecución de máquinas virtuales en GDC. Cada rol tiene permisos predefinidos para operar en los recursos. En este documento se proporciona información sobre los recursos que gestiona VM Runtime en GDC para que los administradores de clústeres puedan personalizar su propio modelo de acceso.
ClusterRoles predefinidos
En esta sección se describe cada uno de los ClusterRoles predefinidos. Estos ClusterRoles solo están disponibles cuando se habilita VM Runtime en GDC:
- Cuando se habilita VM Runtime en GDC, se crean automáticamente los cuatro ClusterRoles predefinidos.
- Cuando se inhabilita el tiempo de ejecución de VM en GDC, se eliminan los cuatro ClusterRoles predefinidos.
En la siguiente tabla se enumeran los roles de clúster y sus permisos relacionados:
| Rol de clúster | Descripción | Verbos de acceso |
|---|---|---|
kubevm.admin |
Concede acceso completo a todos los recursos de GKE. |
|
kubevm.edit |
Concede acceso de lectura y escritura a todos los recursos de GKE. |
|
kubevm.view |
Concede acceso de lectura a todos los recursos de GKE. |
|
kubevm.cluster.view |
Concede acceso de lectura a los recursos de todo el clúster. Este rol de clúster es necesario cuando el rol de edición o de visualización se vincula a un espacio de nombres y se necesita acceso a recursos de todo el clúster. |
|
Aggregated ClusterRoles
Los ClusterRoles kubevm.admin, kubevm.view y kubevm.edit no se usan directamente. En su lugar, estos tres roles se agregan a los ClusterRoles predeterminados de Kubernetes admin, view y edit, respectivamente. Esta agregación amplía los roles predeterminados de Kubernetes para que se puedan usar para gestionar recursos de GKE. Con los ClusterRoles agregados, puedes usar los roles predeterminados de Kubernetes para gestionar el acceso a los recursos de GKE o crear tus propios roles basados en los ClusterRoles predefinidos.
Etiqueta de agregación de ejemplo
El ClusterRole kubevm.edit tiene la etiqueta rbac.authorization.k8s.io/aggregate-to-edit: "true", que lo agrega al ClusterRole edit de Kubernetes. Los permisos del kubevm.edit
ClusterRole se conceden al rol edit predeterminado de Kubernetes. Los ClusterRoles kubevm.admin
y kubevm.view se agregan de forma similar con las anotaciones 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"
...
Situaciones de usuario habituales
En las siguientes secciones se describe cómo usar RoleBinding y ClusterRoleBinding para conceder los permisos especificados en los ClusterRoles predefinidos a un usuario o a un conjunto de usuarios.
Administrador de clústeres
Para conceder permisos de administrador a un usuario o a un conjunto de usuarios, crea un ClusterRoleBinding con el admin ClusterRole predeterminado de Kubernetes.
Ejemplo de ClusterRoleBinding
El siguiente admin-charlieejemplo de ClusterRoleBinding otorga al usuario charlie
permisos de administrador. ClusterRoleBinding usa los permisos del ClusterRole admin predeterminado de Kubernetes, que incluye los permisos del ClusterRole kubevm.admin predefinido mediante la agregación.
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
Visualizador de clústeres
Para conceder permisos de lectura a un usuario o a un conjunto de usuarios, crea un ClusterRoleBinding con el view ClusterRole predeterminado de Kubernetes. Consulta el ejemplo de ClusterRoleBinding para ver un ejemplo similar.
Editor de clústeres
Para conceder permisos de editor a un usuario o a un conjunto de usuarios, crea un ClusterRoleBinding con el edit ClusterRole predeterminado de Kubernetes. Consulta el ejemplo de ClusterRoleBinding para ver un ejemplo similar.
Editor con espacio de nombres
Para conceder permisos de editor con espacio de nombres a un usuario o a un conjunto de usuarios, debe crear dos enlaces independientes:
Crea un RoleBinding en el espacio de nombres y haz referencia al ClusterRole predeterminado de Kubernetes.
editCrea un ClusterRoleBinding que haga referencia al ClusterRole
kubevm.cluster.viewpredefinido. Este ClusterRoleBinding es necesario porque algunos recursos, comovirtualmachinetypesystorageclasses, no tienen un espacio de nombres.
Ejemplos de vinculaciones de roles (editor con espacio de nombres)
En los siguientes ejemplos de RoleBinding y ClusterRoleBinding se otorgan permisos de charlieeditordefault al usuario para los recursos del espacio de nombres 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
Lector de espacio de nombres
Para conceder permisos de lector con espacio de nombres a un usuario o a un conjunto de usuarios, debe crear dos enlaces independientes:
Crea un RoleBinding en el espacio de nombres y haz referencia al ClusterRole predeterminado de Kubernetes.
viewCrea un ClusterRoleBinding que haga referencia al ClusterRole
kubevm.cluster.viewpredefinido.
Consulta Ejemplos de vinculación de roles (editor con espacio de nombres) para ver ejemplos similares de RoleBinding y ClusterRoleBinding.
Recursos que usa el tiempo de ejecución de máquinas virtuales en GDC
En las siguientes secciones se incluyen tablas de recursos utilizados por VM Runtime en GDC. Estas secciones tienen únicamente fines informativos. Si tiene previsto usar roles predefinidos en los casos de uso típicos descritos en las secciones anteriores, no es necesario que tenga en cuenta esta información.
Sin embargo, si no quieres usar los roles predefinidos, puedes usar esta información para crear tus propios roles personalizados.
Recursos definidos por Google Kubernetes Engine
Los ClusterRoles predefinidos se centran en el acceso a recursos definidos por GKE. En la siguiente tabla se enumeran los recursos de GKE y los permisos de acceso que concede cada uno de los ClusterRoles predefinidos.
| Recurso | Generada | Por clúster | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
|---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | Completo | Leer | Lectura y escritura | – |
virtualmachinedisks |
– | – | Completo | Leer | Lectura y escritura | – |
virtualmachines |
– | – | Completo | Leer | Lectura y escritura | – |
gpuallocations |
– | – | Completo | Leer | Lectura y escritura | – |
guestenvironmentdata |
Sí | – | Completo | Leer | Lectura y escritura | – |
vmruntimes |
– | Sí | Completo | Leer | Lectura y escritura | Leer |
virtualmachinetypes |
– | Sí | Completo | Leer | Lectura y escritura | Leer |
vmhighavailabilitypolicies |
– | Sí | Completo | Leer | Lectura y escritura | Leer |
networkinterfaces |
Sí | – | Completo | Leer | Lectura y escritura | – |
networks |
– | Sí | Completo | Leer | Lectura y escritura | Leer |
Recursos de KubeVirt
El entorno de ejecución de máquinas virtuales de GDC se basa en el proyecto de software libre KubeVirt. De forma predeterminada, los permisos de los recursos de KubeVirt se agregan automáticamente a los roles predeterminados de Kubernetes, de forma similar a los recursos gestionados por GKE. Usa la información de los recursos de la siguiente tabla si quieres crear tus propios roles personalizados:
| Recurso | Generada | Por clúster |
|---|---|---|
virtualmachineinstances/console |
– | – |
virtualmachineinstances/vnc |
– | – |
virtualmachineinstances/portforward |
– | – |
virtualmachineinstances/start |
– | – |
virtualmachineinstances/parada |
– | – |
virtualmachineinstances/reiniciar |
– | – |
virtualmachines |
Sí | – |
virtualmachineinstances |
Sí | – |
datavolumes |
– | – |
storageprofiles |
– | Sí |
cdiconfigs |
– | Sí |
Recursos de Kubernetes
Cuando trabajes con VM Runtime en GDC y máquinas virtuales, puede que tengas que gestionar el acceso a los siguientes recursos de Kubernetes. Utilice la información de recursos de la siguiente tabla si quiere crear sus propios roles personalizados:
| Recurso | Generada | Por clúster |
|---|---|---|
pods |
Sí | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | Sí |
storageclasses |
– | Sí |
configmaps |
– | – |
Ejemplos de YAML de ClusterRole
Puedes obtener el YAML de los ClusterRoles con el siguiente comando kubectl:
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
Haz los cambios siguientes:
CLUSTERROLE_NAME: el nombre del ClusterRole, comokubevm.cluster.view.KUBECONFIG_PATH: la ruta al archivo kubeconfig del clúster.
A continuación, se muestran ejemplos del resultado del comando para cada uno de los cuatro ClusterRoles predefinidos:
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