基于 rsync 的 libvirt 远程 FS 驱动程序实现

https://blueprints.launchpad.net/nova/+spec/remote-fs-driver

libvirt 无法使用 RPC 通过网络在计算节点之间复制文件。这就是为什么 libvirt 使用额外的接口与其他计算节点通信的原因。减少计算节点之间的通信工具数量可以提高安全性、简化测试和部署,并提供更好的灵活性。目前 libvirt 驱动程序使用 ssh 和 rsync 命令执行以下操作:* 在远程主机上创建目录,* 在远程主机上创建文件,* 从远程主机上删除文件,* 将文件复制到远程主机。此 BP 的目标是实现两个 libvirt 远程 FS 驱动程序:sshrsync 驱动程序。这两个驱动程序中的每一个都将实现 libvirt 驱动程序所需的所有操作。ssh 驱动程序将使用 ssh 和 scp 命令,而 rsync 驱动程序将仅使用 rsync 命令。

问题描述

当前的 libvirt 驱动程序使用以下命令执行远程文件系统操作:* ssh touch,* ssh mkdir,* ssh rm,* scp,* rsync。这迫使我们使用额外的 shell,这可能会带来安全风险。我们无法避免使用 shell,因为通过网络复制文件需要一个 shell。可以通过仅使用 ssh 命令或 rsync 命令来减少节点之间的交互。这种分离可以让我们减少节点上打开的端口数量。此外,仅使用 rsync/scp 命令可以让我们使用安全的 shell,例如 rssh。

用例

云操作员希望减少 nova-compute 守护程序在计算节点之间迁移工作负载时使用的命令数量和打开的端口数量,以减少攻击向量。

项目优先级

无。

提议的变更

为了实现这些目标,将在 nova/virt/libvirt/remotefs.py 中添加抽象类 ‘RemoteFilesystem’。该类将包含 libvirt 与其他节点通信以在这些节点上执行文件系统操作所需的操作。该抽象类将在 SshRemoteFilesystem 和 RsyncRemoteFilesystem 类中实现。SshRemoteFilesystem 类将仅使用 ssh 和 scp 工具(scp 使用 ssh 进行数据传输,并使用相同的身份验证并提供与 ssh 相同的安全性)。将在 RsyncRemoteFilesystem 类中实现额外的远程 FS 驱动程序。该类将仅使用 rsync 命令。将添加配置选项 ‘remote_filesystem_transport’,默认值为 ‘ssh’,‘choices ssh’,‘rsync’。根据选项值,将实例化相应的类。

备选方案

无。

数据模型影响

无。

REST API 影响

无。

安全影响

这些改进可以减少计算节点上使用的端口数量。此外,它允许我们使用受限的 shell 来为像 ‘rssh’ 这样的主机提供有限的访问权限。

通知影响

无。

其他最终用户影响

无。

性能影响

无。

其他部署者影响

为了实现安全优势,必须在计算节点上安装某种受限的 shell。新的 shell 应该由 nova 用户使用。

开发人员影响

无。

实现

负责人

主要负责人:mhorban@mirantis.com

工作项

  • libvirt 的 ssh 远程 FS 驱动程序实现。

  • libvirt 的 rsync 远程 FS 驱动程序实现。

  • 添加配置选项以选择远程 FS 驱动程序。

依赖项

无。

测试

将添加迁移实例的 tempest 测试。

文档影响

添加新的选项 ‘remote_filesystem_transport’ 以配置计算节点通信方法。

参考资料