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.admin
kubevm.edit
kubevm.view
kubevm.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 el tiempo de ejecución de VM 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 los 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 admin
, view
y edit
predeterminados de Kubernetes, 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-charlie
ejemplo 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 de Kubernetes predeterminado.
edit
Crea un ClusterRoleBinding que haga referencia al ClusterRole
kubevm.cluster.view
predefinido. Este ClusterRoleBinding es necesario porque algunos recursos, comovirtualmachinetypes
ystorageclasses
, no tienen un espacio de nombres.
Ejemplos de vinculación de roles (editor con espacio de nombres)
En los siguientes ejemplos de RoleBinding y ClusterRoleBinding se otorgan permisos de charlie
editordefault
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 elementos con 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 de Kubernetes predeterminado.
view
Crea un ClusterRoleBinding que haga referencia al ClusterRole
kubevm.cluster.view
predefinido.
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.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