使能机密虚拟机热迁移
机密虚拟机热迁移特性指在不同的服务器间迁移正在运行的机密虚拟机。

- 机密虚拟机不支持设备直通场景热迁移,暂不支持SVE热迁移,QEMU侧暂不支持开启autostart。
- 机密虚拟机热迁移要求源端服务器和对端服务器网络在同一网段,具有完全相同的CPU配置(型号、核数、主频、sysreg flag),并使用共享存储池存储机密虚拟机镜像。
- 机密虚拟机规格限制:待迁移虚拟机vCPU数量小于等于32,内存小于等于512GB, 若虚拟机存在多个vNuma,则除最后一个vNuma外,其他vNuma内存要求1GB对齐。
- 本章节将待迁移虚拟机的服务器称为源端服务器,待迁入虚拟机的服务器称为对端服务器。使能机密虚拟机热迁移服务需在两台服务器启动两个机密虚拟机并进行远程证明。完成一次机密虚拟机热迁移,需启动源端服务器migcvm机密虚拟机、对端服务器migcvm机密虚拟机、源端服务器待迁移机密虚拟机。
- migcvm机密虚拟机受可信任第三方控制,用于运行migcvm-agent对源端和对端远程证明以及密钥交换。
- 在源端和对端服务器上,为migvm机密虚拟机的QEMU XML配置文件添加migvm-cap=migvm参数,以启用migvm机密迁移功能,并指定Vsock和Cid用于通信。
<qemu:commandline> <qemu:arg value='-object'/> <qemu:arg value='tmm-guest,id=tmm0,sve-vector-length=128,num-pmu-counters=1,migvm-cap=migvm'/> </qemu:commandline><vsock model='virtio'> <cid auto='no' address='8'/> </vsock>其中,cid address参数可由云管平台任意分配,因Host Kernel是2,为了不让虚拟机的Cid与系统冲突所以平台分配的Cid都会大于2。
- 配置完成后,参考配置机密虚拟机启动migvm虚拟机。
- 下载virtCCA-SDK,安装到migvm,获取源端服务器RIM值和对端服务器RIM值,可参考使能远程证明gen_rim_ref工具,获得该RIM值。
- 拉取组织仓master分支代码。
git clone https://gitee.com/openeuler/virtCCA_sdk.git --depth 10
- 参考Gitcode编译和安装依赖(环境已有QCBOR,t_cose,libcbor则可以忽略)。
cd migcvm-agent/ git clone https://github.com/inclavare-containers/rats-tls.git cd rats-tls git reset --hard 40f7b78403d75d13b1a372c769b2600f62b02692 git apply ../../attestation/rats-tls/*.patch bash build.sh -s -r -c -v gcc cp -rf output/lib/rats-tls /usr/lib/ cp -rfL output/lib/rats-tls/librats_tls.so.0 /lib64/ cd - bash ./build.sh #将编译产物migcvm-agent放入mig-cvm cp build/migcvm-agent ${CVM_PATH}/home/ - 在migcvm-agent同目录上部署证书,具体操作步骤请参见使能远程证明。
- 拉取组织仓master分支代码。
- 迁移前进行远程证明,需保证源端和对端RIM值应一致。
- 进入源端虚拟机,校验对端服务器RIM值。
virsh console migvm-src cd ${CVM_PATH}/home ./migcvm-agent -s <本端migcvm虚拟机监听ip> -c <远端migcvm监听ip> -r <MigCVM的RIM值> - 进入对端服务器migvm虚拟机,校验源端服务器RIM值。
virsh console migvm-dst cd ${CVM_PATH}/home ./migcvm-agent -s <本端migcvm虚拟机监听ip> -c <远端migcvm监听ip> -r <MigCVM的RIM值>
- 进入源端虚拟机,校验对端服务器RIM值。
- 为启用迁移功能,可在源端服务器的QEMU启动参数中添加virtcca-migration-cap=1。
<qemu:commandline> <qemu:arg value='-object'/> <qemu:arg value='tmm-guest,id=tmm0,sve-vector-length=128,num-pmu-counters=1,virtcca-migration-cap=1'/> </qemu:commandline> - 启动待迁移的虚拟机。
virsh start <cvm-name>
cvm-name为待迁移虚拟机名称。
- 执行以下命令进行机密虚拟机热迁移。
virsh migrate --live <cvm-name> qemu+ssh://<dest-ip>/system
其中:
- cvm-name为待迁移虚拟机名称。
- dest-ip为对端服务器的IP地址。
父主题: 使用特性