openstack neutron

在数据中心现有的物理网络基础之上叠加一层我们自己的虚拟网络–>neutron
neutron包含组件:

openstack neutron_第1张图片
neutron-server:可以理解为用来接收Neutron REST API调用的服务器,然后负责将不同的rest api分发到不同的neutron-plugin上

neutron-plugin:可以理解为不同网络功能实现的入口,各个厂商可以开发自己的plugin。Neutron-plugin接收neutron-server分发过来的REST API向neutron database完成一些信息的注册,然后将具体要执行的业务操作和参数通知给自身对应的neutron agent

4.Neutron database,顾名思义就是Neutron的数据库,一些业务相关的参数都存在这里。

5.Network provider,即为实际执行功能的网络设备,一般为虚拟交换机(OVS或者Linux Bridge)。

neutron-plugin分为core-plugin和service-plugin两类。

Core-plugin,Neutron中即为ML2(Modular Layer 2),负责管理L2的网络连接。ML2中主要包括network、subnet、port三类核心资源,对三类资源进行操作的REST API被neutron-server看作Core API,由Neutron原生支持。其中:
network->{tenant broadcast subnet and port assign to special network} network ->Flat Vlan Vxlan GRE.
openstack neutron_第2张图片
Service-plugin,即为除core-plugin以外其它的plugin,包括l3 router、firewall、loadbalancer、VPN(虚拟专用网络,在公网上建的加密的虚拟网络)、metering等等,主要实现L3-L7的网络服务。这些plugin要操作的资源比较丰富,对这些资源进行操作的REST API被neutron-server看作Extension API,需要厂家自行进行扩展

“Neutron对Quantum的插件机制进行了优化,将各个厂商L2插件中独立的数据库实现提取出来,作为公共的ML2插件存储租户的业务需求,使得厂商可以专注于L2设备驱动的实现,而ML2作为总控可以协调多厂商L2设备共同运行”。在Quantum中,厂家都是开发各自的Service-plugin,不能兼容而且开发重复度很高,于是在Neutron中就为设计了ML2机制,使得各厂家的L2插件完全变成了可插拔的,方便了L2中network资源扩展与使用。

(注意,以前厂商开发的L2 plugin跟ML2都存在于neutron/plugins目录下,而可插拔的ML2设备驱动则存在于neutron/plugins/ml2/drivers目录下)

ML2作为L2的总控,其实现包括Type和Mechanism两部分,每部分又分为Manager和Driver**。Type指的是L2网络的类型(如Flat、VLAN、VxLAN等),与厂家实现无关。Mechanism则是各个厂家自己设备机制的实现,如下图所示。当然有ML2,对应的就可以有ML3,不过在Neutron中L3的实现只负责路由的功能**,传统路由器中的其他功能(如Firewalls、LB、VPN)都被独立出来实现了,因此暂时还没有看到对ML3的实际需求。
openstack neutron_第3张图片
一般而言**,neutron-server和各neutron-plugin部署在控制节点或者网络节点上**,而neutron agent则部署在网络节点上和计算节点上。我们先来分析控制端neutron-server和neutron-plugin的工作,然后再分析设备端neutron-agent的工作。
openstack neutron_第4张图片

2.2 Neturon网络虚拟化简介
part1

想要了解openstack的虚拟化网络,必先知道承载openstack虚拟化网络的物理网络    

在实际的数据中心中,与openstack相关的物理网络可以分为三层:

1 OpenStack Cloud network:OpenStack 架构的网络
2 机房intranet (external network):数据中心所管理的的公司网(Intranet) ,虚机使用的 Floating IP 是这个网络的地址的一部分。
3 以及真正的外部网络即 Internet:由各大电信运营商所管理的公共网络,使用公共IP。
External 网络和Internet 之间是数据中心的 Uplink 路由器,它负责通过 NAT 来进行两个网络之间的IP地址(即 floating IP 和 Internet/Public IP)转换,因此,这部分的控制不在 OpenStack 控制之下,我们无需关心它。
openstack架构的网络—>机房的网络external-----(NAT)—>外网internet

part2

openstack架构的网络又可细分为以下几种(下述指的仍然是物理网络):

管理网络:包含api网络(public给外部用,admin给管理员用-是内部ip,internal给内部用-是内部ip)
数据网络
存储网络
IDRAC网络
PXE网络
  数据网络主要用于vm之间的通信,这部分是neutron所实现网络虚拟化的核心,neutron基于该物理网络之上,来实现满足多租户要求的虚拟网络和服务
  part3

