鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

OpenStack机密虚拟机白名单特性

本章节主要说明OpenStack支持机密虚拟机的白名单特性相关使用说明以及黑名单特性。

OpenStack使能机密虚拟机显式支持以下特性。

  • 机密虚拟机创建、启动、强制关闭和删除
  • 配置机密虚拟机vCPU绑核和NUMA拓扑
  • 虚拟机信息查询
  • 虚拟机事件上报
  • 管理虚拟磁盘和光驱
  • 虚拟串口
  • 虚拟网卡
  • 虚拟机冷迁移和撤离

OpenStack使能机密虚拟机禁用以下特性。

  • 虚拟机挂起/恢复
  • 虚拟机休眠/唤醒
  • 虚拟机重启
  • 虚拟机热迁移
  • 虚拟机快照
  • 设置虚拟时间、设置rtc时钟补偿速度
  • 虚拟机安全启动
  • vCPU热插拔、内存热插拔
  • 内存复用、内存Qos、CPU Qos

OpenStack暂不支持vCPU热插拔、内存热插拔、内存Qos特性,无需屏蔽。

机密虚拟机创建、启动、强制关闭和删除

  1. 创建机密虚拟机对应的flavor。
    openstack flavor create cca-flavor --vcpus 4 --ram 8192 --disk 50 \
    --property trait:HW_CPU_AARCH64_HISI_VIRTCCA=required \
    --property sw:qemu_cmdline="tmm-guest,id=tmm0,num-pmu-counters=1" \
    --property hw:mem_secure=true

    可通过添加特性"--property sw:swiotlb='${swiotlb_mb}'"来指示机密虚拟机swiotlb的大小,该设置仅用于指示OpenStack该机密虚拟机所占用的非安全内存资源,不影响机密虚拟机实际占用的非安全内存大小。要求${swiotlb_mb}值大于0且与64M对齐。若未添加该参数,则默认占用128M。

    openstack flavor create cca-flavor --vcpus 4 --ram 8192 --disk 50 \
    --property trait:HW_CPU_AARCH64_HISI_VIRTCCA=required \
    --property sw:swiotlb='${swiotlb_mb}'
    --property sw:qemu_cmdline="tmm-guest,id=tmm0,num-pmu-counters=1" \
    --property hw:mem_secure=true
  2. 创建机密虚拟机。
    openstack server create --image openEuler-image --flavor cca-flavor --network public-network cca-server
  3. 强制关闭机密虚拟机。
    openstack server stop cca-server
  4. 启动机密虚拟机。
    openstack server start cca-server
  5. 删除机密虚拟机。
    openstack server delete cca-server

配置机密虚拟机vCPU绑核和NUMA拓扑

  1. 修改计算节点配置文件“/etc/nova/nova.conf” ,设置计算节点的绑核CPU范围。
    [compute]
    cpu_dedicated_set = "0-63"
    cpu_shared_set = "64-127"
    • 若未配置cpu_dedicated_set,则OpenStack无法创建绑核虚拟机。
    • 若仅配置cpu_dedicated_set,则OpenStack仅允许从该项指定范围的CPU集合内部署绑核虚拟机,且无法部署不绑核虚拟机。
    • 同时配置cpu_dedicated_set和cpu_shared_set ,则OpenStack能同时部署绑核和不绑核虚拟机,绑核虚拟机从cpu_dedicated_set集合内选择CPU绑定部署,不绑核虚拟机从cpu_shared_set选择CPU部署。
  2. 修改控制节点配置文件“/etc/nova/nova.conf” ,配置filter_scheduler,在enabled_filters选项中追加过滤器NUMATopologyFilter。
    [filter_scheduler]
    enabled_filters = ...,NUMATopologyFilter
    available_filters = nova.scheduler.filters.all_filters
  3. 创建具备绑核和NUMA拓扑属性的flavor,本示例创建了一个4核4个NUMA节点的机密虚拟机,其中每个NUMA分配了2048M内存,分别绑定了一个CPU。
    openstack flavor create cca-numa-flavor --vcpus 4 --ram 8192 --disk 50 \
    --property hw:numa_nodes='4' \
    --property hw:numa_mem.0=2048 \
    --property hw:numa_mem.1=2048 \
    --property hw:numa_mem.2=2048 \
    --property hw:numa_mem.3=2048 \
    --property hw:numa_cpus.0="0" \
    --property hw:numa_cpus.1="1" \
    --property hw:numa_cpus.2="2" \
    --property hw:numa_cpus.3="3" \
    --property hw:cpu_policy='dedicated' \
    --property trait:HW_CPU_AARCH64_HISI_VIRTCCA=required \
    --property sw:qemu_cmdline="tmm-guest,id=tmm0,num-pmu-counters=1" \
    --property hw:mem_secure=true

    绑核和配置NUMA拓扑需同时设置,否则在创建虚拟机阶段会报错失败。

  4. 使用3创建的flavor创建虚拟机。
    openstack server create --image openEuler-image --flavor cca-numa-flavor --network public-network cca-num-server

