时间:2016-04-13 17:39 文章来源:http://www.lunwenbuluo.com 作者:李洁 何军 点击次数:
摘要:网络作为信息传输的桥梁,其地位和重要性愈加凸显.在云平台操作系统OpenStack中,Neutron作为提供网络连接服务的功能模块,在OpenStack中有及其重要的作用.本文对Neutron的架构,VM的数据流路径进行了详细的分析,对排查网络问题及优化Neutron性能提出了方向性指引.
关键词:Neutron;OpenStack;虚拟化;云计算
0 引言
OpenStack网络模块最初有Nova-network提供,租户之间通过VLAN实现隔离,支持Multi-Host方案;OpenStack在Diablo版中Quantum以发展项目的形式首次出现,在Essex版有了试用版本的Quantum,到Folsom版Quantum正式发布;Grizzly版本里面网络功能得到了极大的增强,因Quantum商标已被注册,故在Havana版更名为Neutron,以后的版本沿用Neutron冠名OpenStack的网络模块.
1 Neutron简介
Neutron作为OpenStack的网络模块,主要提供网络连接服务(Network connectivity as a service);提供面向租户(Tenant)的API接口,用于创建虚拟网络,路由器,负载均衡等,关联instance到指定的网络和路由;通过API接口管理虚拟或物理交换机;提供plugin架构来支持不同的技术平台.
Neutron网络类似实际物理环境当中的网络,以企业网络架构来说,将企业办公环境全部迁移到云环境中,内部服务器则为VMi服务器之间的交换机属于云环境中的L2层虚拟交换机,而服务器通过DHCP获取的网络地址则是VM的固定IP (FixedIP),企业内网通往外网的路由器则是虚拟网络中的默认网关设备;为向外界用户提供公司的产品服务,当某台物理服务器需要被外界直接访问时需要通过NAT技术给这台物理服务器绑定一个公网IP地址,在云计算网络中也一样,VM的公网IP称为浮动IP(Floating IP).
Neutron的组件架构,Neutron基于C/S架构,Neutron Client (Horizon,Nova等)通过调用NeutronAPI从Neutron服务器获取网络服务,实现网络、子网、端口的创建、设置、删除等操作.Neutron Server的构建基于灵活的Plugin模式,具体服务的提供由Plugin实现,Neutron Server通过Neutron API提供统一的接口.目前Neutron Server支持的Plugin主要有Linux Bridge, Open vSwitch, Cisco NXlOOO, NiciraNVP, Ryu. NECOpenFlow, Floodnight等.
Neutron的几个关键概念:
Network表示一个L2二层网络单元,租户可通过Neutron API创建自己的网络.
Subnet表示一段IPV4/IPV6地址段,为Instance提供私网或公网地址.
Router表示三层路由器,为租户的Instance提供路由功能.
Port表示虚拟交换机上的端口,管理Instance的网卡.
2 Neutron 研究
2.1 Neutron部署模式
Neutron多种部署模式,主要有Single FLATNetwork. Multi FLAT Network, Mixed Flat and PrivateNetwork, Provider Router with private network,Per-tenant Routers with private network, Per-tenantRouters with private network等.用户可以根据业务需求选择部署模式,本文以适用于公有云运营模式的Per-tenant Routers with private network部署方式进行研究.
2.2 Neutron数据流路径概要分析
基于GRE方式时Instance数据流出Neutron路径研究:
(0).图中的br-int为Open vSwitch汇聚交换机,br-tun为Open vSwitch的核心交换机.
(1).VM通过eth0发出数据包;
(2).VM的网卡eth0链接在汇聚交换机br-int上的Tap口;
(3) .br-int接收到数据后通过patch-tun口将数据转发到br-tun的patch-int口;
(4) .br-tun接收到patch-int口传输来的数据,将数据通过gre口转发到网络节点的上的br-tun交换机(计算节点与网络节点通过GRE协议打通,在gre口上写入对端的IP,GRE协议打通的前提条件是计算节点与网络节点IP可达即可);
(5).网络节点的br-tun接收到数据,将数据通过patch-int转发到网络节点的br-int的patch-tun口;
(6).网络节点的br-int交换机接收数据;
(7).网络节点的br-int交换机通过qr口,将数据转发到位于namespaceqr-XXX的路由器13-agent上;
(8).位于namespaceqr-XXX的路由器13 -agent将数据进行SNAT处理后,通过通过网卡qg发送到出口交换机br-ex;
(9).出口交换机br-ex通过物理网卡eth2,将数据发送到云外网络.
基于VLAN方式与基于GRE方式对物理网卡的配置的差异:基于GRE方式是物理机的IP地址是设置在物理网卡eth0上,与一般应用无异,在OpenvSwitch上设置对端物理机的IP地址,GRE能打通的前提条件是IP可达.
基于VLAN时,将ethl设置为交换机br-ethl的一个端口,将ethl设置为混杂模式,物理机的IP地址设置在br-ethl上.基于VLAN方式与基于GRE方式在其他方面并无差异.
2.3 Neutron数据流路径详细分析
Neutron虚拟器件命名规范,Neutron虚拟器件一般以小写字母q打头,q代表quantum (OpenStack网络模块原先叫quantum,取其首字母沿用至今).qbrXXX代表linuxbridge,qvoXXX. qvbXXX为veth对,qvo连在Open vSwitch端,qvb连在Linuxbridge端,qgYYY代表路由器的网卡,连在br-ex交换机上,qrYYY代表路由器的网卡,连在br-int交换机上.
创建VM时,底层要做很多工作才能保证VM可被控制访问外网或实现内网VM的通信.根据OpenStack的L版本下的Neutron,以Open vSwitch为Core Plugin下的VLAN隔离为例,如上图所示,来剖析VM是如何从计算节点连接到网络节点,以及如何通过网络节点联通外网的。具体流程如为:
(1).VM创建时,VM的网卡在计算节点看来是一个TAP设备,和普通网卡一样有MAC地址,TAP设备的命名规范是tap作为命名字符串的前三个字符,后面加对应Port的UUID前11位,总共14个字符,假设其命名为tapXXX;
(2).VM的网卡tapXXX没有直接连在OpenvSwitch (br-int)上,而是在中间连接了一个LinuxBridge (qbrXXX);原因是租户的安全组规则需要使用IPtables来实现,如果直接连接到Open vSwitch的虚拟交换机上会导致安全组功能失效;
(3).VM的网卡tapXXX作为qbrXXX的一个端口;
(4).租户的qbrXXX通过veth pair的虚拟端口直接连接到Open vSwitch交换机(br-int)上,,qvoXXX连在Open vSwitch端,qvbXXX连在Linux bridge端,XXX为对应Port的UUID前11位,tapXXX,qbrXXX,qvbXXX,qvoXXX命名长度都为14个字符.qvoXXX端口在虚拟交换机上都是配置带有VLAN ID的,这里也是不同租户业务报文在VLAN隔离技术下被打上VLAN Tag的地方;
(5).qbrXXX连接的Open vSwitch交换机称为br-int,代表汇聚层设备的意思.与物理网络的汇聚层交换机作用相似,而qbrXXX代表物理网络中的二层交换机.
(6).虚拟交换机br-int是每个计算节点和网络节点都需要存在的,OpenStack的Neutron模块安装后会自动创建;在br-int上,从br-ethl方向转发过来的报文,需要实现VLAN Translation功能,以完成云计算物理设备内网租户到虚拟网络的VLAN ID之间的映射;
(7).虚拟交换机br-int没有直接将物理端口作为其端口成员,而是通过veth pair链接另一个虚拟交换机br-ethl;该虚拟交换机br-ethl也是在Neutron安装完毕后自动创建;
(8).虚拟交换机br-int和虚拟交换机br-tun之间的veth pair.位于br-int上的端口命名为int-br-ethl,而位于br-ethl上的端口命名为phy-br-ethl;这对vethpair在系统部署时自动创建并配置;
(9) .br-ethl直接将物理端口ethl作为其端口成员,通过br-ethl报文在VLAN技术下实现隔离,VLAN隔离在Neutron是通过VLAN Translation实现将从br-int方向转发过来的报文,完成从租户虚拟网络到云计算设备内网的VLAN ID之间的映射;而在GRE或VXLAN隔离时,则是对隧道报文进行封装和解封装的作用;
(10).在VLAN隔离下,网络节点的虚拟交换机br-ethl和计算节点基本一致;而网络节点虚拟交换机br-int配置,则比计算节点多出了些相应隔离域内Dnsmasq进程连接的TAP端口;一个网络(Network)对应一个名称为qdhcp-XXX的namespace,其中XXX为Network ID.
(11).到此,整个租户网络环境实现了联通;租户可以创建任意的虚拟网络,并且同租户VM之间可通过内网相互通信;
(12).只有网络节点才有通往外网的虚拟交换机,通常命名为br-ex,每个网络节点可有多个通往外网的虚拟交换机,但这些通外网的虚拟交换机都只能连接同一个外网,即每个网络节点的L3 Agent只可绑定到一个外网;
(13).当创建一个虚拟路由器时,底层对应创建一个以qrouterYYY开头的namespace,其中YYY为router ID,在这个命名空间中,创建分别以qg和qr开头的两块虚拟网卡,命名以qg的开头的虚拟网卡绑定在br-ex的一个端口,qr开头的网卡绑定在br-int的一个端口,这样br-int和br-ex实现互通,联通了内网和外网;
(14).网络节点的虚拟交换机br-int和br-ex通过在namespace名为qrouterYYY的路由器13-agent相连接,qg开头的网卡IP地址是虚拟路由器设置公网为默认网关是获取的公网IP地址,qr开头的网卡IP地址则是租户内网网关的IP地址内网和外网通过该虚拟路由器中设置IPtables和路由实现内网和外网的互通;相应qrouterYYY中qg开头的网卡设置有公网地址,是br-ex无需具体IP地址即可实现VM与外网通信的根本原因;但每个虚拟路由器设置一个公网IP地址有点浪费.
(15).经过(1)~(15)步骤,在云计算物理机内网上建立的VM租户网络,可以和云计算外网进行互通;云计算租户内网虚拟网络可以任意命名和使用任意规划的网段;
(16).在此基础上,Floating IP和FWaaS服务通过namespace名为qrouterXXX内的路由器设置IPtables规则来实现;LBaas和VPNaaS则通过namespace名为qrouterXXX内相应的功能模块来实现此时Neutron实现了底层网络的互连互通.从上述云计算网络环境VM通信的整个报文转发的流程来看,云计算的网络技术涉及技术点众多,流程复杂,还有很大的优化空间.
3 结论
网络作为信息传输的桥梁,其地位和重要性只会愈加凸显.Neutron未来发展方向从目前的趋势来看,主要有两个重点:一是SDN Controller,SDN的核心理念有三个,第一个控制和转发分离,第二个集中控制,第三个开放的API-网络可编程。OpenStack平台中应用的SDN技术已经成为了云环境中的网络支柱,OpenStack的Neutron本身作为一个SDN网络控制系统,在网络配置方面提供了一种自服务能力,用户可以创建自己的网络并控制流量,实现连接服务器和设备到一个或多个网络。基于Neutron的SDN技术,OpenStack网络实现了一个可扩展的框架,并能部署和管理多种网络服务,如入侵检测系统(IDS),负载均衡,防火墙和虚拟专用网络(VPN)等。二是NeutronDVR,DVR的核心作用是,通过Neutron的东西向横向流量扩展,将L3-Agent同时分布于网络节点和计算节点上,减轻网络节点的L3性能瓶颈/流量集中,实现负载均衡等.当某个租户建立了一个路由的时候,如果某台主机上存在其路由所连接子网的虚机,那么这台主机上就会建立一个路由。所有的东西向流量都会由这个路由进行转发而不是通过网络节点进行转发。如果虚拟机有浮动IP的话,所有的南北向流量也会由这个路由器进行转发而不是由网络节点进行转发。只有没有浮动IP的虚机访问外网的时候,会通过SNAT走网络节点进行转发。通过使用DVR,三层的转发和NAT功能都会被分布到计算节点上,这意味着计算节点也有了网络节点的功能。但是,DVR依然不能消除集中式的Virtual Router,这是为了节省宝贵的IPV4公网地址,故依然将SNAT放在网络节点上提供。
联系方式
随机阅读
热门排行