Neutron 提供的网络虚拟化能力包括:

(1)二层到七层网络的虚拟化:L2(virtual switch)、L3(virtual Router 和 LB(loadbalancer))、L4-7(virtual Firewall )等

(2)网络连通性:二层网络和三层网络

(3**)租户隔离性**

(4**)网络安全性**

(4)网络扩展性

(5)REST API

(6)更高级的服务,包括 LBaaS,FWaaS,VPNaaS 等。具体以后再慢慢分析。
Neutron主要为租户提供虚拟的

1. 交换机(switch)
  2. 网络(L2 network)和子网(subnet)一个L2网络负责提供一种二层隔离方法,可以是一个纯粹的L2技术(如VLAN),或一个网络覆层(overlay)技术(如GRE隧道,VxLAN),
  3. 路由器(router)
  4. 端口(port)

2.3 构建大二层网络:虚拟交换机(switch)+物理交换机
1. 什么是二层网络?

二层指的是数据链路层,计算机与计算机之间的通信采用的是基于以太网协议广播的方式,请参考
https://www.cnblogs.com/linhaifeng/articles/5937962.html
2. 什么是大二层网络?

大二层的概念指的是openstack中所有的vm都处于一个大的二层网络中,大二层也可以被想象成一堆二层交换机串联到一起。
 3. 为什么要构建大二层网络?
构建大二层网络的目的就是为了满足vm可以迁移到全网的任意位置。二层无需网关,无需路由,因而资源调用更加灵活,反之,如果所有vm不在一个大二层中,那么vm迁移到另外一个位置(另外一个网络中),则需要我们人为地指定网关,添加路由策略,然而这还只是针对一台vm的迁移,要满足所有的vm的动态迁移,再去指定网关、路由等就不现实了。
  1. 如何构建大二层网络?

    一些列二层设备串联起来,组成一个大二层网络,在openstack中二层设备分为:物理的二层设备和虚拟机的二层设备

    虚拟的二层设备又分为:

1. Neutron 默认采用的 开源Open vSwitch 创建的虚机交换机

2. Linux bridge。
    openstack neutron_第5张图片
需要特别强调的是:

1.大二层网络是由虚拟二层设备和物理二层设备共同组成的;
  2.而这里面所有的二层设备合在一起相当于一个大的交换机;
  3.大二层网络是在计算节点或者网络节点启动时就会建立,而后期用户建立的网络,都是在此网络的基础之上进行逻辑划分,用户每新建一个网络都被分配相应的段ID(相当于vlan id)

2.4 大二层网络创建完毕后,用户如何使用?->网络(L2 network)、子网(subnet)
part1:用户创建的L2 network

云平台在构建完毕后,即在物理节点都正常启动后,大二层网络也就创建好了,对用户来说,此时相当于一台大的二层交换机摆在面前,即用户创建网络就是把整个大二层网络当成一个交换机

然后用户需要做的是基于该网络划分自己的vlan,即建立一个l2 network,

例如:用户(例如demo用户)可以在自己的project下创建网络(L2 network)(vlan 网络隔离),该网络就是在大二层的基础上划分出来的,是一个隔离的二层网段。类似于物理网络世界中的虚拟 LAN (VLAN),每建立一个l2 network,都会被分配一个段ID,该段ID标识一个广播域,这个ID是被随机分配的,除非使用管理员身份在管理员菜单下,才可以手动指定该ID

那么就让我们在demo租户下以demo用户身份创建demo-net网络:
那么就让我们在demo租户下以demo用户身份创建demo-net网络:
openstack neutron_第6张图片
以admin用户登录,这样才能看到新建网络demo-net的段ID,其实此时demo-net仅仅只是一种逻辑上划分
openstack neutron_第7张图片
补充:使用管理员身份在管理员菜单下,创建网络可以手动指定段ID
openstack neutron_第8张图片
part2:用户为自己新建的l2 network,即demo-net,创建子网==

子网是一组 IPv4 或 IPv6 地址以及与其有关联的配置。它是一个地址池,OpenStack 可从中向虚拟机 (VM) 分配 IP 地址。每个子网指定为一个无类别域间路由 (Classless Inter-Domain Routing) 范围,必须与一个网络相关联。除了子网之外,租户还可以指定一个网关、一个域名系统 (DNS) 名称服务器列表,以及一组主机路由。这个子网上的 VM 实例随后会自动继承该配置。