虚拟机信息查询

  1. 查看所有已部署虚拟机的信息。
    openstack server list
  2. 查看指定虚拟机详细信息。
    openstack server show cca-server
  3. 查看安全内存信息。
    1. 获取计算节点ID。
      openstack resource provider list

    2. 根据节点ID查看资源库存,其中包含安全内存信息。
      openstack resource provider inventory list ${resource_provider_id}

    3. 查看资源使用情况,SECURE_NUMA_x不支持实时查看资源占用情况。
      openstack resource provider usage show ${resource_provider_id}

      当前基于inventory表实时刷新安全NUMA内存资源信息,现有inventory表刷新机制存在更新代次差异导致的刷新报错信息,不影响资源更新功能,属于正常现象。

虚拟磁盘管理

  1. 创建空白卷,size选项单位为G,默认使用virtio-blk。
    openstack volume create --size 5 ${volume_name}
  2. 查看空白卷对应ID。
    openstack volume list

  3. 在创建虚拟机时通过volume id指定该空白卷。
    openstack server create --image openEuler-image \
    --flavor cca-flavor \
    --network public-network \
    --block-device source_type=volume,disk_bus=virtio,uuid=${volume id} \
    volume-server
  4. 虚拟机实例成功部署后,使用virsh命令进入虚拟机,OpenStack创建的虚拟机名为instance-xxx。
    virsh list
    virsh console ${domain_id}
  5. 输入用户名和密码登录后,使用以下命令能够看到对应创建的虚拟磁盘。
    lsblk

    在创建虚拟机前设置镜像属性以启用SCSI

    openstack image set ${image-id}  --property hw_scsi_model=virtio-scsi --property hw_disk_bus='scsi'

    进入虚拟机后使用以下命令可以发现已成功应用SCSI

    lsblk -o NAME,TRAN,SUBSYSTEMS

虚拟光驱管理

  1. 准备ISO文件,并上传至OpenStack。
    openstack image create ${iso-image-name} --file ./your-image.iso --disk-format iso
  2. 基于该ISO文件创建存储卷,要求所创建卷的大小大于ISO文件的实际大小。
    openstack volume create --image ${iso-image-uuid} --size 1 ${iso-volume-name}
  3. 将该光驱卷挂载到指定的机密虚拟机实例。
    openstack server add volume ${cvm_name} ${iso-volume-name}
  4. 使用virsh命令登录虚拟机后,能够通过挂载命令查看ISO文件内容。
    lsblk 
    mount /dev/vdb /mnt 
    ls /mnt

    挂载过程中若出现错误:libvirt.libvirtError: internal error: unable to execute QEMU command 'blockdev-add': aio=native was specified, but is not supported in this build,说明QEMU编译过程中未启用aio。

    在QEMU编译环境中安装libaio-devel库后重新编译QEMU,QEMU将默认加入aio支持。

    yum install libaio-devel -y

