前言
openstack
版本是ocata
,操作系统是ubuntu 1604.3
。
架构图
逻辑架构图在这里
flow分析
这里只分析flow(neutron
网络用的是openvswitch+vxlan+local vlan
)
br-int
|
|
port=2和3是两个不同用户的虚机,port=1是patch-tun。
table=24 arp里的源IP和port验证。
table=25 源mac和port验证。
(<端口,源ip,源mac>的ipv4验证在iptables里)
br-tun
|
|
port=1
是patch-int
,port 2和3是vxlan接口,没有用通配tunnel。table=0
是根据in_port
分出向和入向。table=2
是出向流表,按广播arp,单播,广播分发到table 21,20,22.table=20
是明细的单播flow,送到目的(匹配带vlan_id
)table=21
是arp代答,然后默认转22table=22
是广播flow,送到目的(匹配带vlan_id
)table=4
是入向,tun_id
转成vlan_id
,转table 9table=9
,转table 10
table=10
入向流表,同时有学习,在table=20
的后面添加一条priority=1
的对应出向的流表,类似于cookie=0xa3c68df625ec7f59, duration=37.162s, table=20, n_packets=0, n_bytes=0, hard_timeout=300, idle_age=37, hard_age=0, priority=1,vlan_tci=0x0002/0x0fff,dl_dst=fa:16:3e:5c:4c:d8 actions=load:0->NXM_OF_VLAN_TCI[],load:0x57->NXM_NX_TUN_ID[],output:3
,其中已经有了priority=2
一样的推送下去的flow。
这条规则在配置了allowed-address-pair
(单网卡多IP,多MAC支持)里用到了mac的情况下会用到。
tips,
- vlan tag是在进入br-int时,设置在ovs port上的。
- 本地vlan区分了不同的租户,同时在转发和arp应答时,减少了flow的条数。