此文已由作者刘超授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
Port在数据库中的结构如下:
一般来说一个Port就是一个Interface,当然也有一个Port对应多个Interface的情况,成为Bond
Port的一个重要的方面就是VLAN Configuration,有两种模式:
trunk port
这个port不配置tag,配置trunks
如果trunks为空,则所有的VLAN都trunk,也就意味着对于所有的VLAN的包,本身带什么VLAN ID,就是携带者什么VLAN ID,如果没有设置VLAN,就属于VLAN 0,全部允许通过。
如果trunks不为空,则仅仅带着这些VLAN ID的包通过。
access port
这个port配置tag,从这个port进来的包会被打上这个tag
如果从其他的trunk port中进来的本身就带有VLAN ID的包,如果VLAN ID等于tag,则会从这个port发出
从其他的access port上来的包,如果tag相同,也会被forward到这个port
从access port发出的包不带VLAN ID
如果一个本身带VLAN ID的包到达access port,即便VLAN ID等于tag,也会被抛弃。
我们做一个实验来测试Port的VLAN
创建拓扑结构
ovs-vsctl add-port ubuntu_br first_br
ovs-vsctl add-port ubuntu_br second_br
ovs-vsctl add-port ubuntu_br third_br
ovs-vsctl set Port vnet0 tag=101
ovs-vsctl set Port vnet1 tag=102
ovs-vsctl set Port vnet2 tag=103
ovs-vsctl set Port first_br tag=103
ovs-vsctl clear Port second_br tag
ovs-vsctl set Port third_br trunks=101,102
需要监听ARP,所以禁止MAC地址学习
ovs-vsctl set bridge ubuntu_br flood-vlans=101,102,103
从192.168.100.102来ping 192.168.100.103,应该first_if和second_if能够收到包
first_if收到包了,从first_br出来的包头是没有VLAN ID的
second_if也收到包了,由于second_br是trunk port,因而出来的包头是有VLAN ID的,103
third_if收不到包
从192.168.100.100在ping 192.168.100.105, 则second_if和third_if可以收到包(当然ping不通,因为third_if不属于某个VLAN)
first_if收不到包
second_if能够收到包,而且包头里面是VLAN ID = 101
third_if也能收到包,而且包头里面是VLAN ID =101
从192.168.100.101来ping 192.168.100.104, 则second_if和third_if可以收到包
first_if收不到包
second_br能够收到包,而且包头里面是VLAN ID = 102
third_if也能收到包,而且包头里面是VLAN ID =102
清理环境
ovs-vsctl clear Bridge ubuntu_br flood_vlans
ovs-vsctl list Port
ovs-vsctl clear Port vnet1 tag
ovs-vsctl clear Port vnet0 tag
ovs-vsctl clear Port first_br tag
ovs-vsctl clear Port third_br trunks
更多网易技术、产品、运营经验分享请点击。