VM Runtime on Google Distributed Cloud 管理着与您的虚拟机相关的各种资源。这些资源包括 GKE Enterprise 定义的资源、KubeVirt 定义的资源和 Kubernetes 资源。VM Runtime on Google Distributed Cloud 使用基于角色的访问权限控制 (RBAC) 设置和强制执行代管式资源的权限。为了帮助您处理这些资源并管理虚拟机,我们提供了四个预先配置的 ClusterRole:
kubevm.admin
kubevm.edit
kubevm.view
kubevm.cluster.view
这些内置角色提供了与 VM Runtime on Google Distributed Cloud 相关的自定义资源的通用访问模型。每个角色都有预先确定的资源操作权限。本文档提供有关 VM Runtime on Google Distributed Cloud 管理的资源的信息,以便集群管理员可以自定义自己的访问模型。
预定义的 ClusterRole
本部分介绍每个预定义的 ClusterRole。只有在启用 VM Runtime on Google Distributed Cloud 后,这些 ClusterRole 才可用:
- 启用 VM Runtime on Google Distributed Cloud 后,系统会自动创建四个预定义的 ClusterRole。
- 停用 VM Runtime on Google Distributed Cloud 后,系统会删除四个预定义的 ClusterRole。
下表列出了集群角色及其相关权限:
集群角色 | 说明 | 访问动词 |
---|---|---|
kubevm.admin |
授予对所有 GKE Enterprise 资源的完整访问权限。 |
|
kubevm.edit |
授予对所有 GKE Enterprise 资源的读写权限。 |
|
kubevm.view |
授予对所有 GKE Enterprise 资源的读取权限。 |
|
kubevm.cluster.view |
授予对集群级资源的读取权限。如果修改/查看角色绑定到命名空间,但需要访问集群级资源,则需要此集群角色。 |
|
聚合的 ClusterRole
kubevm.admin
、kubevm.view
和 kubevm.edit
集群角色不直接使用。这三个角色会分别聚合到 Kubernetes 默认的 admin
、view
和 edit
集群角色。此聚合扩展了默认 Kubernetes 角色,以便用于管理 GKE Enterprise 资源。借助聚合 ClusterRole,您可以使用 Kubernetes 默认角色来管理对 GKE Enterprise 资源的访问权限,或根据预定义的 ClusterRole 创建自己的角色。
聚合标签示例
kubevm.edit
ClusterRole 具有 rbac.authorization.k8s.io/aggregate-to-edit: "true"
标签,它会将其聚合到 Kubernetes edit
ClusterRole。kubevm.edit
ClusterRole 中的权限授予 Kubernetes 默认 edit
角色。kubevm.admin
和 kubevm.view
ClusterRole 通过 aggregate-to-admin
或 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"
...
典型用户场景
以下部分介绍了如何使用 RoleBinding 和 ClusterRoleBinding 将预定义 ClusterRole 中指定的权限授予一个用户或一组用户。
集群管理员
如需将管理员权限授予一个用户或一组用户,请使用 Kubernetes 默认的 admin
ClusterRole 创建 ClusterRoleBinding。
ClusterRoleBinding 示例
以下 admin-charlie
示例 ClusterRoleBinding 为用户提供 charlie
管理员权限。ClusterRoleBinding 使用 Kubernetes 默认的 admin
ClusterRole 的权限,其中包括通过聚合来自预定义的 kubevm.admin
ClusterRole 的权限。
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
集群查看者
如需将查看者权限授予一个用户或一组用户,请使用 Kubernetes 默认的 view
ClusterRole 创建 ClusterRoleBinding。如需查看类似的 ClusterRoleBinding 示例,请参阅示例 ClusterRoleBinding。
集群编辑者
如需将编辑者权限授予一个用户或一组用户,请使用 Kubernetes 默认的 edit
ClusterRole 创建 ClusterRoleBinding。如需查看类似的 ClusterRoleBinding 示例,请参阅示例 ClusterRoleBinding。
已处理命名空间编辑者
如需将已处理命名空间编辑者权限授予一个用户或一组用户,您需要创建两个单独的绑定:
在命名空间上创建 RoleBinding,并引用 Kubernetes 默认的
edit
ClusterRole。创建一个引用预定义的
kubevm.cluster.view
ClusterRole 的 ClusterRoleBinding。需要此 ClusterRoleBinding,因为某些资源(如virtualmachinetypes
和storageclasses
)未进行命名空间处理。
角色绑定示例(已处理命名空间编辑者)
以下 RoleBinding 和 ClusterRoleBinding 示例为用户授予 default
命名空间中资源的 charlie
编辑者权限:
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
已处理命名空间查看者
如需将已处理命名空间查看者权限授予一个用户或一组用户,您需要创建两个单独的绑定:
在命名空间上创建 RoleBinding,并引用 Kubernetes 默认的
view
ClusterRole。创建一个引用预定义的
kubevm.cluster.view
ClusterRole 的 ClusterRoleBinding。
如需了解类似的 RoleBinding 和 ClusterRoleBinding 示例,请参阅角色绑定示例(已处理命名空间编辑者)。
VM Runtime on Google Distributed Cloud 使用的资源
以下部分包含 VM Runtime on Google Distributed Cloud 使用的资源表。这些部分仅供参考。如果您打算在前面部分介绍的典型用户场景中使用预定义的角色,则此信息没有特定用途。
但是,如果您不想使用预定义的角色,则可以使用此资源信息创建您自己的自定义角色。
GKE Enterprise 定义的资源
预定义的 ClusterRole 侧重于对 GKE Enterprise 定义的资源的访问权限。下表列出了 GKE Enterprise 资源以及每个预定义 ClusterRole 授予的访问权限。
资源 | 已生成 | 集群级 | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | 完整 | 读取 | 读写 | – |
virtualmachinedisks |
– | – | 完整 | 读取 | 读写 | – |
virtualmachines |
– | – | 完整 | 读取 | 读写 | – |
gpuallocations |
– | – | 完整 | 读取 | 读写 | – |
guestenvironmentdata |
是 | – | 完整 | 读取 | 读写 | – |
vmruntimes |
– | 是 | 完整 | 读取 | 读写 | 读取 |
virtualmachinetypes |
– | 是 | 完整 | 读取 | 读写 | 读取 |
vmhighavailabilitypolicies |
– | 是 | 完整 | 读取 | 读写 | 读取 |
networkinterfaces |
是 | – | 完整 | 读取 | 读写 | – |
networks |
– | 是 | 完整 | 读取 | 读写 | 读取 |
KubeVirt 资源
VM Runtime on Google Distributed Cloud 基于 KubeVirt 开源项目。默认情况下,KubeVirt 资源的权限会自动聚合到默认的 Kubernetes 角色,类似于 GKE Enterprise 管理的资源。如果您想创建自己的自定义角色,请使用下表中的资源信息:
资源 | 已生成 | 集群级 |
---|---|---|
virtualmachineinstances /console |
– | – |
virtualmachineinstances /vnc |
– | – |
virtualmachineinstances /portforward |
– | – |
virtualmachineinstances /start |
– | – |
virtualmachineinstances /stop |
– | – |
virtualmachineinstances /restart |
– | – |
virtualmachines |
是 | – |
virtualmachineinstances |
是 | – |
datavolumes |
– | – |
storageprofiles |
– | 是 |
cdiconfigs |
– | 是 |
Kubernetes 资源
使用 VM Runtime on Google Distributed Cloud 和虚拟机时,您可能需要管理对以下 Kubernetes 资源的访问权限。如果您想创建自己的自定义角色,请使用下表中的资源信息:
资源 | 已生成 | 集群级 |
---|---|---|
pods |
是 | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | 是 |
storageclasses |
– | 是 |
configmaps |
– | – |
ClusterRole YAML 示例
您可以使用以下 kubectl
命令检索 ClusterRole 的 YAML:
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
替换以下内容:
CLUSTERROLE_NAME
:ClusterRole 的名称,例如kubevm.cluster.view
。KUBECONFIG_PATH
:集群的 kubeconfig 文件的路径。
以下是针对四个预定义的 ClusterRole 中每一个 ClusterRole 的命令输出的示例:
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