机密虚拟机配置虚拟机网卡

  1. 参考环境部署正常创建机密虚拟机。
  2. 配置网络IP地址。

    virsh console进入虚拟机,查看DHCP是否配置好IP地址,如未自动配置,参照如下方式手动配置。

    1. 打开“/etc/sysconfig/network-scripts/ifcfg-eth0”文件。
      vim /etc/sysconfig/network-scripts/ifcfg-eth0
    2. “i”进入编辑模式,参考如下内容配置文件。
      TYPE=Ethernet
      BOOTPROTO=static
      DEFROUTE=yes
      DEVICE=eth0
      ONBOOT=yes
      IPADDR=xx.xx.xx.xx
      PREFIX=xx
      STP=yes
    3. “Esc”键退出编辑模式,输入:wq!,按“Enter”键保存退出文件。
  3. 为Openstack对外网桥br-ex配置IP地址。
    ip addr add xx.xx.xx.xx/xx dev br-ex
    ip link set br-ex up
  4. 增加安全组规则。
    1. 查看安全组列表。
      openstack security group list
    2. 查看默认安全组规则。
      openstack security group rule list default
    3. 配置安全组规则。
      openstack security group rule create --proto icmp --remote-ip xx.xx.xx.xx/xx default
      openstack security group rule create --proto tcp --dst-port 22 --remote-ip xx.xx.xx.xx/xx default

      如需让任意IP地址通过br-ex访问虚拟机,可配置--remote-ip为0.0.0.0/0。

机密虚拟机冷迁移

  1. 配置证书。

    OpenStack使用scp完成迁移工作,因此需要在迁移虚拟机的计算节点间配置证书,此处将虚拟机实例初始部署节点称为源节点,迁移后的部署节点称为目标节点。

    1. 在源节点执行以下操作:
      1. 以nova用户的身份执行生成密钥对命令,创建密钥的配置建议全部使用默认配置。
        sudo -u nova ssh-keygen
      2. 获取公钥内容。
        cat /var/lib/nova/.ssh/xxx.pub
    2. 在目标节点执行以下操作:
      1.a.ii获取的源节点公钥内容写入authorized_keys,确保nova用户具有该文件的读权限。
      cd /var/lib/nova/.ssh
      vim authorized_keys
      chown nova:nova /var/lib/nova/.ssh/*
    3. 在源节点执行以下操作:
      以nova用户执行ssh命令登录目标节点,若不设置密码并成功登录说明证书配置生效。
      sudo -u nova ssh -o BatchMode=yes nova@{target_node_ip}

      若执行该命令显示“Host key verification failed.”,使用以下命令将目标节点主机密钥加入源节点nova用户的known_hosts文件:

      sudo -u nova ssh-keyscan -H {target_ip} >> /var/lib/nova/.ssh/known_hosts
  2. 执行迁移命令。
    1. 在控制节点执行迁移命令,其中Host参数指定的是目标节点的名称。
      openstack server migrate  --host ${target_node_name} ${cvm_name} --os-compute-api-version 2.56
    2. 等待几分钟后,手动确认完成最后的迁移流程。
      openstack server resize confirm ${cvm_name}

      • 执行确认命令后回显以下内容是正常现象,说明虚拟机迁移状态仍未更新,请稍后再执行确认指令。

      • 虚拟机若挂载了数据卷会导致冷迁移失败。
      • 冷迁移失败后,使用openstack命令删除虚拟机,使用virsh命令仍能够查看到残留的domain定义文件,需要手动执行以下命令删除。
        virsh undefine instance-xxx

机密虚拟机撤离

  1. 撤离指令仅在虚拟机部署节点失效情况下才能执行,为便于验证,执行下述命令将节点服务设置为down。
    openstack compute service set --down ${node_name} nova-compute --os-compute-api-version 2.11
  2. 执行撤离命令。
    openstack server evacuate ${cvm_name}
  3. 撤离完成后,查看虚拟机详细信息能够观察到虚拟机实例在其他节点正常运行。
    openstack server show ${cvm_name}