在 OpenStack Kilo 版本之前,用户需要自己输入 CIDR。Kilo 版本中实现了这个 Blueprint,使得 Neutron 能够从用户指定的 CIDR Pool 中自动分配 CIDR。

openstack neutron_第9张图片

openstack neutron_第10张图片

查看新建子网的信息
openstack neutron_第11张图片
创建的结果:就好比我们拿来一台“交换机”分出了一个VLAN.

注:在AWS中,该概念对应其 Subnet 概念。AWS 对 Subnet 的数目有一定的限制,默认地每个 VPC 内最多只能创建 200 个 Subnet。从CIDR角度看,一个 VPC 有一个比较大的网段,其中的每个 Subnet 分别拥有一个较小的网段。这种做法和OpenStack 有区别,OpenStack 中创建网络时不需要指定 CIDR。
 ========part3:dhcp-agent服务于网络demo-net下的子网demo-subnet==========   

在建立了子网后,会在网络节点上新增一个名称空间用来运行dhcp-agent专门为demo-net下的demo-subnet分配ip

demo-net有一个段ID:51

demo-subnet有网络ID:a603fd2c-35ef-46de-b9c4-da48680eb27d

连接dhcp-agent的端口网络ID:a603fd2c-35ef-46de-b9c4-da48680eb27d
openstack neutron_第12张图片
对应大二层网络上的变化为:在网络节点上新增dhcp-agent,在网络节点上的br-int新增端口,该端口的属于demo-net,及属于段ID:51

ps:新建子网后,便会网络节点新增dhcp-agent(解释一下:图中虚拟机是新建虚拟机后才有的)

openstack neutron_第13张图片
在demo-net新增一个子网的话,不会新增dhcp-agent,会新增地址池
openstack neutron_第14张图片
总结:

DHCP 服务是网络环境中必须有的。Neutron 提供基于 Dnamasq (轻型的dns和dhcp服务)实现的虚机 DHCP 服务,向租户网络内的虚机动态分配固定 IP 地址。它具有以下特性:

一个网络可以有多个运行在不同物理网络节点上的 DHCP Agent,同时向网络内的虚机提供服务
一个 DHCP Agent 只属于一个网络,在网络节点上运行在一个 network namespace 内
网络内的子网共享该 DHCP Agent
openstack neutron_第15张图片
part4:新建vm1和vm2连接到demo-net==

在demo-net以及demo-subnet建立成功后,就可以新建虚拟机连接到demo-net了,相当于同一个vlan中的俩台虚拟机,二层互通

此处我们新建vm1和vm2,网络拓扑如下

openstack neutron_第16张图片
对应大二层网络的端口连接连接
openstack neutron_第17张图片
这里所谓的隔离,可以理解为几个含义:
1每个网络使用自己的 DHCP Agent,每个 DHCP Agent 在一个 Network namespace 内
2.不同网络内的IP地址可以重复(overlapping)
3.跨网络的子网之间的流量必须走 L3 Virtual Router

2.5 虚拟机路由器(Vitual Router)
  要想让demo-net1上的vm3与demo-net上的vm2通信,用户必须建立连接这两个网络的路由器router
  openstack neutron_第18张图片
  添加接口
  openstack neutron_第19张图片
   查看网络拓扑
   openstack neutron_第20张图片
   对应大二层网络的变化
   openstack neutron_第21张图片
    测试来自demo-net的vm2:172.16.45.6与demo-net1的vm3:172.16.18.3的连通性
    openstack neutron_第22张图片
    要想连接外网,需要用管理员身份,创建与外部网络绑定的网络,然后将demo租户下的test-router的网关指定为该网络
    openstack neutron_第23张图片
    openstack neutron_第24张图片
网络拓扑
openstack neutron_第25张图片
测试:
openstack neutron_第26张图片
2.6 端口(Port)
一个 Port 代表虚拟网络交换机(logical network switch)上的一个虚机交换端口(virtual switch port)。虚机的网卡(VIF - Virtual Interface)会被连接到 port 上。当虚机的 VIF 连接到 Port 后,这个 vNIC 就会拥有 MAC 地址和 IP 地址。Port 的 IP 地址是从 subnet 中分配的。
三 实现网络虚拟化的关键:如何构建虚拟的大二层网络
根据创建网络的用户的权限,Neutron L2 network 可以分为:
Provider network:管理员创建的和物理网络有直接映射关系的虚拟网络。

