“OpenStack:Neutron组件介绍”的版本间的差异
(→从云计算角度看Neutron) |
(→Neutron的典型应用) |
||
第39行: | 第39行: | ||
[[文件:openstack8-29.png]] | [[文件:openstack8-29.png]] | ||
− | + | 在这个图中,我们有一个和互联网(互联网可以由其它网络代替,比如办公网络)连接的外部网络。这个'''外部网络'''是租户虚拟机访问互联网或者互联网访问虚拟机的途径。外部网络有一个'''子网''',它是一组在互联网上可寻址的IP地址。一般情况下,外部网络只有一个(neutron是支持多个外部网络的),且由管理员创建。'''租户网络'''可由租户任意创建。当一个租户的网络上的虚拟机需要和外部网络以及互联网通信时,这个租户就需要一个'''路由器'''。路由器有两种臂,一种是gateway网关臂,另一种是interfaces接口臂。网关臂只有一个,连接外部网。接口臂可以有多个,连接租户网络的子网。 | |
[[文件:openstack8-30.png]] | [[文件:openstack8-30.png]] |
2021年12月4日 (六) 07:21的最新版本
Neutron在OpenStack中的位置
Neutron的前世今生
nova-network
nova-network:OpenStack 一开始的选择
稳定,结构简单,但目前仅支持linux bridge一种插件.
Nova :小OpenStack
拿Openstack网络的neutron组件来介绍下,Neutron为openstack的虚拟机提供网络方面的功能;原来没有neutron这个 组件(G版名称是Quantum)的时候,网络的主要功能也是在nova组件里实现的,那时候底层采用的大多是linux bridge,无法实现灵活组网和高级的网络功能;为此Openstack把网络大部分功能转到了neutron组件来开发实现,但是nova里还有些网络功能被保留,比如虚拟机的网卡方面的功能。其实,Openstack里网络功能是最复杂的功能,很多计算和存储方面的问题都是和网络紧密相关的。连 Openstack的官网也说配置neutron是Openstack里最让人感觉繁琐的事情之一。[7]
其实Neutron原先不叫Neutron。Neutron的原名叫Quantum。Quantum(Neutron的前身)在Openstack的Folsom(2012年9月发布)版本正式发布,其实它已经作为试用组件包含在之前的 Essex版本中。在Grizzly里功能得到了增强。因为商标侵权的原因,Openstack在Havana版本上将Quantum更名为 Neutron,所以Neutron并不是什么新的东西。在Havana版里,Neutron也只增加和增强了少数功能。[6]
nova-network和neutron的对比
- nova-network:稳定,结构简单,但目前仅支持linux bridge一种插件;
- neutron:可以支持bridge、ovs等众多插件,并且通过ml2技术可以实现众多插件混合使用,引入openflow等sdn技术,是控制逻辑 和物理网络相隔离。但neutron目前最大的问题是稳定性(例如创建过多的vm,host会无故重启,neutron服务会无故down 掉,floating ip无法正常释放等.[9]
Neutron的结构框架
从云计算角度看Neutron
云计算的概念就是:按需分配,高扩展性。
类似于各个计算、存储节点被虚拟化为计算、存储资源池,Openstack所在的整个物理网络在Neutron中也被虚拟化为网络资源池。通过对网络资源的划分和可扩展性,Neutron能够为每个租户提供独立的虚拟网络环境。[5]Neutron设计的初衷,就是为了在分布式环境下面给虚拟机提供网卡,这是它的最基本的要求。此外,Neutron还要虚拟化网络功能的其它元件,比如虚拟交换机,虚拟负载均衡器,虚拟防火墙,虚拟NAT。
在这些虚拟网络功能的帮助下,基础物理网络就可以重新划分网络资源,向每个租户提供独立的网络环境。
“云”是一个庞大的资源池,你按需购买;云可以像自来水,电,煤气那样计费,用多少买多少。如果你是一个网站站主,比方说12306.cn,你不必一开始就把所有的服务器和计算资源都买好,而是可以在网站的平常时段保持一个较低的云计算配置,在网站高峰期(春运)再进行弹性的扩展,用多少买多少。
新建立的云主机,需要计算能力,需要存储,需要网络。。。
- Glance 为 VM 提供发现,存储和检索虚机镜像的功能
- Cinder 和 Swift 分别为 VM 提供块存储和对象存储
- Nova:提供按需分配的虚拟机,处理虚拟机的的启动、挂起、重启等操作。它类似于Rackspaces的cloud servers和亚马逊的Amazon Elastic Compute Cloud(EC2)
- Neutron : 为 VM 提供网络连接
Neutron的典型应用
在这个图中,我们有一个和互联网(互联网可以由其它网络代替,比如办公网络)连接的外部网络。这个外部网络是租户虚拟机访问互联网或者互联网访问虚拟机的途径。外部网络有一个子网,它是一组在互联网上可寻址的IP地址。一般情况下,外部网络只有一个(neutron是支持多个外部网络的),且由管理员创建。租户网络可由租户任意创建。当一个租户的网络上的虚拟机需要和外部网络以及互联网通信时,这个租户就需要一个路由器。路由器有两种臂,一种是gateway网关臂,另一种是interfaces接口臂。网关臂只有一个,连接外部网。接口臂可以有多个,连接租户网络的子网。
Neutron的结构
1)位于最上层的Neutron Server充当一个门派中的“掌门人”角色(RESTful Server),负责接受来自外部门派(项目)的API请求,比如Nova API创建网络的请求。
2)位于中间层的Neutron plugin充当一个门派中的“信使”角色,负责传达最高层指令给下面的人。
3)位于下层的Neutron Agent充当一个门派中“干活”角色,负责执行一些具体的任务和操作。
类似于各个计算、存储节点被虚拟化为计算、存储资源池,Openstack所在的整个物理网络在Neutron中也被虚拟化为网络资源池。通过对网络资源的划分和可扩展性,Neutron能够为每个租户提供独立的虚拟网络环境。
Neutron Server
位于最上层的Neutron Server充当一个门派中的“掌门人”角色(RESTful Server),负责接受来自外部门派(项目)的API请求,比如Nova API创建网络的请求。与其他项目服务不同,Neutron只有一个主要的服务进程neutron-server,它运行于网络控制节点上,提供RESTful API作为访问Neutron的入口,neutron-server接收到的用户HTTP请求最终由遍布于计算节点和网络节点上的各种agent来完成。
Neutron plugin
位于中间层的Neutron plugin充当一个门派中的“信使”角色,负责传达最高层指令给下面的人。Neutron提供的众多API资源对应了前面所讲的各种虚拟网络资源。其中L2的抽象network/subnet/port可以被认为是核心资 源API(Core API),其他层次的抽象,包括router以及众多的高层次服务则是扩展资源API(Extension API)。为了更容易的进行扩展,Neutron项目利用Plugin的方式组织代码,每一个Plugin支持一组API资源并完成特定的操作,这些操作最终由Plugin通过RPC调用相应的Agent来完成。
这些Plugin又被做了一些区分,一些提供基础二层虚拟网络支持的Plugin称为Core Plugin。而Core Plugin之外的其他Plugin则被称为Service Plugin,比如提供防火墙服务的FWaaS等。Agent一般专属于某个功能,用于使用物理网络设备或一些虚拟化技术来完成某些实际的操作,比如实现router具体操作的L3 agent。因为各种Core Plugin的实现之间存在很多重复的代码,比如对数据库的CRUD等操作。自H版起,Neutron实现了一个ML2 Core Plugin,它采用了更加灵活的结构进行实现,通过Driver的形式对现有的各种Core Plugin提供支持,因此可以说ML2 Plugin的问世意在取代目前的Core Plugin。
对于这些plugin的使用情况,有一些非官方统计:
Neutron Agent
位于下层的Neutron Agent充当一个门派中“干活”角色,负责执行一些具体的任务和操作。
Neutron项目利用Plugin的方式组织代码,每一个Plugin支持一组API资源并完成特定的操作,这些操作最终由Plugin通过RPC调用相应的Agent来完成。 比如:
- 插件代理 (Plugin Agent): 虚拟网络上的数据包的处理这些插件代理来完成的。名字为neutron-*-agent。在每个计算节点和网络节点上运行。一般来说你选择了什么插件,就需要选择相应的代理。代理与Neutron Server及其插件的交互就通过消息队列来支持。
- DHCP代理(DHCP Agent):名字为neutron-dhcp-agent,为各个租户网络提供DHCP服务,部署在网络节点上,各个插件也是使用这一个代理。
- 3层代理 (L3 Agent): 名字为neutron-l3-agent, 为客户机访问外部网络提供3层转发服务。也部署在网络节点上。
下面这张图取自官网,很好的反映了Neutron内部各部分之间的关系。(SDN服务在这里是额外的外部功能,可以暂时略过。
Neutron 常用的网络模型
在一窥Neutron的内部结构后,让我们再从Neutron的内部结构中走出来,看看Neutron能用来搭建什么网络.一共能搭3种网络[7]。根据分类的不同,有人也把这些模型归为4类,都行。
Flat 模式(OpenStack nova-network 网络模型)
Flat模型最为简单,所有的虚拟机共用一个私有IP网段,IP地址在虚拟机启动时完成注入,虚拟机间的通信直接通过HyperVisor中的网桥转发, 公网流量在该网段的网关上进行NAT(Nova-network实现为开启nova-network主机内核的iptables,Neutron实现为网 络节点上的l3-agent)。还有一种Flat DHCP模型,Flat DHCP模型与Flat区别在于网桥中开启了DHCP进程,虚拟机通过DHCP消息获得IP地址(Nova-network实现为nova- network主机中的dnsmaq,Neutron实现为网络节点上的dhcp-agent)。
单一平面网络的缺点:
- 存在单一网络瓶颈,缺乏可伸缩性。
- 缺乏合适的多租户隔离。
VLAN模型
VLAN,是英文Virtual Local Area Network的缩写,中文名为"虚拟局域网", VLAN是一种将局域网(LAN)设备从逻辑上划分(注意,不是从物理上划分)成一个个网段(或者 说是更小的局域网LAN),从而实现虚拟工作组(单元)的数据交换技术。
VLAN模型引入了多租户机制,多租户公有云数据中心的目标是使客户能够获得与其私有云数据中心相同的体验。虚拟机可以使用不同的私有IP网段,一个租户可以拥有多个IP网段。虚拟机IP通过DHCP消息获取IP地址 (Nova-network实现为nova-network主机中的dnsmaq,Neutron实现为网络节点上的dhcp-agent)。网段内部虚 拟机间的通信直接通过HyperVisor中的网桥转发,同一租户跨网段通信通过网关路由,不同租户通过网关上的ACL进行隔离,公网流量在该网段的网关 上进行NAT(Nova-network实现为开启nova-network主机内核的iptables,Neutron实现为网络节点上的l3- agent)。如果不同租户逻辑上共用一个网关,则无法实现租户间IP地址的复用。
VLAN的好处主要有三个:
- 端口的分隔。即便在同一个交换机上,处于不同VLAN的端口也是不能通信的。这
样一个物理的交换机可以当作多个逻辑的交换机使用。
- 网络的安全。不同VLAN不能直接通信,杜绝了广播信息的不安全性。
- 灵活的管理。更改用户所属的网络不必换端口和连线,只更改软件配置就可以了。
Overlay模型(主要包括GRE和VxlAN隧道技术)
在需要支持多租户的数据中心里,这项技术用于通过第3层物理网络形成虚拟第2层网络的隧道
为了以隧道的方式传输这些数据包,可以使用特定的标签来封装他们。
- Overlay通过私有网络实现每个租户创建自己专属的网络区段
- 一般来说每个租户逻辑上都有一个网关实例,IP地址可以在租户间进行复用
- 租户数量从4K增加到16million
Neutron 网络模型总结
OpenStack 虚拟网络 Neutron 把部分传统网络管理的功能推到了租户方,租户通过它可以创建一个自己专属的虚拟网络及其子网,创建路由器等等,在虚拟网络功能的帮助下,基础物理网络就可 以向外提供额外的网络服务了,比如租户完全可以创建一个属于自己的类似于数据中心网络的虚拟网络。Neutron 提供了比较完善的多租户环境下的虚拟网络模型以及 API。像部署物理网络一样,使用 Neutron 创建虚拟网络时也需要做一些基本的规划和设计。
参考文献:
[1]Neutron网络入门 https://www.ustack.com/blog/neutron_intro/ [2] 开发人员必读openstack网络基础1:什么是L2、L3 http://www.aboutyun.com/forum.php?mod=viewthread&tid=9647&highlight=%BF%AA%B7%A2%C8%CB [3] OpenStack 网络:Neutron 初探 http://www.ibm.com/developerworks/cn/cloud/library/1402_chenhy_openstacknetwork/ [4] OpenStack网络组件Neutron的研究 http://www.server110.com/openstack/201403/6926.html [5] 【原理解析】OpenStack Neutron架构指南 http://cloud.51cto.com/art/201508/488584.htm [6] Neutron笔记 http://lindingyu.iteye.com/blog/2082793 [7] Openstack之neutron简介 http://www.openstack.cn/?p=1065 [8] SDNLAB技术分享(八):Neutron的基本原理与代码实现 http://www.sdnlab.com/16364.html [9] 能说说使用neutron不使用nova-network的原因吗? https://www.zhihu.com/question/27041066 [10] openstack研究:neutron网络见解 http://blog.chinaunix.net/uid-7374279-id-4813735.html