4.3. 支持的格式
支持 Linux 统一密钥设置(LUKS)1 和 2。数据布局完全符合 LUKS 规格。dm-crypt
或 QEMU
等外部 LUKS 兼容工具可以在加密的 RBD 镜像上安全地执行加密的输入/输出(I/O)。另外,您可以通过将原始 LUKS 数据复制到 RBD 镜像来导入外部工具创建的现有 LUKS 镜像。
目前,只支持高级加密标准(AES)128 和 256 加密算法。xts-plain64 目前是唯一支持的加密模式。
要使用 LUKS 格式,请使用以下命令格式化 RBD 镜像:
您需要创建一个名为 passphrase.txt 的文件并输入密码短语。您可以随机生成密码短语,该密码短语可能包含 NULL 字符。如果密码短语以换行符结尾,它将被剥离。
语法
rbd encryption format POOL_NAME/LUKS_IMAGE luks1|luks2 PASSPHRASE_FILE
示例
[ceph: root@host01 /]# rbd encryption format pool1/luksimage1 luks1 passphrase.bin
您可以选择 luks1
或 luks
加密格式。
加密格式操作生成 LUKS 标头,并将它写入到 RBD 镜像开始时。在标头后面会附加一个 keylot。keyslot 包含随机生成的加密密钥,并由从密码短语读取的密码短语进行保护。默认情况下,xts-plain64 模式的 AES-256(当前推荐的模式)和默认用于其他 LUKS 工具。目前不支持添加或删除额外的密码短语,但可以使用 cryptsetup
等工具实现。LUKS 标头大小可能会有所不同,对于 LUKS 最多为 136MiB,但取决于安装的 libcryptsetup
版本,它通常最多为 16MiB。为获得最佳性能,加密格式设置数据偏移,使其与镜像对象大小保持一致。例如,在使用配置了 8MiB 对象大小的镜像时,至少需要 8MiB 的开销。
在 LUKS1 中,扇区(最小加密单元)的固定单位为 512 字节。LUKS2 支持较大的扇区,并且获得更好的性能,默认扇区大小设置为最大 4KiB。小于扇区的写入或与扇区启动不一致的写入,请在客户端上触发保护的 read-modify-write
链,并具有相当延迟的损失。此类未对齐写入的批处理可能会导致 I/O 争用,从而进一步降低性能。红帽建议在无法保证以 LUKS 扇区一致而使用 RBD 加密时避免使用 RBD 加密。
要映射 LUKS 加密的镜像,请运行以下命令:
语法
rbd device map -t nbd -o encryption-format=luks1|luks2,encryption-passphrase-file=passphrase.txt POOL_NAME/LUKS_IMAGE
示例
[ceph: root@host01 /]# rbd device map -t nbd -o encryption-format=luks1,encryption-passphrase-file=passphrase.txt pool1/luksimage1
您可以选择 luks1
或 luks2
加密格式。
为安全起见,加密格式和加密负载操作都是 CPU 密集型,可能需要几秒钟才能完成。对于加密的 I/O,假设启用了 AES-NI,可能会添加相对较小的微秒延迟,以及 CPU 使用率小的增加。