1)容许不一样vlan的network下的虚拟机之间通讯。通常状况下,虚拟机只能在相同vlan的网络下通讯。网络
2)容许虚拟机发送vlan报文。spa
虚拟机出来的tap设备链接到tbr网桥上,此时tap设备不打tag值, vlan_mode = trunk ,trunk port 与 subport 共用一个tap设备。server
tbr网桥与br-int网桥用ovs自身的patch对相连。xml
1)untag -> local vlanblog
报文从vm1下行通过br-int后,在br-int匹配相似转换流表 “in_port=5,vlan_tci=0x0000 actions=mod_vlan_vid:3”接口
2) local vlan -> untag ip
若报文欲从trbxxx网桥上行进入vm2,在trbxxx匹配相似转换流表 “in_port=4,dl_vlan=3 actions=strip_vlan” ci
注:若报文欲从br-phy物理网桥出本主机,则走普通流程,在br-phy将local vlan 转换成 真正用户网络的vlan资源
3) vm vlan -> local vlanrpc
报文从vm1下行通过br-int后,在br-int匹配相似转换流表 “in_port=5,dl_vlan=1000 actions=mod_vlan_vid:4”
4) local vlan -> vm vlan
若报文欲从trbxxx网桥上行进入vm2,在trbxxx匹配相似转换流表 “in_port=4,dl_vlan=4 actions=mod_vlan_vid:1000”
1) 生成xml文件。后续会根据xml文件挂载tap设备,此处tap设备是挂载到tbr网桥上。
2) 准备组网环境。
在建立虚拟机前,nova compute 进行plug动做准备好相关资源,如建立tbr网桥,用patch对链接tbr与br-int网桥。
而后启动虚拟机,将tap设备挂载到tbr网桥上。
3) ovs-agent 扫描 tbr网桥上新增的tap设备(trunk port),而后下发相应的流表。
对于subport,因为没法在tbr网桥上扫描到,只能经过neutron北向接口建立subport时,neutron-server经过rpc消息通知ovs-agent,再下发流表。
neutron port-create $network_id_1 --trunkport:type trunk
neutron port-create $network_id_2 --trunkport:type subport --trunkport:parent_id $trunkport_id
(建立subport的net与trunk port的net不是同一个,即vlan不一样)
nova boot --image xxx --flavor 1 --nic port-id=$trunkport_id (必须指定trunkport而不是subport来建立VM)
vconfig add eth0 100 (在虚拟机中添加vlan 100的子接口)
dhcpcd -L eth0.100 (在该子接口获取ip)