OpenStack DVR 原理深入分析

一、DVR实验环境

一套vlan模式的openstack环境,interface_driver使用openvswitch,并在计算节点添加br-ex,用于计算节点虚拟机出外网。

二、DVR配置

1、控制节点

a、编辑/etc/neutron/neutron.conf

[DEFAULT]

router_distributed = True

b、重启neutron-server服务

2、网络节点

a、编辑/etc/neutron/l3_agent.ini

[DEFAULT]

agent_mode = dvr_snat

b、编辑

/etc/neutron/plugins/ml2/openvswitch_agent.ini

[agent]

enable_distributed_routing = True

c、重启neutron-l3-agent和neutron-openvswitch-agent服务

3、计算节点

a、编辑/etc/sysctl.conf

net.ipv4.ip_forward=1

net.ipv4.conf.all.rp_filter = 0

net.ipv4.conf.default.rp_filter = 0

b、执行命令sysctl –p

c、编辑/etc/neutron/l3_agent.ini

[DEFAULT]

interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver

external_network_bridge =

agent_mode = dvr

d、编辑

/etc/neutron/plugins/ml2/openvswitch_agent.ini

[agent]

enable_distributed_routing = True

e、重启neutron-l3-agent和neutron-openvswitch-agent服务

三、启用dhcp实现metadata功能

1、默认情况下,metadata功能通过l3实现,在dvr模式下,如果使用l3实现的话,需要额外配置metadata agent,为了简化,该实验启用dhcp agent来实现metadata功能。

a、在网络节点上编辑/etc/neutron/dhcp_agent.ini

[DEFAULT]

force_metadata = True

b、重启neutron-dhcp-agent服务。

四、DVR到网关流表分析

1、创建router,关联到test1网络(网关192.168.1.1),并在test1网络内创建instance(192.168.1.9),网络模型如下:

 

执行上述操作之后,neutron会在网络节点和计算节点(有instance运行)上都创建一个router的namespace,且配置完全一样。

也就是说,平台中会出现多个相同的router namespace,那么neutron如何实现虚拟机到网关的流量只到本地的router namespace呢?答案是flow table

2、举个例子:

a、在test1内ping网关(192.168.1.1),虚拟机会先发送arp请求去学习网关的mac地址,arp报文会从qvo-xxx端口进入br-int的table0,匹配arp和in_port,根据流表项,resubmit到table24。

b、在table24中匹配arp、in_port和arp_spa,命中之后,resubmit到table25。

c、在table25中匹配in_port和dl_src,命中之后,resubmit到table60。

d、在table60中,命中table-miss flow entry,根据action执行NORMAL。

e、网关地址是配置在router namespace中的qr-xxx上,而qr-xxx是br-int上的。

端口,所以qr-xxx会收到arp请求,并进行相应,arp相应报文会从qr-xxx端口再次进入br-int table0,命中table-miss flow entry,从而进行NORMAL转发,将报文转发给虚拟机的qvo-xxx。

f、虚拟机学到网关的mac地址之后,将icmp报文通过流表,转发给网关,ping流程完成。

3、现在分析neutron如何通过flow table 实现虚拟机到网关的流量只到本地的router namespace。

在上述的d步骤中,命中table-miss flow entry,根据action执行NORMAL,报文可能通过正常转发,到达br-vlan。

a、报文到达br-vlan后,会进入table=0,匹配in_port,命中后,resubmit到table1

b、在table1中,匹配dl_vlan、arp_tpa(arp报文)或者dl_dst,从而把到网关的报文,全部drop。

c、通过上述流表,保证到达网关的报文全部终结在宿主机本地。

五、虚拟机内网通信分析

DVR模式下,虚拟机的内网通信一般有四种场景:同网络同宿主机,同网络不同宿主机,不同网络同宿主机,不同网络不同宿主机,下面将对这四种场景逐一进行分析:

1、同网络同宿主机,不需要通过router,实验模型如下:

 

test1和test2运行在同一台宿主上,执行test1 ping test2。

a、test1通过arp学习到test2的mac地址,流表匹配过程和步骤4(DVR到网关流表分析)中arp学习相同,然后封装icmp报文,从qvo-xxx port进入br-int的table0,匹配in_port,命中后,resubmit到table25。

b、在table25中,匹配in_port和dl_src,命中后,resubmit到table60。

