我正在尝试更改 oVirt Guest VM 的清洁流量 IP 地址。
只要我重新启动虚拟机,它就可以工作。(从客户虚拟机网络设置中更改)
但对于生产环境,我们希望能够在无需重新启动的情况下动态更改这些设置。
我尝试在 Virsh 中更新详细信息,但它们不会立即应用。此外,如果我重新启动客户虚拟机,Ovirt 将创建一个新的 Virsh XML 文件。因此,通过 Virsh 对虚拟机所做的任何更改都不会保留。
有没有办法可以在不重新启动虚拟机的情况下改变网络过滤器?
在 KVM(virsh)中,将以下文本添加到 VM(Guest)的 xml 中
<filterref filter='clean-traffic'> <parameter name='IP' value='x.x.x.x'/> </filterref>
其中 xxxx 是接口的 IP。但您需要重新启动才能使其生效。我希望 clean-traffic 过滤器立即生效,而不是在重新启动后生效。
在 Ovirt 中,我们通过 GUI 添加过滤器,如下所示
但同样,这只有在 Ovirt 启动重启后才会生效。我想要一种方法来立即激活它。
它对我们的影响是,如果我们对虚拟机进行 IP 更改,然后重新加载网络,我们将失去与外界的连接,因为新 IP 与过滤器中的 IP 不匹配。(xxxx)由于这是一个生产环境,我们不能只重新启动人们的服务器。此外,我们可能在一个虚拟网卡上有多个 IP,这意味着我们可能需要向过滤器添加多个 IP。每次更改都重新启动效率不高。
答案1
如果没有选项可以通过 oVirt 本身更改所需的 VM 设置,您可以随时编写一个 vdsm 钩子,在 VM 启动和迁移时直接将所需的选项注入 XML 中。XML 本身不存储,它是在您启动 VM 时根据引擎数据库中保存的数据生成的。
还有一点要记住 - oVirt 是 DC 级虚拟化解决方案,它将虚拟机作为虚拟硬件进行管理,因此地址不受管理 - NIC 受管理。Openstack 等云级解决方案实际上管理公共地址,但这发生在虚拟机本身之上 - 分配 IP 并将虚拟机 NAT 到该 IP,虚拟机本身不会在内部获取该 IP。
了解您到底想改变什么将会非常有帮助,这样我们就可以帮助您进行配置。
来自 libvirt 文档:
网络过滤 XML 的目标是使虚拟化系统的管理员能够在虚拟机上配置和执行网络流量过滤规则,并管理允许虚拟机发送或接收的网络流量参数。当虚拟机启动时,网络流量过滤规则将在主机上应用。由于无法从虚拟机内部规避过滤规则,因此从虚拟机用户的角度来看,它们是强制性的。
网络过滤器子系统允许每个虚拟机的网络流量过滤规则在每个接口上单独配置。这些规则在虚拟机启动时应用于主机,并且可以在虚拟机运行时进行修改。后者可以通过修改网络过滤器的 XML 描述来实现。
因此,过滤规则是在虚拟机启动时应用的,而不是在虚拟机运行时,这意味着如果您想要添加或删除规则,则需要停止/启动虚拟机。可以在机器运行时进行修改。如果您需要在虚拟机运行时对 DOMXML 进行更改,则可以选择一个 VDSM 钩子事件,编写钩子并注入它。然后只需触发事件,钩子就会被应用。
VDSM 挂钩和事件列表可在此处找到:https://www.ovirt.org/documentation/admin-guide/appe-VDSM_and_Hooks.html