[问题描述]
环境是带有openvswitch的KVM, VMs和openvswitch部署在同一台服务器上,使用的INTEL网卡。一个vm使用VF,另一个vm使用virtio, VF和网桥都是由同一个PF创建的,VMs网络不可访问,不能相互通信。下面是简要的配置方法和拓扑。
1,启用虚拟化,在x710的端口1上创建VF,并将VF附加到VM1。
2,使用“systemctl”命令检查OvS正在运行,并使用命令“OvS -vsctl add-br br0”创建OvS桥接器。
3,使用以下命令将x710的端口1添加到桥上:“ov -vsctl Add -port br0 port_name”
4,使用命令’ vs-vsctl show ‘或’ vs-vsctl列表-ports br0 ‘检查配置。
5,使用虚拟机管理器GUI在虚拟机的“虚拟硬件细节”窗口中将桥接接口作为虚拟网络接口附加到VM2。从“网络源”下拉菜单中选择OvS网桥,并指定“源模式”网桥。‘设备模型’应该是virtio。”
6,应用配置并启动这两个虚拟机。
7,在每个VM中,将已连接的接口(VF或网桥)设置为“up”。向每个接口添加一个ip。如VM1: ‘ ip link set dev ens9 up ‘,后面跟着’ ip地址add 10.10.10.1/24 ‘。例如VM2: ‘ ip link set dev eth0 up ‘后面跟着’ ip地址add 10.10.10.2/24 ‘。
[测试结果]
以下是测试结果的总结。
两个虚拟机都使用VF,可以相互通信。
两个虚拟机都使用桥接接口,可以相互通信。
3.如果一个VM使用VF而另一个使用网桥接口(VF和网桥来自同一个PF),那么VM就不能彼此通信。
对于第3项,如果VF和bridge来自不同的PF,则vm可以相互通信。
两个VM都使用DHCP,在上述4种场景中,VM可以从DHCP服务器获得IP地址并访问外部网络,说明VM的网卡工作正常。
[故障原因]
经与Intel确认,SR-IOV Virtual Functions不能发送或接收同一物理端口上的虚拟nic之间的流量,也不能在Linux软件桥接器上的模拟连接和使用SR-IOV VFs的连接之间发送或接收流量。要解决此问题可以使用支持802.1Qbg (VEPA)的外部交换机设备。