《深入理解OpenStack Neutron》—3.2 计算节点的实现模型

举报
华章计算机 发表于 2019/05/30 11:56:39 2019/05/30
【摘要】 本书摘自《深入理解OpenStack Neutron》一书中的第3章,第3.2.1节,作者是李宗标。

3.2 计算节点的实现模型

本书的主题是Neutron,所以本节的内容“计算节点的实现模型”指的是计算节点的网络实现模型。

一个基于OpenStack的云系统会有很多计算节点,一个计算节点就是一个Host。计算节点里充满了VM,这些计算节点也是OpenStack存在的基础。但是VM不能像一个个孤岛一样存在,VM之间必须能通信,而且是能跨Host通信。简单地说,通信分为二层通信和三层通信。二层通信需要Bridge,三层通信需要Router。Router位于网络节点,将放到下一节讲述。本节主要是讲述二层通信(或者叫二层网络)。

在OpenStack/Neutron的语境里,网桥(Bridge)与交换机是一个含义。

在讲述计算节点的实现模型之前,我们首先设想这样一个场景:两个主机(Host)位于一个机架(Rack)内,这两个主机分别虚拟出N个VM。从每个Host内调出若干个VM,组成一个二层网络(可以先想象为一个VLAN)。这样一个场景需要的物理设备有:机架、主机、TOR交换机(Top of Rack,就是位于机架顶端的交换机)。图3-3是一个数据中心的场景,我们可以直观感受一下那一排排机架。

在这个场景中,我们忽略Neutron的控制节点,也不考虑场景中的虚拟机需要与外部网络(比如Internet)通信(即也忽略网络节点),就只考虑计算节点之间的VM的二层通信。基于这样的忽略,所得出的计算节点的“抽象”模型如下图3-4。

image.png

图3-3 数据中心一排排机架 图3-4 计算节点的“抽象”模型

之所以把“抽象”二字打个引号,是因为图3-4并没有绝对地抽象,其中物理网络那部分就没有抽象,还是引用了一个实际的设备TOR。

图3-4中的TOR的外围的方框(DC)物理网络是Neutron里面一个非常重要而且非常烦人的概念,不过这里我们只是画在那里,暂时搁置它。这个概念留待第4章再解释。这里我们只需这样理解:从模型上讲,有这么一个名词;从概念上讲,先理解为一个TOR交换机(这么理解不会对下面的模型讲述造成困扰)。

图3-4中有两个计算节点,每个Node都是一个Host。这个很好理解,毕竟OpenStack就是为云而服务的,而所谓云,在一个Host内虚拟出若干个VM是云的基础。所以,我们在图中也看到,每一个计算节点里面有若干个VM。

图中,Security Layer,大白话就是实现Firewall(防火墙)功能。Integration Layer是实现综合网络功能(交换/路由)的一层。

其实,防火墙也是网络功能的一部分,这里只是特意将防火墙功能专门列出来而已,并不是说防火墙功能就不是网络功能的一部分。以下涉及名词“网络功能”时,有时候是包括防火墙功能的,这一点请留意。

从实现载体来说,(DC)物理网络一般由厂商的各种物理设备组成,Security Layer和Integration Layer一般由各种虚拟网元组成。不过这不是最主要的,最主要的是(DC)Physical Network不在Neutron的管理范围内。在计算节点的抽象模型中,Neutron所能管理的仅仅是Security Layer、Integration Layer这两层的网元。这两层网元实现了多种类型的二层网络。

Neutron当前支持的二层网络类型有Local、Flat、VLAN、GRE、VXLAN、Geneve 6种,每种类型的网络实现模型都有所不同。本节将选取其中比较典型的VLAN、VXLAN、GRE三种类型网络进行讲述。

3.2.1 VLAN实现模型

Neutron的VLAN实现模型,如图3-5所示。

image.png

图3-5表达的是两个Host内的4个VM,分别属于两个VLAN:VM1-1与VM2-1属于VLAN 100,VM1-2与VM2-2属于VLAN 200。br-ethx、br-int、qbr-xxx、qbr-yyy都是Bridge,

只不过实现方式不同。前两者选择的是OVS(Open vSwitch),后两者选择的是Linux Bridge。

这些Bridge构建了两个VLAN(VLAN ID分别为100、200)。不同的Bridge之间、Bridge与VM之间通过不同的接口进行对接。

下面将围绕这些内容,做一个介绍。

1.?VM与VLAN ID

图3-5中4个VM组成两个VLAN,VLAN

 ID分别为100和200。这两个VLANID有一定的说法,即有内外之别。我们先讲解内外之别是什么,后面再讲述为什么需要这个内外之别。我们首先看图3-6。

image.png

图3-6是对前面的实现模型的一个更加简化的模型:忽略掉那些各种各样的Bridge,

各种各样的tap,veth pair等接口。简单理解,一个Host内有一个Bridge,Bridge连接着虚拟机。但是图3-6中4个虚拟机的VLAN 

ID分别变成了10、20、30、40,与图3-5中的100、200完全不是一个概念。这就涉及内外视角所看到的VLAN ID的不同。

外部视角是用户视角,它不关心内部实现细节,它只需知道创建了两个VLAN网络,VLAN ID分别为100、200,每个VLAN里有两个VM,如图3-7所示。

image.png

内部视角是在Host内部,如图3-6所示,4个VM的VLAN ID完全不是什么

100、200,而是10、20、30、40。

内外视角的区别,如表3-1所示。

表3-1 VLAN ID的内外之别

image.png

为什么会有这样的内外之别,我们放在下一个小节来讲述。这里我们需要知道两点:

1)存在这样的内外之别。

2)这个内外之别需要做VLAN ID转换,而转换的功能,就是由Host内相应的Bridge来实现(这个我们下面就会讲述)。