c、在table60,命中table-miss,执行NORMAL转发。

d、test2的qvo-yyy port也在br-int上,报文通过qvo-yyy发送到test2,test2回包给test流程和test1到test2相同。ping流程结束。

2、同网络不同宿主机,不需要router,实验模型如下:

 

test1和test2运行在不同宿主上,执行test1 ping test2。

此场景下,步骤a,b,c和同网络同宿主机场景步骤完全相同,报文会在br-int的table60执行NORMAL,此处不再赘述。

d、执行NORMAL后,报文会从phy-br-vlan port进入br-vlan的table0,匹配in_port,命中后,resubmit到table1。

e、在table1中,命中table-miss,resubmit table2。

f、在table2中,匹配in_port和dl_vlan,命中后,修改local vlan 1为全局vlan 196,然后执行NORMAL,此时报文会离开宿主机,从业务口发出去。

g、报文会被送到运行test2的宿主机业务口,然后进入br-vlan的table0,命中后,resubmit到table3。

h、在table3中,命中后,执行NORMAL,报文被送到br-int。

i、在br-int的table0中,匹配in_port和dl_vlan,命中后,修改全局vlan 196 为local vlan 1,然后执行NORMAL,报文会从qvo-yyy进入虚拟机test2。

j、test2回包和test1发包过程相同,至此,ping操作完成。

3、不同网络同宿主机,需要router,实验模型如下:

 

创建router分别连接两个网络,每个网络上个各创建一台instance,执行上述操作之后,neutron会在网络节点和计算节点(有instance运行)上都创建一个router的namespace,且配置完全一样,qr-设备会被配置上对应网关ip地址。

test1和test2运行在同宿主上,执行test1 ping test2。

a、test1 通过计算知道要到达test2需要走三层,它会先发arp请求,学习网关的mac地址,然后封装icmp报文(目的ip是test2的ip,目的mac是网关的mac地址),通过默认路由,将报文送到本地的router namespace。

(学习网关过程中匹配流表的过程请参考 <4、DVR到网关流表分析>章节)。

b、报文从qr-test1进入router的PREROUTING链,然后查找到test2的路由,命中之后,进入POSTROUTING链,并从qr-test2重新进入br-int的table0。

c、在table0中,命中table-miss,resubmit到table60。

d、在table60中,命中后,执行NORMAL,将报文从qvo-xxx送到test2。

e、test2回包的过程和test1发包过程相同,至此,ping操作完成。

4、不同网络不同宿主机,需要router,实验模型如下:

 

test1和test2运行在不同宿主上,执行test1 ping test2。

此场景下,步骤a,b,c和不同网络同宿主机场景步骤完全相同,

报文从qr-test2出来之后,在br-int的table60执行NORMAL,此处不再赘述。

d、在c中执行NORMAL之后,报文通过int-br-vlan port进入br-vlan的table0。

e、在table0中,匹配in_port,命中之后,resubmit到table1。

f、在table1中,匹配dl_vlan和dl_src,命中之后,修改源mac地址为neutron分配给宿主机mac,resubmit到table2。

注:开启DVR之后,neutron会给每个compute节点分配一个唯一的mac地址,避免物理交换机出现mac地址冲突的问题。

g、在table2中,匹配in_port和dl_vlan,命中之后,修改local vlan 2为全局

vlan 148,执行NORMAL,此时报文会从业务口eth1离开宿主机。

h、报文会进入运行test2的宿主机的业务口eth1进入br-vlan的table0。

i、在table0中,命中之后,resubmit到table3。

j、在table3中,匹配dl_src(neutron分配给宿主机的mac),将报文从phy-br-vlan送出给br-int table0。

k、在br-int的table0中,匹配in_port和dl_src(neturon分配给宿主机的mac),resubmit给table2。

l、在table2中,匹配dl_vlan和dl_dst,修改源mac为test2网关的mac,resubmit到table60。

m、在table60中,匹配dl_vlan和dl_dst ,剥去vlan,通过output将报文直接送到test2。

n、test2回包的过程和test1发包过程相同,至此,ping操作完成。

六、虚拟机出外网原理分析

1、创建一个router,并绑定内部网络test1,设置路由器的网关外网为external,在内网,外网上各创建一台虚拟机,用于测试,实验模型如下:

 

