openstack中neutron的实现模型(代码片段)

author author     2023-01-04     435

关键词:

一、Neutron概述

众所周知,整个Open stack中网络是通过Neutron组件实现,它也成为了整个Open stack中最复杂的部分,本文重点介绍Neutron的实现模型与应用场景,闲言少叙,步入正题。
1. Neutron的架构
Neutron的架构如下图所示:
技术分享图片
Neutron Serve由Core Plugins和Service Plugins组成,原生Neutron的Core Plugins使用的是ML2插件,它又分为类型驱动和机制驱动,可以提供基础的网络类型和实现机制,高级的功能如×××等通过Service Plugins实现,同时Neutron作为一个开放性的组件,允许厂商在1,2,3位置处对接自己的插件,本文采用Core Plugins的ML2插件进行说明,通过OVS重点讲述VLAN和VXLAN类型的网络。
2. Open stack部署模型
以3节点为例,Open stack由控制节点,网络节点和计算节点组成,当位于控制节点的Neutron server通过RESTful或CLI接收到请求后,会通过RPC的方式将信息传递给网络和计算节点的Agent,Agent在指挥具体的程序实现功能
技术分享图片
举例来说,当Neutron Server通过CLI接收到开启DHCP功能的指令后,会将该指令下发给DHCP Agent,DHCP Agent则通过dnsmasq这个具体程序来实现DHCP功能,L3 Agent则是由开启了转发功能的Linux内核来实现。
3. Linux网络虚拟基础
通过上文也得知Neutron本身不做具体功能的实现,此处对Neutron中经常涉及的虚拟网络设备进行说明。虚拟网络设备也称为虚拟网元,不同于现实中的物理设备,Linux中一个类似于数据结构,内核模块或设备驱动都可以称为一个设备,举例来说,一个硬盘在创建了多个分区后每一个分区在Linux下都是一个设备,通过以上概念,引出以下设备:
(1)Tap设备
Tap设备是Linux内核中二层的虚拟网络设备,只与二层中的以太网协议对应,所以常被称为虚拟以太网设备,它实现的是虚拟网卡的功能。
(2)名称空间
namespace简称ns,传统的Linux资源是全局的,ns是在一个HOST内创建了许多隔离的空间,彼此相互看不见,将全局的资源变成特定ns中独有的资源,ns可以隔离的资源有

资源 含义
uts_ns UTS为Unix Timesharing System的简称,包含内存名称、版本、底层体系结构等信息
ipc_ns 所有与进程通信(IPC)有关的信息
mnt_ns 当前装载的文件系统
pid_ns 有关进程PID的信息
user_ns 资源配额的信息
net_ns 网络信息

具体到网络视角,每一个ns中都有一个独立的网络协议栈。
(3) veth pair
虚拟以太网接口,成对出现,可以理解为虚拟网线,数据从一头发进去会从另一头发出,连接不同的ns或者虚拟网元。
技术分享图片
(4) Bridge
虚拟交换机,即前文中的OVS或者Linux Bridge,具体实现请参考作者其他博文,本处不再赘述。
用一个示例对上述概念进行说明,如下图所示:
一个host主机内有4个ns,通过1对veth pair连接到vbridge上
技术分享图片
创建veth pair对

[[email protected] ~]# ip link add tap1 type veth peer name tap1_peer  
[[email protected] ~]# ip link add tap2 type veth peer name tap2_peer  
[[email protected] ~]# ip link add tap3 type veth peer name tap3_peer  
[[email protected] ~]# ip link add tap4 type veth peer name tap4_peer  

创建ns

[[email protected] ~]# ip netns add ns1  
[[email protected] ~]# ip netns add ns2  
[[email protected] ~]# ip netns add ns3  
[[email protected] ~]# ip netns add ns4   

把tap移动到对应的ns中

