注意
本文档适用于 Ceph 的开发版本。
加密
创建 OSD 时,通过指定 --dmcrypt 标志,可以使用 dmcrypt 对逻辑卷进行加密。当使用 LVM 时,逻辑卷可以通过不同的方式进行加密。ceph-volume 没有 LVM 提供那么多的选项,但它以一致且可靠的方式加密逻辑卷。
在这种情况下,ceph-volume lvm 遵循以下约束:
非 LVM 设备(例如分区)使用相同的 OSD 密钥进行加密。
LUKS
LUKS 目前有两个版本:1 和 2。版本 2 的实现稍微容易一些,但在 Ceph 支持的所有 Linux 发行版中并不普遍可用。
注意
本文档中将 LUKS 版本 1 称为“LUKS”。本文档中将 LUKS 版本 2 称为“LUKS2”。
LVM 上的 LUKS
加密是在现有逻辑卷之上完成的(这与加密物理设备不同)。任何单个逻辑卷都可以被加密,而其他卷保持未加密。这种方法还允许灵活的逻辑卷设置,因为加密将在 LV 创建后进行。
工作流程
设置 OSD 时,会创建一个密钥。该密钥以 JSON 格式传递给 Monitor 作为 stdin,以防止密钥被记录到日志中。
JSON payload 看起来像这样:
{
"cephx_secret": CEPHX_SECRET,
"dmcrypt_key": DMCRYPT_KEY,
"cephx_lockbox_secret": LOCKBOX_SECRET,
}
密钥的命名约定是严格的,它们的命名方式是为了与 ceph-disk 使用的硬编码(旧版)名称保持一致。
cephx_secret:用于身份验证的 cephx 密钥dmcrypt_key:用于解锁加密设备的密钥(或私钥)cephx_lockbox_secret:用于检索dmcrypt_key的身份验证密钥。它被称为 lockbox 是因为 ceph-disk 过去有一个以它命名的未加密分区,用于存储公共密钥和其他 OSD 元数据。
命名约定很严格,因为 Monitors 支持 ceph-disk 使用这些密钥名称的命名约定。为了保持兼容性并防止 ceph-disk 出现故障,ceph-volume 使用相同的命名约定,尽管对于新的加密工作流程来说没有意义。
在“prepare stage”(准备阶段)设置 OSD 的常规步骤之后(使用 bluestore),逻辑卷处于可以激活的状态,无论设备的状态如何(加密或解密)。
在激活时,逻辑卷被解密。OSD 在此过程正确完成后启动。
创建新 OSD 的加密工作流程摘要
创建 OSD。lockbox 和 dmcrypt 密钥都被创建并以 JSON 格式发送给 Monitors,表明这是一个加密的 OSD。
所有辅助设备(如 journal、db 或 wal)都使用相同的 OSD 密钥创建和加密。密钥存储在 OSD 的 LVM 元数据中。
激活通过确保设备已挂载、从 Monitors 检索 dmcrypt 密钥并在 OSD 启动前进行解密来继续。