openstack neutron_第27张图片
openstack neutron_第28张图片
Tenant network:租户普通用户创建的网络,物理网络对创建者透明,其配置由 Neutron根据管理员在系统中的配置决定
openstack neutron_第29张图片
虚机可以直接挂接到 provider network 或者 tenant network 上 “VMs can attach directly to both tenant and provider networks, and to networks with any provider:network_type value, assuming their tenant owns the network or its shared.”。
根据网络的类型,Neutron L2 network 可以分为:

Flat network:基于不使用 VLAN 的物理网络实现的虚拟网络。每个物理网络最多只能实现一个虚拟网络。
local network(本地网络):一个只允许在本服务器内通信的虚拟网络,不知道跨服务器的通信。主要用于单节点上测试。
VLAN network(虚拟局域网) :**基于物理 VLAN 网络实现的虚拟网络。**共享同一个物理网络的多个 VLAN 网络是相互隔离的,甚至可以使用重叠的 IP 地址空间。每个支持 VLAN network 的物理网络可以被视为一个分离的 VLAN trunk,它使用一组独占的 VLAN ID。有效的 VLAN ID 范围是 1 到 4094。
GRE network (通用路由封装网络):一个使用 GRE 封装网络包的虚拟网络。GRE 封装的数据包基于 IP 路由表来进行路由,因此 GRE network 不和具体的物理网络绑定。
VXLAN network(虚拟可扩展网络):基于 VXLAN 实现的虚拟网络。同 GRE network 一样, VXLAN network 中 IP 包的路由也基于 IP 路由表,也不和具体的物理网络绑定。
注:在AWS中,该概念对应 VPC 概念。AWS 对 VPC 的数目有一定的限制,比如每个账户在每个 region 上默认最多只能创建 5 个VPC,通过特别的要求最多可以创建 100 个。
L2 network之Provider与Tenant的区别

Provider network 是由 Admin 用户创建的,而 Tenant network 是由 tenant 普通用户创建的。
Provider network 和物理网络的某段直接映射,比如对应某个 VLAN,因此需要预先在物理网络中做相应的配置。而 tenant network 是虚拟化的网络,Neutron 需要负责其路由等三层功能。
对 Flat 和 VLAN 类型的网络来说,只有 Provider network 才有意义。即使是这种类型的 tenant network,其本质上也是对应于一个实际的物理段。
对 GRE 和 VXLAN 类型的网络来说,只有 tenant network 才有意义,因为它本身不依赖于具体的物理网络,只是需要物理网络提供 IP 和 组播即可。
Provider network 根据 admin 用户输入的物理网络参数创建;而 tenant work 由 tenant 普通用户创建,Neutron 根据其网络配置来选择具体的配置,包括网络类型,物理网络和 segmentation_id。
创建 Provider network 时允许使用不在配置项范围内的 segmentation_id。
3.2 依赖物理的二层来建立虚拟的大二层(vlan模式)
物理的二层指的是:物理网络是二层网络,基于以太网协议的广播方式进行通信

虚拟的二层指的是:neutron实现的虚拟的网络也是二层网络(openstack的vm机所用的网络必须是大二层),也是基于以太网协议的广播方式进行通信,但毫无疑问的是该虚拟网络依赖于物理的二层网络

物理二层+虚拟二层的典型代表:vlan网络模式,https://www.cnblogs.com/linhaifeng/p/6710751.html

3.3 依赖物理的三层来建立虚拟的大二层(gre模块与vxlan模式)
物理的三层指的是:物理网络是三层网络,基于ip路由的方式进行通信

虚拟的二层指的是:neutron实现的虚拟的网络仍然是二层网络(openstack的vm机所用的网络必须是大二层),仍然是基于以太网协议的广播方式进行通信,但毫无疑问的是该虚拟网络依赖于物理的三层网络,这有点类似于VPN的概念,根本原理就是将私网的包封装起来,最终打上隧道的ip地址传输。

物理三层+虚拟二层的典型代表:gre模式与vxlan模式,https://www.cnblogs.com/linhaifeng/p/6716477.html
http://www.cnblogs.com/linhaifeng/articles/5937962.html

你可能感兴趣的:(网络相关)