[[email protected] ~]# ip link set tap1 netns ns1  
[[email protected] ~]# ip link set tap2 netns ns2  
[[email protected] ~]# ip link set tap3 netns ns3  
[[email protected] ~]# ip link set tap4 netns ns4  

创建bridge

[[email protected] ~]# yum install bridge-utils.x86_64 -y  
[[email protected] ~]# brctl addbr br1  

把tap peer添加到对应的bridge中

[[email protected] ~]# brctl addif br1 tap1_peer  
[[email protected] ~]# brctl addif br1 tap2_peer  
[[email protected] ~]# brctl addif br1 tap3_peer  
[[email protected] ~]# brctl addif br1 tap4_peer  

配置对应tap的IP地址

[[email protected] ~]# ip netns exec ns1 ip addr add 192.168.10.1/24 dev tap1  
[[email protected] ~]# ip netns exec ns2 ip addr add 192.168.10.2/24 dev tap2  
[[email protected] ~]# ip netns exec ns3 ip addr add 192.168.10.3/24 dev tap3  
[[email protected] ~]# ip netns exec ns4 ip addr add 192.168.10.4/24 dev tap4  

将bridge和所有tap设备up

[[email protected] ~]# ip link set br1 up  
[[email protected] ~]# ip link set tap2_peer up  
[[email protected] ~]# ip link set tap2_peer up  
[[email protected] ~]# ip link set tap3_peer up  
[[email protected] ~]# ip link set tap4_peer up  
[[email protected] ~]# ip netns exec ns1 ip link set tap1 up  
[[email protected] ~]# ip netns exec ns2 ip link set tap2 up  
[[email protected] ~]# ip netns exec ns3 ip link set tap3 up  
[[email protected] ~]# ip netns exec ns4 ip link set tap4 up  

验证结果

[[email protected] ~]# ip netns exec ns4 ping 192.168.10.1  

二、Neutron的网络实现模型

1. 整体网络模型
还是以3节点为例,此时网络模型如下图所示:
技术分享图片
通过上图可以知道,在原生Open stack下,所有计算节点中的VM,如果需要访问外网,都必须经过网络节点,每1个租户都有自己的DHCP和Router,通过ns进行隔离。其中对外部网络需要特别强调:Neutron中所说的外部网络是其不能管理的网络,不一定是公网。
2. 计算节点实现模型
2.1 VLAN实现模型
本小节重点介绍计算节点的实现模型,在Neutron中数据报文有个内外转换的概念,举例说明:假设Host1节点的VM1-1与Host2节点的VM2-1都属于VLAN10,此时Neutron使用VLAN网络类型,它们之间通信的流程为:
技术分享图片
(1)VM1-1发出纯报文(VM可以接受和发送带VID的保温,在后文介绍)到qbr-xx。qbr-xx是一个Linux bridge设备,他与VM1-1之间通过tap设备连接,他们之间其实只有1个tap设备,可以理解为tap设备一半在br上一半在VM上,此处为了便于理解画了2个tap,qbr-xx的作用在于应用安全功能,原生的OVS不支持安全功能(Stateful openflow已经支持),qbr-xx与VM的数量是1:1对应。
(2)报文在进入br-int的接口时打上VID10,br-int管理着本地网络层,每个计算和网络节点上都有且只有1个br-int。
(3)报文离开br-int,此时VID为10,在br-ethx处VID转换为100,通过br-ethx离开Host1。br-ethx管理着租户网络层,即租户所创建的网络位于该层。
(4)报文经过物理交换机到达Host2,进入br-ethx,在br-ethx出口处VID由100转换成10。
(5)报文流出br-ethx出口,进入br-int,此时VID为10,在离开br-int出口时Untag,以纯以太网报文进入qbr-xx最后进入VM1-2。
2.2 VXLAN实现模型
如果Neutron的网络类型是VXLAN,他与VLAN的流程大体上相似,只是不再进行VID的转换,取而代之的是将VLAN封装为VXLAN:
技术分享图片
上图中br-tun和br-ethx都是由OVS实现,不同于br-ethx所执行的普通二层交换机功能,br-tun所执行的是VXLAN中的VTEP功能,2个IP为VXLAN的隧道终结IP。
3.网络节点实现模型
从网络角度看,网络节点分为4层,前2层与计算节点几乎相同,不再赘述,网络服务层中1个网络1个DHCP Service(通过dns masq程序实现),Router由开启了转发功能的Linux内核实现,提供了SNAT和DNAT功能,每1个DHCP和Router都运行在ns中。外部网络层的br-ex一般也选用OVS,其上绑定的IP地址为FIP,为内部的VM提供DNAT功能。
技术分享图片