执行上述操作之后,neutron会在网络节点创建三个namespace:qrouter-xxx、fip-yyy、snat-xxx。

计算节点(instance运行)创建qrouter-xxx、fip-yyy。

ps:各节点的namespace会在接下来的分析中说明其作用。

2、虚拟机test1的报文被送到本宿主机router namespace的qr-xxx设备上(上述已经说明,此处不再赘述),进入PREROUTING链(未命中,不做任何修改),查看策略路由,使用默认路由准备进行转发,然后进入POSTROUTING链(未命中),报文从qr-xxx发出,送往192.168.1.11进行处理(流表全部命中NORMAL)。

3、可能有人会有疑问,这里的192.168.1.11是啥?

事实上这个ip地址是neutron分配给snap-yyy namespace的一个ip,被配置在sg-zzz上,snap-yyy namespace在网络节点上,neutron通过策略路由和sg-zzz port将计算节点router namespace中的报文,转发到网络节点的snat-yyy中。

4、此时报文到达网络节点的snat-yyy namespace中的sg-zzz port上,在路由之前报文会进入PREROUTING链(未命中),然后查找路由。

随后进入POSTROUTING链,进行snat,并做连接跟踪,之后报文进行转发。

5、经过上述操作,虚拟机通过snat-yyy中的qg-设备出外网,通过连接跟踪返回(流表命中NORMAL)。

七、Floating ip原理分析

1、在章节6的基础上,从外网分配一个floating ip(10.100.0.7),并关联到虚拟机test1(192.168.1.9)上,并需要自行配置br-ex,用于虚拟机出外网,实验模型如下:

 

执行上述操作之后,neutron会在对应的namespace里面添加若干策略,下面的分析中会逐一说明:

1、虚拟机test1的报文被送到本宿主机router namespace的qr-xxx设备上(上述已经说明,此处不再赘述),进入PREROUTING链(未命中,不做任何修改),查看策略路由。

通过策略路由,将报文通过rfp-6347c62b-2转发给169.254.109.47处理,随后进入POSTROUTING链,做snat修改。

2、到这里,大家可能会有一个疑问,这个rfp-6347c62b-2设备是啥?

事实上这个是veth pair的一端,它的另一端在fip-xxx namespace里面

neutron 使用这对veth pair,将报文从router的namespace里面,通过策略路由,转发到fip-yyy的namespace里。

3、至此,报文到达fip-yyy namespace,进入PREROUTING链(未命中),查看路由。

再进入POSTROUTING链(未命中),从而将报文从fg-7ec56cee-b5设备转发到外网。

4、至此,报文顺利从fg port发送到外网(流表命中NORMAL)。

5、现在开始分析外网设备通过floating ip进入虚拟机的情况。

假设存在一台外网设备external(10.100.0.14)去ping floating ip(10.100.0.7),外网设备首先会通过arp学习10.100.0.7的mac地址,而上述描述中,neutron并没有配置10.100.0.7的ip地址在任何设备上,也就是说,10.100.0.7并不存在,那报文是如何准确的送到fg口的呢?

事实上,neutron在fg port上开启了arp_haproxy功能,相当于进行了arp欺骗,这样,外网设备就将fg的mac地址学习成10.100.0.7的mac,并更新到自己的mac表中。

6、外网报文到达fg口之后,进入PREROUTING链(未命中),查看route表,准备将目的ip为floating ip的报文从fpr-6347c62b-2发送169.254.109.46。

随后进入POSTROUTING链(未命中),报文转发到router的namespace中。

7、报文到达router的namespace中的rfp-6347c62b-2设备,进入PREROUTING链,进行dnat操作。将目的ip从floating ip转换成内部fix ip(192.168.1.9)

随后查看route,准备将报文从qr-xxx port转发。

然后进入POSTROUTING链(未命中),将报文从qr- port转发到虚拟机test1。

8、至此,实现外网设备到内部ip的转发完成。

相关推荐

恭喜! 中移动智家中心入选2020年度ICT行业龙虎榜

