Openstack学习笔记之——Neutron网络理解

来源:互联网 发布:wps数据透视表怎么拖动 编辑:程序博客网 时间:2024/05/21 22:46

声明:

本博客欢迎转载,但请保留原作者信息!

作者:华为云计算工程师 林凯

团队:华为杭州研发中心OpenStack社区团队



本文是在学习Openstack的过程中整理和总结,由于时间和个人能力有限,错误之处在所难免,欢迎指正!     

    Neutron为openstack的虚拟机提供网络方面的功能;原来没有neutron这个组件(G版名称是Quantum)的时候,网络的主要功能也是在nova组件里实现的,那时候底层采用的大多是linuxbridge,无法实现灵活组网和高级的网络功能;为此Openstack把网络大部分功能转到了neutron组件来开发实现,但是nova里还有些网络功能被保留,比如虚拟机的网卡方面的功能。

关于OpenStack网络代码的演进请参见:http://www.openstack.cn/p353.html

 

1.Neutron的整体架构

OpenStack的网络组件Neutron的整体架构如下图所示:

这个架构,逻辑上可以分为三个部分。最上面的一部分是OpenStack的控制平台,它通过用户操作直接或者间接向网络组件Neutron发送标准的命令。第二层是Neutron组件,它通常是位于一个独立的控制节点上(一台服务器),它有一套标准的API对应上层应用发给它的每个命令,这些API包括create_network、create_port、create_subnet等创建多租户网络以及创建Firewall、Load Balancer等各种业务的API。NeutronAPI从SDN的架构上来看属于北向接口。在Neutron组件内部有很多个不同的插件(plugin),这些插件大多数都是vSwitch插件,例如OVS、LinuxBridge和OpenFlow Controller等,也有部分硬件交换机插件,目前已经存在的包括Cisco、Arista和Mellanox。用户可以选择自己的网络使用哪种方式,然后选择相应的插件,这些插件会处理Neutron API调用,将它们转换为每种插件对应的switch所提供的API调用,然后通过各自定义的方式,发消息去调用虚拟交换机或者物理交换机提供的API,switch API从SDN的架构来看属于南向接口。 

 

2.Neutron抽象出的概念

Neutron提供以下抽象对象:networks,subnets,ports和routers,每个都有映射到他们物理层面的功能:networks包含subnets,routers管理不同的子网、网络之间的路由通信。

任何给定的网络设置有至少一个外部网络。这个网络和其他的网络不一样,不仅仅是一个虚拟定义的网络。他代表从一部分外部网络(外部网络访问Openstack安装)的视角。外部网络的IP地址可以被外网的任何人访问。因为这个网络仅仅代表一部分外部网络,所以DHCP在该网络上被禁止。

对外部网络进行补充,每个网络模块设置有一个或多个的内部网络,在内部网络中每个网络都使能DHCP功能。这些软件定义的网络直接连接在虚拟机上。只要虚拟机在任何给定的内部网络上,或者子网通过接口连接到一个路由器,就可以直接连接到网络访问虚拟机。如下图所示,虚拟机在内部网络中的拓扑结构。

 

每个路由有一个网络使他能被一个网络和许多连接到子网的接口所连接。就像一个物理路由器一样,子网能通过同一个路由访问到不同子网的机器,而且通过路由的网关可访问到外部网络。

更多的,你可以在外部网络把IP地址分配给内部网络端口。你可以将外部网络IP地址与虚拟机上的端口相关联。这样,外部网络上的实体即可访问虚拟机。

Neutron将网络按照三层交换机的概念分为:

Network:相当于交换机根据vlan创建的一个三层接口;

Subnet:相当于交换机创建了一个三层接口地址;

Port:相当于交换机的一个物理端口,但是这个端口有一个MAC地址;

 

 3.Neutron的组件

(1)Neutron Server

这一部分包含守护进程neutron-server和各种插件neutron-*-plugin,它们既可以安装在控制节点也可以安装在网络节点。neutron-server提供API接口,并把对API的调用请求传给已经配置好的插件进行后续处理。插件需要访问数据库来维护各种配置数据和对应关系,例如路由器、网络、子网、端口、浮动IP、安全组等等。

 

(2)ML2(Module Layer2)plugin

上述整体框架中提到Neutron组件内部有很多个不同的插件(plugin),而在Neutron中,实现一个插件包括两个部分的内容:一部分与数据库db打交道称之为plugin(虽然都是plugin,但是这个是具体实现中的plugin),一部分是调用具体的网络设备真正干活的称之为agent。

与db进行交互的plugin在功能上有很多重复,所以在代码上有很多重复,因此在Neutron中提供了一个公共的plugin叫ML2(ModuleLayer2) plugin。所以ML2 plugin的第一个作用就是:提供与数据库交互的公共plugin。

ML2的第二个作用就是实现支持多种pulgin(原先使用linux bridge,就不能用openvswitch),ML2通过MechanismDriver实现。MechanismDriver的作用是将agent的类型agent_type和vif_type关联,这样vif_type就可以直接通过扩展api设置了。

ML2的第三个作用就是支持不同的网络拓扑,如flat, vlan, gre, vxlan,直接在ml2_conf.ini这个配置文件里都配上即可。

 

(3)其他组件

    上面的ml2解决的只是网络中L2层的问题,对于L3层的路由功能,neturon单独用l3-agent实现,为客户机访问外部网络提供3层转发服务。而dhcp-agent负责为各个租户网络提供DHCP服务,至于再之上的L4-L7层的FwaaS,VPNaaS, DNATaaS, DNSaaS的内容,在neutron又出来一个新的服务框架用于将所有这些除L2层以外的网络服务类似于上述ml2的思想在数据库这块一网打尽。

 

    Neutron一旦抛开NSX插件而独立运作,Neutron就会带来多种严重问题,同时在大规模部署的过程中也会出现一些很严重的问题,详见:http://www.cww.net.cn/tech/html/2014/5/15/2014515810046513.htm

    所以有人如是说:成熟的路上漫漫其修远兮,这也正好给各位爱好openstack的童鞋们提供了大显身手的好机会。


参考:

http://www.openstack.cn/p1418.html

http://www.openstack.cn/p353.html

http://www.openstack.cn/p1065.html

0 0
原创粉丝点击