Neutron的用户分为两种:一种是租户,一种是管理员。租户创建的网络称为租户网络,管理员创建的网络称为运营商网络,详见第4章。不过本章不做区分,统统称为用户网络。

2.?qbr及br-int

图3-5中的qbr-xxx、qbr-yyy一般简称qbr。qbr这个缩写比较有意思,它是Quantum Bridge的缩写,而OpenStack网络组件的前一个商标名就是Quantum,只不过由于版权的原因,才改为Neutron。从这个称呼我们也能看到Neutron里面Quantum的影子。

图3-5中的br-int,表达的是Integration Bridge??(综合网桥)的含义。至于它到底“综合”了哪些内容,我们这里先不纠结,我们就当它是一个普通的Bridge。

qbr与br-int都是Bridge。qbr的实现载体是Linux Bridge,br-int的实现载体是OVS(Open vSwitch)。需要强调的是,并不是绝对地说qbr一定就是Linux Bridge,br-int一定就是OVS,也可以用其他的实现方式来替换它们。只不过这样的实现方式是当前OpenStack解决方案的比较经典的方式而已。

qbr与br-int之间,通过veth pair连接,VM与qbr之间,通过tap连接。其实VM与qbr

之间只有1个tap,也就是说是1个tap分别挂接在VM和qbr之上。图3-5在VM和qbr之上各画了1个tap只是一种“艺术”的加工,以便于阅读和理解。

这里面有个问题:为什么需要两层Bridge?VM先接qbr(Linux Bridge),再接br-int(OVS),为什么不是VM直接接入br-int?原因有两点:

1)如果只有一个qbr,由于qbr仅仅是一个Linux Bridge,它的功能不能满足实际场景的需求(具体哪些场景,我们在后面涉及时会点到)。

2)如果只有一个br-int,由于br-int实际是一个OVS,而OVS比较任性,它到现在竟然还不支持基于iptables规则的安全组功能,而OpenStack偏偏是要基于iptables规则来实现安全组功能。

所以OpenStack引入qbr其目的主要就是利用iptables来实现security group功能(qbr有时候也被称为安全网桥),而引入br-int,才是真正为了实现一个综合网桥的功能。

3.?br-ethx

br-ethx也是一个Bridge,也是一个OVS,它的含义是:Bridge-Ethernet-External。顾名思义,br-ethx负责与“外”部通信,这里的“外”部指的是Host外部,但是却又要属于一个Network(这个Network指的是Neutron的概念)的内部,对于本小节而言指的是VLAN内部。这非常关键,后面我们还会涉及“外”部其他的概念。

br-ethx与br-int之间的接口是veth pair。

值得注意的是,br-ethx上的接口(图3-5中的G端口)是一个真正的Host的网卡接口(NIC Interface,Interface in Network Interface Card)。网卡接口是网卡物理口上的一个Interface。

引入qbr只是一个历史原因,现在的实际部署中可以没有。OVS的Stateful openf?low规则已经可以支持安全功能。

4.?内外VLAN ID的转换

前文提到了内外视角的VLAN ID,这里仍然暂时不讲述为什么要有内外VLAN ID的概念(下文会讲述),而是直接讲述内外VLAN ID的转换过程。

(1)出报文VLAN ID转换过程

VLAN类型网络,出报文的内外VLAN ID转换过程如图3-8所示。

image.png

图3-8 VLAN类型网络出报文内外VID的转换

图3-8提到了VID,这是一种抽象的称呼,它的含义随着网络类型的不同而不同:对于VLAN网络而言,VID指的就是VLAN ID;对于VXLAN网络而言,VID指的就是VNI;对于GRE网络,VID指的就是GRE Key。

图3-8中,我们以VM1-1为例,讲述内外VID的转换过程。报文从VM1-1发出,从br-ethx离开Host,这一路的VID转换如下:

①报文从VM1-1的A端口发出,是Untag报文;

②报文从B端口进入qbr-xxx,再从C端口离开qbr-xxx,也是Untag报文(A、B端口其实是同一个tap设备,以下不再重复这个说明);

③报文从D端口进入br-int,在D端口,报文被打上标签,VLAN ID = 10;

④报文从E端口离开br-int,此时报文VID = 10;

⑤报文从F端口进入br-ethx,在F端口,报文的标签被转变为VLAN ID = 100;

⑥报文从G端口离开Host,VLAN ID = 100。

可以看到,报文在br-int的D端口被打上内部VLAN标签,变成了Tag报文,在br-ethx

的F端口做了内外VID的转化。图3-8中,在VM1-1上标识了VLAN 10,其实表达的是它在Host内的br-int上所对应的接口VLAN ID = 10,并不是说从VM1-1发出的报文的VLAN ID = 10。

(2)入报文VLAN ID转换过程

VLAN类型网络,入报文的内外VLAN ID转换过程,如图3-9所示。

image.png

图3-9 VLAN类型网络入报文内外VID的转换

图3-9中,我们以VM1-1为例,讲述内外VID的转换过程。报文从Host进入,从qbr-xxx进入VM1-1,这一路的VID转换如下:

①报文从Host进入到br-ethx,是Tag报文,VID = 100;

②报文从br-ethx离开,在离开的端口F,报文VID转变为10;

③报文从E端口进入br-int,此时报文VID = 10;

④报文进入br-int后,从D端口被转发出去,在离开D时,被剥去Tag,变成Untag报文;

⑤报文从C端口进入qbr-xxx,然后从B端口离开,再从A端口进入VM1-1,这一路都是Untag报文。

可以看到,报文在br-ethx的F端口做了内外VID的转化,在br-int的D端口被剥去VLAN标签,变成了Untag报文。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。