一、DVR实验环境
一套vlan模式的openstack环境,interface_driver使用openvswitch,并在计算节点添加br-ex,用于计算节点虚拟机出外网。
二,DVR配置
<强> 1,控制节点强>
,编辑/etc/中子/中子。参看
router_distributed=True(默认)
b,重启neutron-server服务
<强> 2,网络节点强>
,编辑/etc/中子/l3_agent。ini
(默认)
agent_mode=dvr_snat
b,编辑
/etc/中打开/中子/插件/名为ml2 openvswitch_agent。ini
enable_distributed_routing=True(代理)
c,重启neutron-l3-agent和neutron-openvswitch-agent服务
<强> 3,计算节点强>
,编辑/etc/sysctl.conf
net.ipv4.conf.all net.ipv4.ip_forward=1。rp_filter=0
net.ipv4.conf.default.rp_filter=0
b,执行命令sysctl - p
c,编辑/etc/中子/l3_agent.ini
(默认)
interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver
external_network_bridge=
agent_mode=dvr
d编辑
/etc/中打开/中子/插件/名为ml2 openvswitch_agent。ini
enable_distributed_routing=True(代理)
e,重启neutron-l3-agent和neutron-openvswitch-agent服务
三,启用dhcp实现元功能
1,默认情况下,元数据功能通过l3实现,在dvr模式下,如果使用l3实现的话,需要额外配置元数据代理,为了简化,该实验启用dhcp代理来实现元功能。
,在网络节点上编辑/etc/中子/dhcp_agent。ini
(默认)
force_metadata=https://www.yisu.com/zixun/True
b,重启neutron-dhcp-agent服务。
四,DVR到网关流表分析
1,创建路由器,关联到test1网络(网关192.168.1.1),并在test1网络内创建实例(192.168.1.9),网络模型如下:
执行上述操作之后,中子会在网络节点和计算节点(有实例运行)上都创建一个路由器的名称空间,且配置完全一样。
也就是说,平台中会出现多个相同的路由器名称空间,那么中子如何实现虚拟机到网关的流量只到本地的路由器名称空间呢?答案是流表
2,举个例子:
,在test1内平网关(192.168.1.1),虚拟机会先发送arp请求去学习网关的mac地址,arp报文会从qvo-xxx端口进入br-int的table0,匹配arp和in_port,根据流表项,提交到table24。
b,在table24中匹配arp, in_port和arp_spa,命中之后,提交到table25。
c,在table25中匹配in_port和dl_src,命中之后,提交到table60。
d,在table60中,命中table-miss流条目,根据行动执行正常。
e网关地址是配置在路由器名称空间中的qr-xxx上,而qr-xxx是br-int上的。
端口,所以qr-xxx会收到arp请求,并进行相应,arp相应报文会从qr-xxx端口再次进入br-int table0,命中table-miss流条目,从而进行正常转发,将报文转发给虚拟机的qvo-xxx。
f,虚拟机学到网关的mac地址之后,将icmp报文通过流表,转发给网关,ping流程完成。
3,现在分析中子如何通过流表实现虚拟机到网关的流量只到本地的路由器名称空间。
在上述的d步骤中,命中table-miss流条目,根据行动执行正常,报文可能通过正常转发,到达br-vlan。
,报文到达br-vlan后,会进入表=0,匹配in_port,命中后,重新提交到table1
b,在表1中,匹配dl_vlan, arp_tpa (arp报文)或者dl_dst,从而把到网关的报文,全部下降。
c,通过上述流表,保证到达网关的报文全部终结在宿主机本地。
五、虚拟机内网通信分析
DVR模式下,虚拟机的内网通信一般有四种场景:同网络同宿主机,同网络不同宿主机,不同网络同宿主机,不同网络不同宿主机、下面将对这四种场景逐一进行分析:
1,同网络同宿主机,不需要通过路由器,实验模型如下:
test1和test2运行在同一台宿主上,执行test1萍test2。
, test1通过arp学习到test2的mac地址,流表匹配过程和步骤4 (DVR到网关流表分析)中arp学习相同,然后封装icmp报文,从qvo-xxx港口进入br-int的table0,匹配in_port,命中后,重新提交到table25。
b,在table25中,匹配in_port和dl_src,命中后,重新提交到table60。
c,在table60,命中table-miss,执行正常转发。
d, test2的qvo-yyy港也在br-int上,报文通过qvo-yyy发送到test2, test2回包给测试流程和test1到test2相同每流程结束。