O Anthos VM Runtime gerencia uma ampla variedade de recursos relacionados às VMs. Isso inclui recursos definidos pelo Anthos, recursos definidos pelo KubeVirt e recursos do Kubernetes. O Anthos VM Runtime usa 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 oferecem um modelo de acesso generalizado nos recursos personalizados relacionados ao ambiente de execução da VM do Anthos. Cada papel tem permissões predefinidas para operar nos recursos. Neste documento, apresentamos informações sobre os recursos que o Anthos VM Runtime 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 estão disponíveis apenas quando o Anthos VM Runtime está ativado:
- Quando o Anthos VM Runtime está ativado, os quatro ClusterRoles predefinidos são criados automaticamente.
- Quando o Anthos VM Runtime está 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:
Papel do cluster | Descrição | Verbos de acesso |
---|---|---|
kubevm.admin |
Concede acesso total a todos os recursos do Anthos. |
|
kubevm.edit |
Concede acesso de leitura/gravação a todos os recursos do Anthos. |
|
kubevm.view |
Concede acesso de leitura a todos os recursos do Anthos. |
|
kubevm.cluster.view |
Concede acesso de leitura a recursos do cluster. Esse papel de cluster é necessário quando o papel de edição/visualização está vinculado a um namespace, enquanto o acesso a recursos no 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 para gerenciar os recursos do Anthos. Com
ClusterRoles agregados,
você pode usar papéis padrão do Kubernetes para gerenciar o acesso a recursos do Anthos
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 no ClusterRole kubevm.edit
são concedidas ao papel 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 papéis (editor de namespaces)
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 Anthos VM Runtime
As seções a seguir contêm tabelas de recursos usados pelo Anthos VM Runtime. Essas seções são apenas para fins informativos. Se você pretende usar papéis predefinidos nos cenários típicos 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 Anthos
Os ClusterRoles predefinidos focam no acesso a recursos definidos pelo Anthos. A tabela a seguir lista os recursos do Anthos 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 da VM do Anthos é 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 Anthos. 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
Ao trabalhar com o Anthos VM Runtime e as VMs, talvez seja 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