三、产生的疑问

通过上述的介绍可能会有人产生以下疑问:
1.不同于VXLAN的再次封装,VLAN为什么要有2个OVS(br-int和br-ethx),并且还必须经过1次VID转换。
2.无论是VID(内部)到VID(租户)还是VID到VNI,他们的对应关系是如何建立的。
以下就这两个问题进行进一步的说明。
1.VID转换的意义
前文得知,每个网络和计算节点有且只有1个br-int,内部网络又是由Neutron自行维护,同时Open stack也是允许租户同时存在多种类型的网络,比如租户同时使用的VLAN和VXLAN,假如VLAN网络类型下没有br-ethx,租户创建的VNI100按照算法转换过来VID也是10,这样VID就会在br-int上撞车,所以任何类型的网络都需要转换,这样Neutron可以做到掌控全局。还需要说明的1点是,不管你租户网络层用的那种类型的网络,本地网络层只能是1种网络类型:VLAN!

网络类型 br-int br-tun
VLAN 10 ----
VXLAN 10 100

2. 转换关系的建立
前文得知,每个OVS是由OVS Agent所创建,OVS Agent将内外VID(VNI)的映射关系存储在OVS Bridge的端口表中的other_config字段中,以完成转换。
技术分享图片

openstack中neutron

OpenStackNeutron网络模型OpenStacknova-network独立成为单独的组件Neutron后,形象的网络模型的多平面网络、混合平面私有网络。如图3,图4,图5,图6。图3.多平面网络650)this.width=650;"alt="多平面网络"src="https://www.ibm.com/developerworks/cn/cloud/l... 查看详情

openstack运维-部署neutron组件[t版](代码片段)

OpenStack运维-部署Neutron组件一、Neutron概述二、创建数据库neutron,并进行授权三、计算节点C1/C2四、CT验证服务组件一、Neutron概述Neutron是OpenStack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网... 查看详情

openstack运维-部署neutron组件[t版](代码片段)

OpenStack运维-部署Neutron组件一、Neutron概述二、创建数据库neutron,并进行授权三、计算节点C1/C2四、CT验证服务组件一、Neutron概述Neutron是OpenStack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网... 查看详情

