O ambiente de execução de VMs no Google Distributed Cloud gerencia uma ampla variedade de recursos relacionados às suas VMs. Eles incluem recursos definidos pelo GKE Enterprise, recursos definidos pelo KubeVirt e recursos do Kubernetes. O ambiente de execução de VMs no Google Distributed Cloud usa o controle de acesso baseado em papéis (RBAC) para definir e aplicar permissões a recursos gerenciados. Para ajudar você a trabalhar com esses recursos e gerenciar suas VMs, fornecemos quatro ClusterRoles pré-configurados:
kubevm.admin
kubevm.edit
kubevm.view
kubevm.cluster.view
Esses papéis integrados fornecem um modelo de acesso generalizado aos recursos personalizados relacionados ao ambiente de execução de VMs no Google Distributed Cloud. Cada papel tem permissões predefinidas para operar nos recursos. Neste documento, fornecemos informações sobre os recursos que o ambiente de execução de VMs no Google Distributed Cloud gerencia para que os administradores de clusters possam personalizar o próprio modelo de acesso.
ClusterRoles predefinidos
Nesta seção, descrevemos cada um dos ClusterRoles predefinidos. Esses ClusterRoles ficam disponíveis apenas quando o ambiente de execução de VMs no Google Distributed Cloud é ativado:
- Quando o ambiente de execução de VMs no Google Distributed Cloud é ativado, os quatro ClusterRoles predefinidos são criados automaticamente.
- Quando o ambiente de execução de VMs no Google Distributed Cloud é desativado, os quatro ClusterRoles predefinidos são excluídos.
A tabela a seguir lista os papéis do cluster e as permissões relacionadas a eles:
Função do cluster | Descrição | Verbos de acesso |
---|---|---|
kubevm.admin |
Concede acesso total a todos os recursos do GKE Enterprise. |
|
kubevm.edit |
Concede acesso de leitura/gravação a todos os recursos do GKE Enterprise. |
|
kubevm.view |
Concede acesso de leitura a todos os recursos do GKE Enterprise. |
|
kubevm.cluster.view |
Concede acesso de leitura a recursos do cluster. Essa função de cluster é necessária quando a função de edição/visualização está vinculada a um namespace, enquanto o acesso a recursos do cluster é necessário. |
|
ClusterRoles agregados
Os ClusterRoles kubevm.admin
, kubevm.view
e kubevm.edit
não são usados
diretamente. Em vez disso, esses três papéis são agregados aos ClusterRoles padrão admin
, view
e edit
do Kubernetes, respectivamente. Essa agregação estende
os papéis padrão do Kubernetes para que possam ser usados no gerenciamento de recursos do
GKE Enterprise. Com ClusterRoles agregados, você pode usar papéis padrão do Kubernetes para gerenciar o acesso a recursos do GKE Enterprise ou criar seus próprios papéis com base nos ClusterRoles predefinidos.
Exemplo de rótulo de agregação
O ClusterRole kubevm.edit
tem o rótulo
rbac.authorization.k8s.io/aggregate-to-edit: "true"
, que o agrega ao
ClusterRole edit
do Kubernetes. As permissões do ClusterRole kubevm.edit
são concedidas à função edit
padrão do Kubernetes. Os ClusterRoles kubevm.admin
e kubevm.view
são agregados de maneira semelhante às
anotações 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"
...
Cenários típicos de usuários
As seções a seguir descrevem como usar RoleBinding e ClusterRoleBinding para conceder as permissões especificadas nos ClusterRoles predefinidos a um usuário ou a um conjunto de usuários.
Administrador de clusters
Para conceder permissões de administrador a um usuário ou conjunto de usuários, crie um
ClusterRoleBinding com o ClusterRole admin
padrão do Kubernetes.
ClusterRoleBinding de exemplo
O exemplo de ClusterRoleBinding admin-charlie
a seguir fornece permissões de administrador charlie
ao usuário. O ClusterRoleBinding usa permissões do ClusterRole admin
padrão do Kubernetes, que inclui permissões do ClusterRole kubevm.admin
predefinido por agregação.
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
Leitor de cluster
Para conceder permissões de leitor a um usuário ou conjunto de usuários, crie um
ClusterRoleBinding com o ClusterRole view
padrão do Kubernetes. Consulte ClusterRoleBinding de exemplo para ver um exemplo de ClusterRoleBinding.
Editor de cluster
Para conceder permissões de edição a um usuário ou a um conjunto de usuários, crie um
ClusterRoleBinding com o ClusterRole edit
padrão do Kubernetes. Consulte ClusterRoleBinding de exemplo para ver um exemplo de ClusterRoleBinding.
Editor com namespace
Para conceder permissões de editor com namespace a um usuário ou a um conjunto de usuários, você precisa criar duas vinculações separadas:
Crie um "RoleBinding" no namespace e faça referência ao ClusterRole
edit
padrão do Kubernetes.Crie um ClusterRoleBinding que faça referência ao ClusterRole
kubevm.cluster.view
predefinido. Esse ClusterRoleBinding é necessário porque alguns recursos, comovirtualmachinetypes
estorageclasses
, não são namespaces.
Exemplos de vinculação de funções (editor com namespace)
Os seguintes exemplos de RoleBinding e ClusterRoleBinding oferecem ao usuáriocharlie
permissões de editor para recursos no 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
Leitor com namespace
Para conceder permissões de leitor com namespace a um usuário ou a um conjunto de usuários, você precisa criar duas vinculações separadas:
Crie um "RoleBinding" no namespace e faça referência ao ClusterRole
view
padrão do Kubernetes.Crie um ClusterRoleBinding que faça referência ao ClusterRole
kubevm.cluster.view
predefinido.
Consulte Exemplos de vinculação de papéis (editor de namespace) para exemplos semelhantes de RoleBinding e ClusterRoleBinding.
Recursos usados pelo ambiente de execução de VMs no Google Distributed Cloud
As seções a seguir contêm tabelas de recursos usados pelo ambiente de execução de VMs no Google Distributed Cloud. Essas seções são apenas para fins informativos. Se você pretende usar funções predefinidas nos cenários comuns de usuário descritos nas seções anteriores, não há uso específico para essas informações.
No entanto, se você não quiser usar os papéis predefinidos, use essas informações dos recursos para criar seus próprios papéis personalizados.
Recursos definidos pelo GKE Enterprise
Os ClusterRoles predefinidos se concentram no acesso aos recursos definidos pelo GKE Enterprise. A tabela a seguir lista os recursos do GKE Enterprise e as permissões de acesso concedidas por cada um dos ClusterRoles predefinidos.
Recurso | Gerado | Em relação ao cluster | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | Completa | Ler | Leitura/gravação | – |
virtualmachinedisks |
– | – | Completa | Ler | Leitura/gravação | – |
virtualmachines |
– | – | Completa | Ler | Leitura/gravação | – |
gpuallocations |
– | – | Completa | Ler | Leitura/gravação | – |
guestenvironmentdata |
Sim | – | Completa | Ler | Leitura/gravação | – |
vmruntimes |
– | Sim | Completa | Ler | Leitura/gravação | Ler |
virtualmachinetypes |
– | Sim | Completa | Ler | Leitura/gravação | Ler |
vmhighavailabilitypolicies |
– | Sim | Completa | Ler | Leitura/gravação | Ler |
networkinterfaces |
Sim | – | Completa | Ler | Leitura/gravação | – |
networks |
– | Sim | Completa | Ler | Leitura/gravação | Ler |
Recursos do KubeVirt
O ambiente de execução de VMs no Google Distributed Cloud é baseado no projeto de código aberto KubeVirt. Por padrão, as permissões dos recursos do KubeVirt são agregadas automaticamente aos papéis padrão do Kubernetes, semelhantes aos recursos gerenciados pelo GKE Enterprise. Use as informações do recurso na tabela a seguir se quiser criar os próprios papéis personalizados:
Recurso | Gerado | Em relação ao cluster |
---|---|---|
virtualmachineinstances /console |
– | – |
virtualmachineinstances /vnc |
– | – |
virtualmachineinstances /portforward |
– | – |
virtualmachineinstances /start |
– | – |
virtualmachineinstances /stop |
– | – |
virtualmachineinstances /restart |
– | – |
virtualmachines |
Sim | – |
virtualmachineinstances |
Sim | – |
datavolumes |
– | – |
storageprofiles |
– | Sim |
cdiconfigs |
– | Sim |
Recursos do Kubernetes
Quando você trabalha com o ambiente de execução de VMs no Google Distributed Cloud e em VMs, pode ser necessário gerenciar o acesso aos seguintes recursos do Kubernetes. Use as informações do recurso na tabela a seguir se quiser criar os próprios papéis personalizados:
Recurso | Gerado | Em relação ao cluster |
---|---|---|
pods |
Sim | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | Sim |
storageclasses |
– | Sim |
configmaps |
– | – |
Exemplos de YAML do ClusterRole
É possível recuperar YAML para os ClusterRoles com o seguinte comando kubectl
:
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
Substitua:
CLUSTERROLE_NAME
: o nome do ClusterRole, comokubevm.cluster.view
.KUBECONFIG_PATH
: o caminho do arquivo kubeconfig do cluster.
Veja abaixo exemplos de resposta ao comando para cada um dos quatro 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