OpenStack Neutron浅析(二)

计算、存储和网络,奠定了当今云计算格局的三足鼎立之势。

计算通过虚拟化CPU、disk、Memory等硬件来获得高效的应用;存储通过分布式的文件系统,提供了众多特性的功能。而相对于,计算和存储两方面的成熟与稳定,网络一直以其在稳定、效率、设计等方面,而备受人们爱之、痛之。

随着物联网和云计算的蓬勃发展,网络作为信息传输的桥梁,其地位和重要性只会愈加凸显。从另一种角度而言,鉴于Neutron的高度复杂性。我们将陆续由浅入深的予以阐述和讲解Neutron。

同时,自己也在学习过程中,深感水平有限,如有不当之处,恳请指正,乃不胜感激。

注意

  1. 学习Neutron,你可能需要网络方面的基础理解。
  2. 本篇,我们主要从下面出自官网(Neutron VXLAN模式)的图,讲解Neutron世界中虚拟出来的各种“网桥”;以及Compute节点上的VM,是如何历经千山万水,到达Network节点上和外网握手的。
  3. 记忆与理解下图后,将有助于理解Neurton机制。
    OpenStack Neutron浅析(二)_第1张图片

从这张架构图中,我们可以明显的看到有两个物理主机,计算节点和网络节点。

计算节点:虚拟机网络

在上面的高清图中,我们先来看看A、B、C这三段的流程。A就是虚拟机VM1的虚拟网卡,首先来说,它是一个以tapxxxx命名的网络设备。和它相连的B也是一个TAP设备,通常是以tap开头的一段名称,它挂载在Linux Bridge qbr-XXXX上面。

OK,现在我们有点晕头了。

什么是TAP设备呢?Linux 中的虚拟网络给出了这样的解释:

TAP是一个虚拟网络的内核驱动,该驱动实现了Ethernet设备(网卡),并在Ethernet框架级别操作。TAP驱动提供了Ethernet “tap”,访问Ethernet框架能够通过它进行通信。

总而言之,TAP设备其实就是一个Linux内核虚拟化出来的一个网络接口。OK,我们现在简单粗暴的知道了TAP设备,如果还是不明白可以Google之TAP的具体定义。

接下来就是qbr了,这在上面有提到,这是一个Linux Bridge,很是奇怪,我们在OpenStack中,明明已经使用了OpenvSwitch来实现虚拟二层交换设备的,为什么又会出现Linux Bridge呢?

所谓,存在即合理。这是因为OpenvSwitch不支持现在的OpenStack 部分高级网络功能的实现方式(至少目前还是这样的)。因为OpenStack把iptables规则丢在了TAP设备中,以此实现了安全组功能。没办法,所以用了一个折衷的方式,在虚拟机到OpenvSwitch的中间加了一层,用Linux Bridge来实现吧,这样,就莫名其妙的多了一个qbr网桥。在qbr上面还存在另一个设备C,这也是一个TAP设备。C通常以qvb开头,C和OpenvSwitch之br-int上的D连接在了一起,形成了一个连接通道,使得qbr和br-int之间可以顺畅通信。

计算节点:集成网桥(br-int)的网络

刚才说到D(这也是一个TAP设备)在br-int上面,现在轮到br-int出场了,br-int是由OpenvSwitch虚拟化出来的网桥,但事实上它才是充当了一个真正虚拟交换机的功能。

br-int的主要职责就是把它所在的计算节点上的VM都连接到它这个虚拟交换机上面,然后利用下面要介绍的br-tun的穿透功能,实现不同计算节点上的VM连接在同一个逻辑虚拟交换机上面的功能。这个似乎有点拗口,其实就是在管理员看来,所有的VM都是连接在一个虚拟交换机上面的,但事实上这些VM又都是分布在不同的物理主机上面。

OK,回到D上面,D通常以qvo开头。在上面还有另一个端口E,它总是以patch-tun的形式出现,从字面上就可以看出它是用来连接br-tun的。

计算节点:通道网桥(br-tun)的网络

br-tun在上面已经提及了,这同样是OpenvSwitch虚拟化出来的网桥,但是它不是用来充当虚拟交换机的,它的存在只是用来充当一个通道层,通过它上面的设备G与其他物理机上的br-tun通信,构成一个统一的通信层。

这样的话,网络节点和计算节点、计算节点和计算节点之间就会点对点的形成一个以GRE(使用通用路由封装协议来实现)、VXLAN(主要是将二层的MAC封装在三层的UDP协议中来实现)为模式的Neutron通信网络,互相之间通过这个网络进行大量的数据交换。这样,网络节点和计算节点之间的通信就此打通了。而图中的G、H描画的正是这一通信。

网络节点:通道网桥(br-tun)的网络

正如前面所说,网络节点上也是存在一个br-tun的,它的作用同计算节点上的br-tun如出一辙,都是为了在整个系统中构建一个统一的通信层而存在的。所以,这一部分的网络同计算节点上的网络功能是一致的,因此,这里将走过。

网络节点:集成网桥(br-int)的网络

网络节点上的br-int也是起了一个虚拟交换机的作用,它通过I、J与br-tun连接在一起。

最重要的是,在这个虚拟交换机上,还有其他两个重要的tap设备M、O,它们分别同N、P相连,而N、P作为tap设备则是分别归属两个NameSpace,即router和dhcp,没错,正如这两个NameSpace的名称所示,它们承担的就是router和dhcp的功能。

这个router是由l3-agent根据网络管理的需要而创建的,然后,该router用于和特定的租户子网绑定在一起,用于实现该子网内的IP地址的路由转换功能。router实现路由功能,则是依靠在Linux namespace中的iptables实现的(关于iptables,我们将在后续文章中予以剖析)。

dhcp则也是l3-agent根据需要针对特定的子网创建的,在这个namespace中,l3-agent会启动一个dnsmasq的进程,由它来实际掌管该子网的dhcp功能。由于这两个namespace都是针对特定的子网创建的,因而在现有的OpenStack系统中,它们常常是成对出现的。

网络节点:外部网桥(br-ex)的网络

当数据从router中路由出来后,就会通过L、K传送到br-ex这个虚拟网桥上,而br-ex实际上是混杂模式加载在物理网卡上的,实时接收着网络上的数据包。至此,我们的计算节点上的VM就可以与外部的网络进行自由的通信了。当然,前提是我们已经给这个VM已经分配了floating-ip。

至此,关于OpenStack Neutron网桥的概念性分析大致描述到此。

原文链接:http://trystack.cn/Articles/OpenStack-Neutron.html

你可能感兴趣的:(云)