如果我们用直接定义Open-vlan的方法不能正确启动kvm,如下图的配置:
<interface type='network'>
<mac address='11:22:33:44:55:66'/>
<source network='ovs-network' portgroup='vlan-02'/>
</interface>
这种情况有可能发生在libvirt与ovs的兼容性问题上。
那么就得使用另外一种方式了,ovs的Fake Bridge,最早的文章说过,做Docker平台的时候,容器连接到linux系统的br0网桥,然后br0网桥再连接到ovs的网桥ovsbr0,这么串联起来用。ovs的Fake Bridge也是这么个意思,在ovs的网桥ovsbr0上面再串一个带vlan信息的Fake Bridge。
用法:
ovs-vsctl add-br <fake bridge> <parent bridge> <VLAN>
举例:
ovs-vsctl add-br vlan100 ovsbr0 100
我们定义kvm的网络的时候就变成连接到这个虚假的vlan100网桥上了:
<interface type='bridge'>
<mac address='11:22:33:aa:bb:cc'/>
<source bridge='vlan100'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
查看一下:
# ovs-vsctl show
Bridge "ovsbr0"
Port "bond0"
Interface "eth0"
Interface "eth1"
Port "ovsbr0"
Interface "ovsbr0"
type: internal
Port "vnet0"
tag: 100
Interface "vnet0"
Port "vlan100"
tag: 100
Interface "vlan100"
type: internal
以下两条命令也比较有用: 1、查出网桥的vlan,如果是真网桥,会返回0,如果是fake Bridge,会返回vlan的id
ovs-vsctl br-to-vlan ovsbr0
0
ovs-vsctl br-to-vlan vlan100
100
2、查找网桥的上级
ovs-vsctl br-to-parent vlan100
ovsbr0