1.3. 安全策略


了解 OpenShift Virtualization 安全和授权。

关键点

  • OpenShift Virtualization 遵循 restricted Kubernetes pod security standards 配置集,旨在强制实施 Pod 安全性的当前最佳实践。
  • 虚拟机 (VM) 工作负载作为非特权 pod 运行。
  • kubevirt-controller 服务帐户定义 安全性上下文约束 (SCC)。
  • OpenShift Virtualization 组件的 TLS 证书会被更新并自动轮转。

1.3.1. 关于工作负载安全性

默认情况下,虚拟机 (VM) 工作负载在 OpenShift Virtualization 中不会使用 root 权限运行,且支持的 OpenShift Virtualization 功能都不需要 root 权限。

对于每个虚拟机,都会有一个 virt-launcher pod,它以会话模式(session mode)运行一个 libvirt 实例,用于管理 VM 进程。在会话模式中,libvirt 守护进程是以非 root 用户帐户运行的,它只允许来自使用同一用户标识符 (UID) 运行的客户端的连接。这样,虚拟机就可以作为非特权 pod 运行,遵循了最小特权的安全原则。

1.3.2. TLS 证书

OpenShift Virtualization 组件的 TLS 证书会被自动更新并轮转。您不需要手动刷新它们。

自动续订调度

TLS 证书会根据以下调度被自动删除并替换:

  • KubeVirt 证书每天都会被更新。
  • Containerized Data Importer controller (CDI) 证书每 15 天更新一次。
  • MAC 池证书每年更新一次。

自动 TLS 证书轮转不会影响任何操作。例如,以下操作可在没有任何中断的情况下继续工作:

  • 迁移
  • 镜像上传
  • VNC 和控制台连接

1.3.3. 授权

OpenShift Virtualization 使用基于角色的访问控制 (RBAC )为人类用户和服务帐户定义权限。为服务帐户定义的权限用于控制 OpenShift Virtualization 组件可以执行的操作。

您还可以使用 RBAC 角色来管理用户对虚拟化功能的访问。例如,管理员可以创建一个 RBAC 角色,它提供启动虚拟机所需的权限。然后,管理员可以通过将角色绑定到特定用户来限制访问权限。

1.3.3.1. OpenShift Virtualization 的默认集群角色

通过使用集群角色聚合,OpenShift Virtualization 会扩展默认的 OpenShift Container Platform 集群角色,使其包含访问虚拟化对象的权限。

Expand
表 1.1. OpenShift Virtualization 集群角色
默认集群角色OpenShift Virtualization 集群角色OpenShift Virtualization 集群角色描述

view

kubevirt.io:view

此用户可以查看集群中的所有 OpenShift Virtualization 资源,但不能创建、删除、修改或访问它们。例如,用户可以看到虚拟机 (VM) 正在运行,但不能将其关闭或访问其控制台。

edit

kubevirt.io:edit

可以修改集群中的所有 OpenShift Virtualization 资源。例如,用户可以创建虚拟机、访问虚拟机控制台和删除虚拟机。

admin

kubevirt.io:admin

具有所有 OpenShift Virtualization 资源的完整权限,包括删除资源集合。用户也可以查看和修改 OpenShift Virtualization 运行时配置,该配置位于 openshift-cnv 命名空间中的 HyperConverged 自定义资源中。

为 Containerized Data Importer (CDI) 授予以下权限,包括 cdi-operatorcdi-controller 服务帐户。

1.3.3.2.1. 集群范围的 RBAC 角色
Expand
表 1.2. cdi.kubevirt.io API 组的聚合集群角色
CDI 集群角色ResourcesVerbs

cdi.kubevirt.io:admin

datavolumes, uploadtokenrequests

* (all)

dataVolumes/source

create

cdi.kubevirt.io:edit

datavolumes, uploadtokenrequests

*

dataVolumes/source

create

cdi.kubevirt.io:view

cdiconfigs, dataimportcrons, datasources, datavolumes, objecttransfers, storageprofiles, volumeimportsources, volumeuploadsources, volumeclonesources

get, list, watch

dataVolumes/source

create

cdi.kubevirt.io:config-reader

cdiconfigs, storageprofiles

get, list, watch

Expand
表 1.3. cdi-operator 服务帐户的集群范围角色
API 组ResourcesVerbs

rbac.authorization.k8s.io

clusterrolebindings, clusterroles

get, list, watch, create, update, delete

security.openshift.io

securitycontextconstraints

get, list, watch, update, create

apiextensions.k8s.io

customresourcedefinitions, customresourcedefinitions/status

get, list, watch, create, update, delete

cdi.kubevirt.io

*

*

upload.cdi.kubevirt.io

*

*

admissionregistration.k8s.io