1月8日,由信通传媒•通信世界全媒体举办的“2020年度ICT龙虎榜颁奖盛典”在北京顺利举行。会上,中移动智家中心提交参评的“中国移动智慧家庭运营中心视频安防混合云解决方案”实力登榜,被评为“2020年度ICT行业优秀解决方案”。时值岁末年终,作为行业权威媒体,通信世界全媒体进行了2020年盘点,总结了一年ICT行业在技术、市场和产品等各方面取得的成绩,并组织开展了“2020年度ICT产业龙虎榜暨优秀解决方案”评选。本次评选通过编辑推荐、专家评审等流程,历时一个多月时间,最终梳理并评选出在ICT

OpenInfra的博客 847

重磅!九州云获颁“2020年度运营商最佳合作伙伴”奖

1月8日,由信通传媒•通信世界全媒体举办的“2020年度ICT龙虎榜颁奖盛典”在北京顺利举行。会上,“2020年度ICT产业龙虎榜暨优秀解决方案”榜单正式揭晓,九州云获颁“2020年度运营商最佳合作伙伴”奖。通信世界全媒体是由工信部主管的行业权威媒体,是ICT产业的见证者、亲历者和推动者。为了更好的推动ICT产业技术进步,促进行业健康有序发展,鼓励企业创新进步,每年年终通信世界全媒体都会推出重磅盘点,总结一年行业在技术、市场、产品等各方面取得的成绩,并发布“ICT产业龙虎榜”,评选行业优秀解决方

OpenInfra的博客 1188

杭州轨交监管平台边缘云获奖 树立行业新标杆

2020年12月30日,由中国电子技术标准化研究院主办的“第十届中国云计算标准和应用大会”在北京顺利召开。大会期间,优秀案例评选结果正式公布,华东勘测设计研究院的“杭州轨道交通监管平台边缘云”案例实力荣获 “2020年云计算最佳实践奖”。在中国云计算标准和应用大会创办十周年之际,中国开源云联盟组织发起“聚焦数字基建,赋能实体经济”全新奖项评选。该评选旨在总结中国开源云计算领域十年来的发展经验,树立行业标杆典范,推动和落实云计算相关政策,引领新一轮技术创新热潮,为中国企业的数字化转型助力。此次

OpenInfra的博客 705

厉害了!九州云边缘计算管理平台获国家权威认证

2020年12月29日,由中国电子技术标准化研究院主办的“第十届中国云计算标准和应用大会”在北京顺利召开。大会期间,国家权威的云基准测评名单正式对外公布,九州云边缘计算管理平台V1.0通过测评,并在现场获颁证书。中国电子技术标准化研究院作为全国信标委云计算标准工作组以及中国开源云联盟的秘书处归口单位,一直在积极开展云计算国家标准、行业标准、开源团体标准的研制和落地应用工作,标准化成果丰硕。“云基准测评”即是依托中国电子技术标准化研究院的云计算基准库,建立起来的一套覆盖云计算解决方案、云.

OpenInfra的博客 1360

九州未来,2025混合云提供商TOP30

九州未来入选2025混合云提供商TOP30榜单。

OpenInfra的博客 375

九州未来入选信通院“开源大模型+”创新应用典型案例

九州未来Animbus融智一体机入选信通院“开源大模型+”创新应用典型案例。

OpenInfra的博客 339

九州未来亮相联通合作伙伴大会,深化合作共拓融合新生态

2025中国联通合作伙伴大会在上海举行,九州未来作为中国联通长期紧密的产业链合作伙伴参展,重点展示自主研发的AI-Studio大模型推训平台。该平台提供从开发训练到推理部署的全流程AI支持,具备可视化建模、高性能推理、知识库管理等核心功能,加速AI技术在产业中的落地应用。

OpenInfra的博客 506

九州未来邀您共赴2025中国联通合作伙伴大会!

边缘筑基·AI赋能·智联未来,九州未来邀您共赴2025中国联通合作伙伴大会。

OpenInfra的博客 347

共绘智算赋能产业新图景,九州未来出席2025南京软件大会

九州未来受邀出席2025南京软件大会并发表《智算中心赋能新质生产力》主题演讲,分享九州未来在利用智算技术驱动产业升级方面的前沿实践与创新思考。

OpenInfra的博客 329

九州未来亮相第二十届“开源中国开源世界”大会,分享AI边缘计算创新方案

九州未来出席第二十届“开源中国开源世界”大会,分享低轨网络MEC边缘云与AI融合的无单点失效解决方案。

OpenInfra的博客 424

九州未来十三载:开源赋能 智启未来

2012-2025丨让算力更智能,让未来更可见!