浅谈openstackt版服务组件--neutron计算服务(#^.^#)持续更新中(代码片段)

文章目录前言一、OpenStack网络1、linux网络虚拟化2、liunx虚拟网桥(br)linux虚拟局域网4、开放虚拟交换机OvS二、openstack网络基础服务1、网络组件2、网络结构3、网络子网与端口4、openstack中的网络模型(neutron)三、OpenStack-Neutron网络服... 查看详情

浅谈openstackt版服务组件--neutron计算服务(#^.^#)持续更新中(代码片段)

文章目录前言一、OpenStack网络1、linux网络虚拟化2、liunx虚拟网桥(br)linux虚拟局域网4、开放虚拟交换机OvS二、openstack网络基础服务1、网络组件2、网络结构3、网络子网与端口4、openstack中的网络模型(neutron)三、OpenStack-Neutron网络服... 查看详情

什么是openstack?

请教下广大的百度朋友们‍本文详细介绍了Openstack的网络原理和实现,主要内容包括:Neutron的网络架构及网络模型还有neutron虚拟化的实现和对二三层网桥的理解。一、Neutron概述Neutron是一个用Python写的分布式软件项目,用来... 查看详情

openstack入门篇之neutron服务(控制节点)的部署与测试(代码片段)

 1.Neutron的介绍  Neutron为整个OpenStack环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和***等。Neutron提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。Openstack的设计... 查看详情

openstack——网络服务neutron

一、Neutron介绍  OpenStack网络服务已由Quantum改名为Neutron。Neutron是OpenStack核心项目之一,提供云计算环境下的虚拟网络功能服务。  Neutron的设计目标是实现“网络即服务(NetworkingasaService)”。为了达到这一目标,... 查看详情

openstack安装-计算节点-neutron服务安装(代码片段)

一、安装nettron相关服务yuminstallopenstack-neutron-linuxbridgeebtablesipset-y二、快速配置配置 修改红色部分为计算节点的网卡名以及IP地址openstack-config--set/etc/neutron/neutron.confDEFAULTtransport_urlrabbit://openstack:[email protected]openstack-config--s... 查看详情

关于openstack的neutron服务的学习(代码片段)

neutron服务的搭建配置一、使用neutron相关命令查询网络服务的列表信息,并已下图的方式打印出来[root@controller~]#neutronagent-list-cbinary-cagent_type-calive+---------------------------+--------------------+-------+ 查看详情

openstack的部署t版——neutron组件(代码片段)

OpenStack的部署(六)——Neutron组件一、CT控制节点1、创建数据库neutron,并进行授权2、创建用户、服务并赋权3、注册API到neutron服务,给neutron服务关联端口,即添加endpoint4、安装提供者网络(桥接)5、重启相关... 查看详情

openstack部署

...制节点(controller)-增加networkingNetworking又叫做Neutron,是Openstack必不可少的组件,它其实是网络虚拟化的实现工具,可以让我们模拟出路由器、交换机、网卡等网络设备。关于Neutron的电子书 https://yeasy.gitbooks.io/openstack_understan... 查看详情

openstack的部署之neutron项目(7-6)(代码片段)

OpenStack的部署之Neutron项目(7-6)一、CT控制节点1、创建数据库neutron,并进行授权2、创建用户、服务并赋权3、注册API4、安装提供者网络(桥接)并修改相关配置文件5、重启相关服务二、C1、C2计算节点操作1、部署neutron... 查看详情

玩转openstack(八.1)linuxbridge实现neutron网络之local、flat、vlan、dhcp

参考技术ANeutron默认使用ML2作为coreplugin,配置文件/etc/neutron/neutron.conf中core_plugin计算节点和控制节点都需要在各自的neutron.conf中配置core_plugin然后配置ML2的配置文件/etc/neutron/plugins/ml2/ml2_conf.ini中mechanism_driversmechanism_drivers可以同... 查看详情

openstack_i版6.neutron部署

Neutron是不能自己创建网络的,它需要借助插件才能创建虚拟网桥、网卡依赖插件  配置ml2为核心插件 本次网络模型采用扁平化网络,不同的网络类型不同的配置,不同的使用方法    打开安全组功能  Linux... 查看详情

openstack部署neutron(代码片段)

controller   1.创建数据库并设置权限  mysql-uroot-p0330  CREATEDATABASEneutron;  GRANTALLPRIVILEGESONneutron.*TO‘neutron‘@‘localhost‘\IDENTIFIEDBY‘NEUTRON_DBPASS‘;   GRANTALLPRIVILEGESONneutron.*T 查看详情

neutron—vlanawarevms与vlantransparent

...ged报文的需求,尤其是在NFV场景中。为了满足这一需求,OpenStack先后提出了2个方案:VLANTran 查看详情

openstack之neutron

网络组件neutron在整个openstack体系中应该是最难的一部分,需要在控制节点和计算节点上面同时安装1、创建neutron用户及授权[[email protected] ~]# source admin-openrc.sh[[email protected] ~]# openstack user cr 查看详情