validatingwebhookconfigurations, mutatingwebhookconfigurations

create, list, watch

admissionregistration.k8s.io

validatingwebhookconfigurations

允许列表:cdi-api-dataimportcron-validate, cdi-api-populator-validate, cdi-api-datavolume-validate, cdi-api-validate, objecttransfer-api-validate

get, update, delete

admissionregistration.k8s.io

mutatingwebhookconfigurations

允许列表:cdi-api-datavolume-mutate

get, update, delete

apiregistration.k8s.io

apiservices

get, list, watch, create, update, delete

Expand
表 1.4. cdi-controller 服务帐户的集群范围角色
API 组ResourcesVerbs

"" (core)

events

create, patch

"" (core)

persistentvolumeclaims

get, list, watch, create, update, delete, deletecollection, patch

"" (core)

persistentvolumes

get, list, watch, update

"" (core)

persistentvolumeclaims/finalizers, pods/finalizers

update

"" (core)

pods, services

get, list, watch, create, delete

"" (core)

configmaps

get, create

storage.k8s.io

storageclasses, csidrivers

get, list, watch

config.openshift.io

proxies

get, list, watch

cdi.kubevirt.io

*

*

snapshot.storage.k8s.io

volumesnapshots, volumesnapshotclasses, volumesnapshotcontents

get, list, watch, create, delete

snapshot.storage.k8s.io

volumesnapshots

update, deletecollection

apiextensions.k8s.io

customresourcedefinitions

get, list, watch

scheduling.k8s.io

priorityclasses

get, list, watch

image.openshift.io

imagestreams

get, list, watch

"" (core)

secrets

create

kubevirt.io

virtualmachines/finalizers

update

1.3.3.2.2. 命名空间的 RBAC 角色
Expand
表 1.5. cdi-operator 服务帐户的命名空间角色
API 组ResourcesVerbs

rbac.authorization.k8s.io

rolebindings, roles

get, list, watch, create, update, delete

"" (core)

serviceaccounts, configmaps, events, secrets, services

get, list, watch, create, update, patch, delete

apps

deployments, deployments/finalizers

get, list, watch, create, update, delete

route.openshift.io

routes, routes/custom-host

get,list,watch,create,update

config.openshift.io

proxies

get, list, watch

monitoring.coreos.com

servicemonitors, prometheusrules

get, list, watch, create, delete, update, patch

coordination.k8s.io

leases

get, create, update

Expand
表 1.6. cdi-controller 服务帐户的命名空间角色
API 组ResourcesVerbs

"" (core)

configmaps

get, list, watch, create, update, delete

"" (core)

secrets

get, list, watch

batch

cronjobs

get, list, watch, create, update, delete

batch

jobs

create, delete, list, watch

coordination.k8s.io

leases

get, create, update

networking.k8s.io

ingresses

get, list, watch

route.openshift.io

Routes

get, list, watch

Pod 的安全上下文约束(SCC)控制权限。这些权限包括 Pod(容器集合)可以执行的操作以及它们可以访问的资源。您可以使用 SCC 定义 Pod 运行必须满足的一组条件,以便其能被系统接受。

virt-controller 是一个集群控制器,可为集群中的虚拟机创建 virt-launcher pod。

注意

默认情况下,virt-launcher pod 使用命名空间中的 default 服务帐户运行。如果您的合规控制需要唯一的服务帐户,请为虚拟机分配一个。此设置适用于 VirtualMachineInstance 对象和 virt-launcher pod。

kubevirt-controller 服务帐户被授予额外的 SCC 和 Linux 功能,以便能够创建具有适当权限的 virt-launcher Pod。这些扩展权限允许虚拟机使用超出典型 pod 范围的 OpenShift Virtualization 功能。

kubevirt-controller 服务帐户被授予以下 SCC:

  • scc.AllowHostDirVolumePlugin = true
    这允许虚拟机使用 hostpath 卷插件。
  • scc.AllowPrivilegedContainer = false
    可确保 virt-launcher pod 没有作为特权容器运行。
  • scc.AllowedCapabilities = []corev1.Capability{"SYS_NICE", "NET_BIND_SERVICE"}

    • SYS_NICE 允许设置 CPU 关联性。
    • NET_BIND_SERVICE 允许 DHCP 和 Slirp 操作。

查看 kubevirt-controller 的 SCC 和 RBAC 定义

您可以使用 oc 工具查看 kubevirt-controllerSecurityContextConstraints 定义:

$ oc get scc kubevirt-controller -o yaml
Copy to Clipboard Toggle word wrap

您可以使用 oc 工具查看 kubevirt-controller clusterrole 的 RBAC 定义:

$ oc get clusterrole kubevirt-controller -o yaml
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat