无网不通,有网则顺:OpenStack Neutron解析

2018-02-09 15:57:11 浏览数 (1)

Neutron是OpenStac环境的核心组件之一,了解Neutron的功能和部署方式,是企业OpenStack系统的规划、部署和运维需要修炼的内功。在本文中,Neutron“大师兄”龚永生为我们详细介绍了Neutron的技术原理和发展方向,主要涉及使用、部署和运维三个层面的内容。

一、Neutron功能介绍

作为OpenStack网络模块,Neutron是分布式的OpenStack Iaas环境核心组件之一。Neutron,或者是Neutron的前身,是为了在分布式环境下面给虚拟机提供网卡,这是它的最基本的要求。此外,Neutron还要虚拟化网络功能的其它元件,比如抽象交换机,抽象负载均衡器,抽象防火墙,抽象NAT。Neutron这个团队是先做API,做模型,先把API画下来,达成比较一致的时候才能往下实现,实现数据库和相关agent等其他的东西。Agent一般会是Linux里面的相关技术来完成。

有了网络元件的虚拟化之后Neutron还要完成把这些虚拟网络元件连起来。大家分散在这儿能干嘛,什么东西都不能干。这是Neutron要干的事情,而且这个在以后会大量的占用Neutron社区人员的工作。

对Neutron来说,图1-1所示

图1-1

我们先看的是虚拟化网络组件,网络端口,ACL,或者是交换机,或者是路由器等等,再是它们之间的互联形成的虚拟网络拓扑,这是最终用户或者是我们在虚拟化看到的景象。在物理层看到外部网络,物理机,交换机,路由器,连接各种网络的网线等。虚拟化网络最终还是要通过物理层面承载,所以我们部署的时候必须要掌握物理之间它们怎么互联,物理网络方面必须快速,稳定。这样我们在Neutron构建虚拟化的网络拓扑的时候才能有一个可靠的承载手段。

总的来说,Neutron要做的事情包括:虚拟化网卡,虚拟化各种网络部件,在虚拟化元件之间互联,把虚拟化和物理网络上打通,这样虚拟化的东西才能走。

二、Neutron体系结构

Neutron主要是用来做模型的,如图1-2所示

图1-2

Neutron这个TEAM的首要工作是定义API,API的核心是它的数据模型。端口在数据模型中占有重要位置。端口首要是作为虚拟机的网卡,然后是路由器端口,端口上面还绑安全组,形成规则来提供端口的访问控制。端口是绑在每个网络上面的,网络能给端口跟别的网络上的端口提供隔离。端口的IP地址从子网来获取。浮动IP是在公网上可以访问的一个IP,在绑定到某个端口之后,这个端口就可以从外界访问了。除了上图显示的一些模型外,防火墙、负载均衡器等都是Neutron模型的一部分。

Neutron的功能组件里头,Neutron Server用来绑定所有的模型。它通过消息队列和所有的agent进行通信,后者真正地把网络模型物理落地。Neutron Server保存的是虚拟网络TOP的模型,今后的版本要把Neutron Server劈开,一半来实现API,另一半和agents进行交互。

网络,端口,子网模型由核心API实现,另外一些API通过扩展实现。如图1-3所示

图1-3

整个OpenStack是插件式,Neutron Server也是如此。Neutron中有核心插件和服务插件的区分,这有社区的实现,也有各个厂商的实现。

部署OpenStack先要定义这些网络:管理网络,数据网络,存储网络,公有网络,甚至内部网络。不管是Nova API,还是Neutron Server,都在控制节点上部署。如图1-4,图1-5和图1-6所示。提供三层网络服务的我们称之为网络节点,防火墙,路由器和DHCP agent等等都在网络节点上。你要访问虚拟机,你要是公有网。我们看部署方案二,它把计算和存储合二为一。因为计算节点服务器可能有很多槽,这些槽不要 浪费了,做一个分布式存储,这样把存储节点合并起来,但是网络节点还在这儿。为什么把网络节点分开?网络节点还是有它的好处,网络安全等等是有特殊性要 求,在这上面单独部署还是挺好。方案三中进一步把网络节点上的功能也并入到计算节点上,这种部署方案可以简化云计算方案中的硬件规范,但是需要做好隔离, 这样网络、存储和计算不会互相竞争CPU,内存和IO资源。

图1-4

图1-5

图1-6

三、Neutron的管理员特权

在Neutron中有两种角色,一个角色是管理员,另一个角色是普通用户。

由图1-3 Neutron的层次图来看,上面是API,有核心API和扩展API。命令neutron ext-list可以看到这个系统有哪些扩展,每个扩展大概是什么意思。因为有了扩展才会有相应的功能。还有超级管理员比较常见的就是neutron agent list,这个命令很关键。还有网络绑定,也只有管理员才能看见,如图1-7所示

图1-7

图1-7 上标注部分只能管理员看到,用户看不到。网络绑定是指虚拟网络在物理网络上面是什么类型。一般的支持五种网络类 型,Gre,vxlan,vlan,flat,local。Physical_network对于vlan,flat类型,指定桥接的bridge。创建 一个虚拟网络,这些字段系统会给普通住户填写,但是如果想创建成某个类型,创建到某个物理网络上面去,管理员是有特权的。用这个特权我们看看创建外部网络 和子网。如图1-8所示

图1-8

我们在部署完一个云之后,管理员上去的第一个任务就是创建它的外部网络,网络类型是local。管理员还要从网络部门拿到一部分的IP地址段和网关,再来创建外部网络子网。

四、Neutron的普通用户工作流程

普通用户的工作流程大概有7步。如图1-9,图1-10和图1-11所示

图1-9

图1-10

图1-11

我们脑袋里面有这个图,对运维来说很关键。我们就知道大概在物理世界会产生什么问题,会起到什么效果。第一步是创建虚拟网络,Neutron 会把它绑定到某个隧道,第二步是创造子网,指定IP地址段、网关,这时在物理上就会有DHCP服务器起来。第三个创建路由器,系统就会把它绑定到某个节 点。第四步就是把这个路由器和子网连起来,这个虚拟路由器就有一个端口会连到虚拟网络,第五步是设置路由器的外部网关,这时网络节点上就有一个虚拟设备把 虚拟路由器和外部网络连接起来。第六步就是做安全规则,第七步就是利用安全组和子网创建虚拟机。整个链条如果很熟悉,排除故障就很简单。

五、Neutron运维

运维人员很多时候是必须要有管理权限,管理人员就是运维。如果我们定义清楚,也可以定义出自己的角色来,把Neutron的角色分工细分一下。下面我们介绍几个在运维中常出现的问题和排错手段。

1. 节点down了,如图1-12所示

图1-12

刚刚部署完了,一看上去全部是down 掉了,down掉了怎么办?我要查整个部署。一查没有部署这个没有部署那个,这时日志很关键。所以在部署的时候要统一日志收集,你在上面就可以看到各种日 志。看Rabbitmq,文件句柄太少了,或者是硬盘太小了,都会影响到rabbitmq接受agent的连接。还有检查Server,看Neutron Server是不是出问题了。最后就是不要出现时间不同步的问题。

2.floatingip不通,如图1-13所示

图1-13

先看看VM是否分配到了固定IP, 是否能通到VM网络的网关。再查询它的安全组规则,看看是否阻止了某种网络流量。再看看这个IP所在的ROUTER是什么,再看看router所在的网络 节点,进入这个路由器所在的名字空间,察看floatingip是否存在。软件方面有时候重启也是能解决问题的。

3.L3节点错误,如图1-14所示

图1-14

L3出错了怎么办?这时可能需要迁移。首先我们把这个L3 agent设为down,down完之后看看这个节点上所有的router。 接着把所有router的管理状态设为down, 然后又设为up, 这时系统就会重新绑定router到其它网络节点。这个过程很复杂,人工去做会影响比较长的时间。现在很多友商用监控,如果L3 agent出错, 启动自动脚本进行迁移。 在Kilo版中, HA router也是一个不错的选择。

4.还有一个端口绑定失败,如图1-15所示

图1-15

这是经常遇到的一个问题。在我的产品中,如果出现绑定失败,就直接抛出错误,这样问题就会第一时间暴露出来。如果不这样做,直接把“binding_failure”写在数据库里面,虚拟机就拿不到IP。怎么解决呢?在Neutron里面只要把这个host_id先置一下,再置回去,这时候能让Neutron agent重新绑定端口,设置正确的TAG.

5.要注意TAG 4095端口,如图1-16所示

图1-16

我们确认port不在Neutron Server中,然后删除ovs port。如果在Neutron Server中有,就要重新改一下,让它的binding重新做。

做OpenStack运维,整个网络流程是必须掌握的。我们看Neutron链路分析,如图1-17所示

图1-17

有观点说,对虚拟机的启动过程进行详细分析后就掌握一半的OpenStack,我认为,把上图分析透了就掌握一半以上的Neutron。

在运维方面,我一直在想能不能有像一个机器人一样的东西。有个知识库,发现问题报告出来,甚至能自动修复,这也是我经常做梦想实现的。其实网络方面还有很深的水,这里只是讲了一部分。SDN,NFV或者是DVDK,都是有意思的东西。(责编/周建丁)

作者简介:龚永生,九州云架构师。多年Linux系统开发,J2EE产品和云计算相关技术研发经验。目前活跃在OpenStack社区的各个项目上,主要技术方向是虚拟网络项目Neutron,是Neutron项目早期的主要贡献者之一。

0 人点赞