OpenInfra的博客 683

九州未来入选2025全国企业“人工智能+”行动创新案例TOP100

九州未来算力基础设施解决方案入选2025全国企业“人工智能+”行动创新案例榜单。

OpenInfra的博客 493

九州未来再度入选“中国边缘计算企业20强”,云边融合驱动智能创新

九州未来再度入选“中国边缘计算企业20强”。

OpenInfra的博客 437

九州未来荣获2024年度吴兴区服务业十佳企业

九州未来荣获2024年度吴兴区服务业十佳企业。

OpenInfra的博客 381

九州未来DeepSeek一体机,H20及L40S加持高效部署,安全无忧!

九州未来DeepSeek一体机,H20及L40S加持高效部署,安全无忧!

OpenInfra的博客 552

九州未来加入全球计算联盟,共筑新型计算产业发展新征程

九州未来正式加入全球计算联盟(GCC)。

OpenInfra的博客 377

九州未来再度入选新一代分布式云/算力50强

九州未来再度入选新一代分布式云/算力50强。

OpenInfra的博客 759

助力数字中国建设,九州未来收到中国信通院感谢信

近日,九州未来收到了来自中国信息通信研究院的感谢信,高度评价并诚挚感谢九州未来在中国信通院牵头的“铸基计划-高质量数字化转型推进行动”中的积极参与和卓越贡献。

OpenInfra的博客 348

九州未来荣登私有云TOP30榜单,赋能企业数字化新未来

九州未来入选《2024私有云企业TOP30》榜单。

OpenInfra的博客 554

一图读懂丨2024年九州未来智算云盘点

2024年九州未来智算云盘点

OpenInfra的博客 247

九州未来智慧物流建设项目入选《2024全国企业数字中国建设优秀应用案例》

九州未来智慧物流建设项目入选《2024全国企业数字中国建设优秀应用案例》。

OpenInfra的博客 318

九州未来亮相全球边缘计算大会,加速AI技术融合

九州未来亮相全球边缘计算大会,加速AI技术融合。

OpenInfra的博客 326

九州未来亮相2024首都工程师主题沙龙,共筑智慧交通新蓝图

九州未来亮相2024首都工程师主题沙龙,共筑智慧交通新蓝图。

OpenInfra的博客 355

共筑智能网联新里程,九州未来应邀出席“5G+算网”车路云一体化联合创新应用基地揭牌仪式

九州未来应邀出席“5G+算网”车路云一体化联合创新应用基地揭牌仪式,共筑智能网联新里程。

OpenInfra的博客 509

开启信息科技跨学科融合新路径,OpenHydra亮相全国中小学人工智能与创客教育大会

开启信息科技跨学科融合新路径,OpenHydra亮相全国中小学人工智能与创客教育大会。

OpenInfra的博客 654

九州未来再度入选2024边缘计算TOP100

九州未来再度入选2024边缘计算TOP100。

OpenInfra的博客 559

三大细分领域入选,九州未来再登2024边缘计算产业图谱

边缘计算社区正式发布《2024边缘计算产业图谱》,九州未来凭借卓越的技术实力、创新能力以及开源贡献,入选边缘计算平台、边缘计算开源、边缘云服务提供商共三项细分领域。

OpenInfra的博客 674

九州未来亓绚亮相丽台Solution Day 2024,共建AI赋能教育新时代

九州未来亓绚受邀参加丽台Solution Day 2024,并作为特邀合作伙伴携OpenHydra AI教育平台亮相展台交流区,带来以“OpenHydra人工智能教育,让老师轻松开展AI实践课”为主题的精彩展示。

OpenInfra的博客 732

九州未来入选2024边缘云计算TOP50

九州未来入选2024边缘云计算TOP50。

OpenInfra的博客 455

《信息技术 开源 开源许可证框架》国家标准发布,九州未来参编

近日,九州未来参与起草的国家标准《GB/T 44272-2024 信息技术 开源 开源许可证框架》正式获批发布,并将于2025年3月1日起正式实施。

OpenInfra的博客 614
上一篇: 使用 Ansible 管理 Kubernetes 资源
下一篇: 重磅 | 九州云两大解决方案获评2018最佳实践奖
OpenInfra
OpenInfra 企业官方账号 企业官方账号
博客等级 码龄9年 393粉丝 307原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值