21.6. 迁移实例
OpenStack 和底层虚拟化层为 OpenStack 节点之间的镜像实时迁移提供,允许您在不造成实例停机时间的情况下无缝地执行 Compute 节点的滚动升级。但是,实时迁移也会带来重大风险。要了解涉及的风险,以下是在实时迁移过程中执行的高级别步骤:
- 在目标主机上启动实例
- 转让内存
- 停止客户机和同步磁盘
- 传输状态
- 启动客户机
某些操作(如冷迁移、调整大小和 shelve)可能会导致在网络上将实例的数据传送到其他服务等。
21.6.1. 实时迁移风险 复制链接链接已复制到粘贴板!
在实时迁移过程的不同阶段,实例运行时间内存和磁盘的内容以纯文本通过网络传输。因此,在使用实时迁移时需要解决多个风险。以下非应对列表详细介绍了其中的一些风险:
- 拒绝服务(DoS):在迁移过程中出现问题,则实例可能会丢失。
- 数据暴露:必须安全处理内存或磁盘传输。
- 数据操作:如果没有安全处理内存或磁盘传输,攻击者可以在迁移过程中操作用户数据。
- 代码注入:如果没有安全处理内存或磁盘传输,攻击者可以在迁移过程中对可执行文件进行操作。
21.6.2. 禁用实时迁移 复制链接链接已复制到粘贴板!
目前,OpenStack 中默认启用实时迁移。默认情况下,实时迁移是仅管理员的任务,因此用户无法启动此操作,而只有管理员(可能被信任)。可以通过在 nova policy.json
文件中添加以下行来禁用实时迁移:
"compute_extension:admin_actions:migrate": "!", "compute_extension:admin_actions:migrateLive": "!",
"compute_extension:admin_actions:migrate": "!",
"compute_extension:admin_actions:migrateLive": "!",
或者,当阻止 TCP 端口 49152
到 49261
时,实时迁移可能会失败,或者确保 nova 用户在计算主机之间没有免密码 SSH 访问。
请注意,实时迁移的 SSH 配置可显著锁定:创建新用户(nova_migration),并且 SSH 密钥仅限于该用户,并且仅在允许的网络上使用。然后,打包程序脚本会限制可运行的命令(例如,libvirt 套接字上的 netcat)。
21.6.3. 加密实时迁移 复制链接链接已复制到粘贴板!
实时迁移流量以纯文本格式传输正在运行的实例的磁盘和内存内容,目前默认托管在内部 API 网络上。
如果有足够的要求(如升级)来保持实时迁移,则 libvirtd 可以为实时迁移提供加密的隧道。但是,此功能不会在 OpenStack Dashboard 或 nova-client 命令中公开,只能通过手动配置 libvirtd 来访问。然后,实时迁移过程会更改为以下高级别步骤:
- 实例数据从 hypervisor 复制到 libvirtd。
- 在源和目标主机上的 libvirtd 进程间创建一个加密的隧道。
- 目标 libvirtd 主机将实例复制到底层的虚拟机监控程序。
对于 Red Hat OpenStack Platform 13,建议的方法是使用隧道迁移,该迁移在使用 Ceph 作为后端时默认启用。如需更多信息,请参阅 https://docs.openstack.org/nova/queens/configuration/config.html#libvirt.live_migration_tunnelled。