我找到的解决方案似乎都不起作用,因为我已经研究了好几天,所以我决定放弃并寻求帮助。
我使用 nmcli 创建了一个名为 ovs-bridge 的开放 vswitch。我创建了端口和接口,并插入了 eno1。一切正常,我创建了一个带有 VLAN 标记的端口,并且新接口从该 VLAN 中的 dhcp 服务器获取 IP 地址。
下一步是我需要 kvm guest 程序插入 vswitch 端口,无论是否带有 VLAN 标记。对于我的一生,我无法让它发挥作用。
ovs-vsctl 显示:
4511e03b-87b5-44a2-a16f-dac79b43cbf7
Bridge ovs-bridge
Port ovs-p99
Interface eno1
type: system
Port ovs-p1
tag: 50
Interface ovs-int-p1
type: internal
Port ovs-p0
Interface ovs-int-p0
type: internal
nmcli 控制台显示:
NAME UUID TYPE DEVICE
ovs-int-p0 c6d2243f-8a96-4647-887a-d2cdfb8ae878 ovs-interface ovs-int-p0
virbr0 ad67349b-3e2b-45ed-b66d-b148c7d01d4d bridge virbr0
ovs-bridge dbb6960e-ac13-4452-b4c2-44782bbc54ac ovs-bridge ovs-bridge
ovs-int-p1 1af100a3-b08d-41bd-ab1f-a5c3059807f3 ovs-interface ovs-int-p1
ovs-int-p99 3d64f617-4c9b-47a0-b48c-44380ea7d2bb ethernet eno1
ovs-p0 6e3a5415-8756-4069-a788-d661da078d46 ovs-port ovs-p0
ovs-p1-vlan50 62f4cfe7-0317-4ca8-96f9-d37ac771b308 ovs-port ovs-p1
ovs-p99 0a9c184c-0246-4cb1-a5bf-7c7b186b40e5 ovs-port ovs-p99
wired-dhcp 760eda5d-f092-3ee0-998d-d923ff8bf5ca ethernet --
nmcli 开发显示:
DEVICE TYPE STATE CONNECTION
virbr0 bridge connected (externally) virbr0
ovs-int-p0 ovs-interface connected ovs-int-p0
eno1 ethernet connected ovs-int-p99
ovs-bridge ovs-bridge connected ovs-bridge
ovs-int-p1 ovs-interface connected ovs-int-p1
ovs-p0 ovs-port connected ovs-p0
ovs-p1 ovs-port connected ovs-p1-vlan50
ovs-p99 ovs-port connected ovs-p99
lo loopback unmanaged --
virbr0-nic tun unmanaged --
我定义了一个供 libvirt 使用的网络:
<network>
<name>ovs-network</name>
<uuid>03026f19-5615-4d23-a8f0-adf1064a796a</uuid>
<forward mode='bridge'/>
<bridge name='ovs-bridge'/>
<virtualport type='openvswitch'/>
<portgroup name='untagged' default='yes'>
</portgroup>
<portgroup name='vlan50'>
<vlan>
<tag id='50'/>
</vlan>
</portgroup>
<portgroup name='vlan60'>
<vlan>
<tag id='60'/>
</vlan>
</portgroup>
<portgroup name='vlan-all'>
<vlan trunk='yes'>
<tag id='2'/>
<tag id='3'/>
</vlan>
</portgroup>
</network>
当我在 virt-manager 中编辑 guest 虚拟机时,网络可见。我将访客网络定义如下:
<interface type="network">
<mac address="52:54:00:a6:dc:48"/>
<source network="ovs-network" portgroup="untagged"/>
<model type="virtio"/>
<address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/>
</interface>
当我启动 guest 虚拟机时,它会返回以下内容: virsh start fed32srv:
error: Failed to start domain fed32srv
error: Cannot get interface MTU on 'ovs-bridge': No such device
于是我就查了很多资料:
- https://serverfault.com/questions/680635/mtu-on-open-vswitch-bridge-port#81789
- https://docs.openvswitch.org/en/latest/faq/issues/
- https://stackoverflow.com/questions/48784098/issue-with-kvm-libvirt-and-linux-namespaces
有上百万份指南,其中大多数甚至都不起作用,所以我认为其中很多都已经过时了。
无论如何,我尝试在接口和内部接口上设置 MTU 大小,但这没有帮助。我重新启动了一切,甚至重新启动。
回到问题,如何设置 kvm guest 来插入 vswitch 端口,带或不带 vlan 标记(在 ovs 端口上)?
询问您是否需要更多信息。
谢谢您的帮助!
答案1
您的网桥缺少管理端口和接口:
4511e03b-87b5-44a2-a16f-dac79b43cbf7
Bridge ovs-bridge
...
Port ovs-bridge
Interface ovs-bridge
type: system
...
当您使用 ovs-vsctl 创建 ovs 网桥时,默认情况下两者都会存在。当你用NM创建它时,它不是......你需要显式地创建它们:
sudo nmcli con add type ovs-port conn.interface ovs-bridge master ovs-bridge con-name ovs-px
sudo nmcli con add type ovs-interface slave-type ovs-port conn.interface ovs-bridge master ovs-px con-name ovs-int-px
答案2
因此,当使用 nmcli 设置时,问题是可以重现的。使用 ovs-vsctl 命令设置网桥和接口时,一切都会按预期进行。
完成基本设置后,请执行以下操作: https://blog.scottlowe.org/2012/11/12/libvirt-ovs-integration-revisited/
一切顺利。