openstack 网络发展简史

研究openstack有2个月的时间,这段时间从网上获取N多宝贵资料,对我的学习有很大帮助,在加上我自己的研究,终于对openstack整个网络体系有了个浅显的认识,写几篇文章,一个是对以往资料的总结,二来也希望的我的总结能为更多学习openstack的朋友们提供帮助。废话到这,进入正题。

nova-network:openstack最开始网络组件叫nova-network,其代码也都在nova中,支持的插件只有Linux bridge,网络拓扑包括flat和vlan。

quantum:后来为了支持更多的插件,更多的网络拓扑,与nova交互更灵活,出现了quantum工程,quantum相比与nova-network,主要多出如下功能:

  1. 支持更多的插件:Linux bridge、ovs、其它商业公司的插件(bigswitch、brocade plugin、cisco、hyper-v、midonet、NEC openflow、plumgrid、ryu、VMware nsx),非官方统计,linux bridge 31%、ovs 39%、cisco 11%、other 19%,可以看出网络插件大家更倾向于Linux bridge和ovs,至于bridge和ovs的优缺点,后面会专门讨论;
  2. 支持隧道技术gre、vxlan;
  3. 多出l3-agent和dhcp-agent,l3-agent用于路由和nat(iptables)、dhcp-agent用于fixed ip的dhcp分配(基于dnsmasq实现);

neutron:quantum由于与一家公司重名,在Havana版本中更名为neutron。neutron相比于quantum,多出来的最主要的功能是公共插件ml2。ml2主要功能如下:

  1. 实现一种类型的插件一般包括两个部分,一 部分与数据库db打交道的*-plugin,一部分是调用具体的网络设备真正干活的*-agent,由于众多插件,其与db打交道的代码都是重复的,抽出重复代码则形成了ml2-plugin
  2. MechanismDriver,实现多个插件共存,比如Linux bridge和ovs共存,MechanismDriver的作用是将agent的类型agent_type和vif_type关联,这样vif_type就可以直接通过扩展api灵活设置了,所以想用 linux bridge,就在vif_type里,将port绑定成linux bridge,想用ovs,将port绑定成ovs。
  3. 在配置文件ml2_conf.ini可以将不同网络拓扑(flat/vlan/gre/vxlan)共存。

以上就是目前openstack 网络发展简史,在这个过程中,我们不得不思考一个问题,在实际网络部署时,nova-network和neutron的选择、插件bridge和ovs的选择、网络拓扑flat、vlan、gre、vxlan的选择,这些类别的优缺点在后续blog中会进一步展开讨论。