前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >openstack neutron基础(一)-基本概念

openstack neutron基础(一)-基本概念

作者头像
惠伟
发布2021-02-24 11:17:59
7010
发布2021-02-24 11:17:59
举报
文章被收录于专栏:虚拟化笔记虚拟化笔记

neutron架构

neutron分为neutron-server和agent,neutron-server运行在controller节点,agent运行在compute节点和network节点,neutron-server和agent之间通过rpc通信。个人理解neutron就是resource(network, subnet, port,security_group)和对resource的extension(qos等)的CUD(create, update, delete),真正实现CUD操作重担落在各种plugin的肩膀上。

  • neutron-server

openstack各大组件都向外提供API服务,neutron也不例外,有neutron-server跑在controller节点,提供标准的api,还有各种extension实现api功能的扩展。ML2 plugin作为核心插件实现api中的network,subnet,port和security_group,还支持一些extension,主要实现layer 2转发的功能。高级services的plugin实现更多的高级功能,如l3_router实现layer 3的功能,主要是三层转发和NAT的功能,其它plugin还能实现LB,FW和VPN的功能。

neutron-server DB层是做什么的?

neutron-server肯定得把network,subnet,port等相关的信息存放在数据库中,还得定义数据存放的格式和数据之间的关系,以及新加属性后的升级等,DB层提供的功能保证数据操作是安全和一致性的,总之DB层是通用层,DB操作交给这层就行了,不用其它层操心。

plugin是什么玩意?

plugin继承DB层定义的类和方法,然后实现对agent的notify和RpcCallback。api请求来之后先对数据库进行操作,然后再通知agent进行动作,或者收到agent rpc消息进行相应的操作。

ML2 plugin又是干什么的?

ML2= multiple layer 2,实现了多种多样的layer 2转发类型,如flat,vlan,VXLAN和GRE,同样实现vlan转发既可以用ovs也可以用linux bridge,所以又搞出个type_driver和mechanisim_driver。typedriver是抽象层面的概念,每种类型的网络都是不一样的,表示的信息不一样,如vlan网络就是vlan id了,vxlan网络就是vni了,所以一种type_driver表示一种网络,创建这种类型的网络就用对应的type_driver做检查和分配信息,如vlan id是否够用,分配一个vlan id或者指定的vlan id是否已经被占用。mechanisim_driver可以认为是实现机制,也可以认为它是ML2的plugin,这个ML2的plugin可以和对应的l2 agent通信,linux bridge agent可以实现基于vlan的转发,ovs agent也可以实现基于vlan的转发,那么linux bridge和ovs就是两种实现机制,所以每种实现机制需要向neutron-server报告自己支持的网络类型和接口类型,还有是否支持security_group等。

service plugin又能干什么?

service plugin就是更高级功能的plugin,包括l3_router plugin实现的是三层转发和NAT功能。service plugin也分为type和provider,类比ML2 plugin,type就是routing,firewall, vpn和lb,privider就是driver,同样是routing,可以用l3 agent的namespace实现转发,也可以用H3C的硬件来实现,只要H3C提供plugin就行了。

  • agent

agent运行在compute node或者network node,是具体干活的,控制数据面转发机制,把流量打通,如已经用到的dhcp-agent, linux-bridge-agent,l3-agent,openvswitch-agent,metadata-agent等等,agent和neutron-server侧的plugin进行交互。

  • neutron-server和agent通信机制

neutron原生实现agent和neutron-server之间用消息队列通信,neutron-server可以push,agent进行pull,或者agent定时信息同步,然后agent调用命令搭建数据面的路径。agent也可以是SDN controller,厂商自己实现的plugin通过其它方式和controller通信,对接了SDN controller就不再需要原生的那些agent了,如H3C vcf和contrail。

总结

neutron牛逼之处在于它融入了openstack生态,大家接受度比较高,有社区推广,整体比较认同它的api,并且api可扩展,再一点和nova结合紧密,掌握所有VM的IP和MAC,所以再高大上的SDN controller也只能作为它的一个plugin。北向接口比较清晰,但南向接口委托给agent了,和转发面接口不明确。首包上送没有的,miss到controller不存在的,高可用性自己实现,动态路由交给agent实现,分布式controller算是一点吧,完全体现了大的开源社区做软件的方法,先做出来一个基础版本有基础功能能用再说,把握核心,改进可扩展性,厂商随便加plugin,agent随便加以便实现更多功能。到底算不算是一个SDN controller,不知道,也已经不重要了,全是摸着石头干出来的,能解决实际问题就行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • neutron架构
  • 总结
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档