Libvirt: QEMU 通过原生 LUKS 文件和主机设备解密¶
https://blueprints.launchpad.net/nova/+spec/libvirt-qemu-native-luks
QEMU 2.6 [1] 和 Libvirt 2.2.0 [2] 允许 QEMU 原生解密 LUKS 文件和块设备。本文档概述了在 Libvirt Nova virt 驱动程序中使用此新功能所需的更改以及这样做可能带来的好处。
问题描述¶
Nova 当前支持使用 LUKS 和 plain dm-crypt 加密卷,使用 nova/volume/encryptors 下的加密器类。这些前端加密器类使用 cryptsetup 在计算主机上解密加密卷。这会在主机上创建一个解密的块设备,然后将其符号链接到原始卷路径并附加到实例。
使用 cryptsetup 和其他外部工具一直是 Nova 和 os-brick 中许多错误的根源,并且是持续的维护开销。
用例¶
用户应该能够从或附加任何文件或主机块设备卷类型的加密 LUKS 卷到实例,而无需使用主机命令行实用程序,例如 cryptsetup。
提议的变更¶
当给定的 Libvirt 计算主机尝试附加加密卷,加密提供程序为 luks,并且主机上存在所需的 QEMU 和 Libvirt 版本时,将使用 QEMU 2.6 提供的原生 LUKS 支持。然后将创建所需的 Libvirt 磁盘加密 XML 和密码 secret,从而允许 QEMU 解密并将卷附加到域。
如果不存在所需的 QEMU 和 LIbvirt 版本,Nova 将回退到当前使用 cryptsetup 解密卷的 LuksEncryptor 加密器。
在分离时,将检查与卷关联的 LibvirtConfigGuestDisk 对象,使用加密属性的存在来确认使用上述哪种方法解密了卷。
如果此属性为 None,将使用原始的 cryptsetup 方法分离卷,从而允许加密卷在 Nova、QEMU 或 Libvirt 升级期间仍然可以分离。
备选方案¶
继续使用当前的 cryptsetup 前端加密器。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
不再在主机上创建解密的块设备。
通知影响¶
无
其他最终用户影响¶
此更改应该对现有 LuksEncryptor 用户透明。用户应该继续使用此加密提供程序,允许 Nova 决定何时使用 QEMU 2.6 提供的原生 LUKS 支持或原始的 cryptsetup 加密器。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
Libvirt virt 驱动程序将在 nova/volume/encryptors 下 Nova 当前提供的或最近复制到 os-brick 下 os_brick/encryptors 之外具有唯一的加密器实现。
虽然这意味着此实现不可用于其他 virt 驱动程序或 OpenStack 项目,但很难看出它如何在 Libvirt virt 驱动程序之外提供任何好处。
实现¶
负责人¶
- 主要负责人
lyarwood
工作项¶
扩展 nova/virt/libvirt/volumes/ 块卷驱动程序,以将卷的加密属性传递给 LibvirtConfigGuestDisk。
扩展 LibvirtConfigGuestDisk 类以配置磁盘设备的加密元素 [3] 并创建密码所需的 Libvirt secret。
仅当计算主机附加卷时存在所需的 QEMU 和 Libvirt 版本时,才尝试使用 QEMU 原生解密给定的 LUKS 卷。
否则回退到 cryptsetup 加密器解密卷的方法。
仅当与卷关联的 LibvirtConfigGuestDisk 对象缺少加密属性时,才使用 cryptsetup 分离 LUKS 卷。
依赖项¶
两者都计划包含在即将发布的 Ubuntu 17.04 版本中 [4] [5] [6] 并且已经作为 Fedora 25 的一部分发布 [7] [8] 。
以下 devstack 更改现在通过 Ubuntu Cloud Archive 为基于 Xenial 的 OpenStack CI 作业提供 QEMU 2.8 和 Libvirt 2.5.0,从而可以在 gate 中测试此功能
使用 UCA 进行 libvirt 2.5.0 测试 https://review.openstack.org/#/c/451492/
测试¶
单元测试。
如果存在 Libvirt 和 QEMU 的必需版本,现有的 tempest 测试应该会触发此新功能的使用。
继续使用不使用 UCA 并且因此不提供所需的 QEMU 和 Libvirt 版本的作业测试回退路径。
文档影响¶
无
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Pike |
引入 |