VM Runtime on GDC 管理与虚拟机相关的各种资源。这些资源包括 Google Kubernetes Engine (GKE) Enterprise 版本定义的资源、KubeVirt 定义的资源和 Kubernetes 资源。VM Runtime on GDC 使用基于角色的访问权限控制 (RBAC) 设置和强制执行代管式资源的权限。为了帮助您处理这些资源并管理虚拟机,我们提供了四个预先配置的 ClusterRole:
kubevm.admin
kubevm.edit
kubevm.view
kubevm.cluster.view
这些内置角色提供对与 VM Runtime on GDC 相关的自定义资源的通用访问模型。每个角色都有预先确定的资源操作权限。本文档提供有关 VM Runtime on GDC 管理的资源的信息,以便集群管理员可以自定义自己的访问模型。
预定义的 ClusterRole
本部分介绍每个预定义的 ClusterRole。只有在启用 VM Runtime on GDC 后,这些 ClusterRole 才可用:
- 启用 GDC 上的 VM 运行时后,系统会自动创建四个预定义的 ClusterRole。
- 停用 VM Runtime on GDC 后,系统会删除四个预定义的 ClusterRole。
下表列出了集群角色及其相关权限:
集群角色 | 说明 | 访问动词 |
---|---|---|
kubevm.admin |
授予对所有 Google Kubernetes Engine (GKE) Enterprise 版资源的完整访问权限。 |
|
kubevm.edit |
授予对所有 Google Kubernetes Engine (GKE) Enterprise 版资源的读写权限。 |
|
kubevm.view |
授予对所有 Google Kubernetes Engine (GKE) Enterprise 版本资源的读取权限。 |
|
kubevm.cluster.view |
授予对集群级资源的读取权限。如果修改/查看角色绑定到命名空间,但需要访问集群级资源,则需要此集群角色。 |
|
聚合的 ClusterRole
kubevm.admin
、kubevm.view
和 kubevm.edit
集群角色不直接使用。这三个角色会分别聚合到 Kubernetes 默认的 admin
、view
和 edit
集群角色。此聚合扩展了默认 Kubernetes 角色,以便用于管理 Google Kubernetes Engine (GKE) Enterprise 版本资源。借助聚合 ClusterRole,您可以使用 Kubernetes 默认角色来管理对 Google Kubernetes Engine (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 GDC 使用的资源
以下部分包含 VM Runtime on GDC 使用的资源表。这些部分仅供参考。如果您打算在前面部分介绍的典型用户场景中使用预定义的角色,则此信息没有特定用途。
但是,如果您不想使用预定义的角色,则可以使用此资源信息创建您自己的自定义角色。
Google Kubernetes Engine (GKE) Enterprise 版本定义的资源
预定义的 ClusterRole 侧重于对 Google Kubernetes Engine (GKE) Enterprise 版本定义的资源的访问权限。下表列出了 Google Kubernetes Engine (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 GDC 基于 KubeVirt 开源项目。默认情况下,KubeVirt 资源的权限会自动聚合到默认的 Kubernetes 角色,类似于 Google Kubernetes Engine (GKE) Enterprise 版本管理的资源。如果您想创建自己的自定义角色,请使用下表中的资源信息:
资源 | 已生成 | 集群级 |
---|---|---|
virtualmachineinstances /console |
– | – |
virtualmachineinstances /vnc |
– | – |
virtualmachineinstances /portforward |
– | – |
virtualmachineinstances /start |
– | – |
virtualmachineinstances /stop |
– | – |
virtualmachineinstances /restart |
– | – |
virtualmachines |
是 | – |
virtualmachineinstances |
是 | – |
datavolumes |
– | – |
storageprofiles |
– | 是 |
cdiconfigs |
– | 是 |
Kubernetes 资源
使用 GDC 和虚拟机上的 VM Runtime 时,您可能需要管理对以下 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