OpenStack 网络服务

1.网络服务概述

OpenStack网络服务为OpenStack环境中的虚拟网络基础架构(VNI)和物理网络基础架构接入层方面(PNI)管理所有的网络现状。OpenStack网络允许租户创建高级的虚拟网络拓扑,包括firewalls、load balancers和virtual private networks(VPNs)等服务。

Neutron网络服务为OpenStack管理所有的网络方面的虚拟网络基础设施(Virtual Networking Infrastructure,VNI)和访问层方面的物理网络基础设施(Physical Networking Infrastructure,PNI)。在OpenStack中,计算、存储和网络是其核心内容,也是核心组件,通过具体的功能实现和服务的访问,以实现提供云计算环境下的虚拟网络功能,
OpenStack中的Neutron:
在这里插入图片描述
Neutron为OpenStack的虚拟机提供网络方面的功能;在Havana版本之前是没有neutron这个组件(G版名称是Quantum)的,当时网络的主要功能是在Nova组件里实现的,即Nova-network,底层采用的大多是Linux bridge,但是无法快速组网和实现高级的网络功能,因此OpenStack把Nova的关于网络方面的功能进行转移,成立了全新的Neutron组件,Neutron组件取代了Nova-network的相关功能,但是Nova里还有些网络功能被保留,比如虚拟机的网卡方面的功能。

目前,对于我们使用的物理交换机来说,Neutron其实是系统平台的位置,提供配置命令及参数检查,并把网络功能用一种逻辑组织起来;但是,无论底层的plugin还是最终用软件SDN通过硬件交换机来加速,Neutron自身并不提供任何网络功能,它只是一个架子。Neutron的网络功能大部分是Plugin提供的。

OpenStack网络允许租户创建先进的虚拟网络拓扑结构,包括服务,如防火墙、负载平衡器和虚拟私有网络(VPN)。网络提供了以下对象抽象:网络、子网和路由器。每个都包含它所模仿物理硬件对应的功能:网络包含子网,不同的子网和网络之间的流量由路由来传递。

2.网络服务架构介绍

Neutron网络目的是灵活地划分物理网络,在多租户环境下提供给每个租户独立的网络环境。它是可以被用户创建的对象,如果要和物理环境下的概念映射的话,这个对象相当于一个巨大的交换机,可以拥有无限多个动态可创建和销毁的虚拟端口。

从本质上讲,OpenStack网络创建了一个一致的逻辑通信层,而其他元素可以有效地、大规模地使用这个逻辑层,这一模式是在OpenStack Neutron服务器中实现的,它与OpenStackNova软件管理的虚拟机(即计算服务)以及上述提及的其他元素进行交互(Neutron是由Nova-network演变而来)。用户通过OpenStack的Horizon GUI与网络功能进行交互,而其他的管理系统和网络则通过使用Neutron API与网络服务进行交互。在目前的分布中,OpenStack Neutron混合实施了第二层的VLAN和第三层的路由服务,它可为所支持的网络提供防火墙、负载平衡以及IPSec VPN等扩展功能。

目前Neutron网络形式主要包括Flat、Vlan、Gre、vXlan。

于Neutron来说,它相当于OpenStack的网络管理平台,其可以提供CLI或者GUI端的配置或者对外提供API访问接口,把底层的网络统一组织起来。Neutron本身并不对外提供任何网络服务,其提供一个底层网络设备和对外提供一个访问接口的框架。Neutron组件可以分为5个主要子服务,分别为neutron-server、neutron-openvswitch-agent、dhcp-aget、l3-agent和metadata-agent,如图所示。
Neutron 架构示意图:
在这里插入图片描述
(1)Neutron Server
实现Neutron API和API扩展、管理Network、subnet、port。
(2)Neutron-openvswitch-agent
连接虚拟机到网络端口,运行在每个计算节点。
(3)DHCP agent
负责 DHCP配置,为虚拟机分配IP。
(4)L3-agent
负责公网浮动IP地址和NAT,负责其他三层特性,例如负载均衡,每个network对应一个L3 agent。
(5)Metadata-agent
提供元数据服务,Neutron的l3-agent、dhcp-agent、nova、metadata api server。

在默认情况下,Neutron使用OVS(OpenvSwich)作为其虚拟交换的plugin插件,同时租户子网的创建和租户之间以及租户与外部之间的通信均由Neutron创建的网络实现,由OVS创建3个网段,租户的实例资源连接到对应的租户网段,从而实现租户网段的网络畅通

一个标准的Neutorn网络是由Network、Subnet、Router和Port组成。
(1)Network
二层网络单元,租户可以通过Neutron的API创建自己的网络,类似VLAN的三层接口,接口则对应为二层的一个单独的隔离网络。
(2)Subnet
一段IPv4/IPv6地址段,提供公网或者私网的地址,相当于在Network的基础上,二层的单独隔离网络,VM同属于一个IP段,具有同样的网络掩码,具备相同的网络网关。
(3)Router
虚拟三层路由器,为私网地址提供地址转换。
(4)Port
管理实例的网卡,虚拟机交换机的一个接口。

同时在Neutron配置文件中有2种不同的Plugin,分别为core_plugin和service_plugins,其中core_plugin为实现二层网络中网络之间隔离和互通,默认配置为ml2(Modular Layer 2);service_plugins则提供三层及三层以上的服务,如Router、FWaas、LBaas和VPNaas。
从core_plugin角度来说,目前的操作只是操作子网、管理子网和管理实例连接OVS的虚拟接口,而在实际情况下它主要和neutron的agent通信,agent则调用底层所支持的plugin去执行终端用户的命令,在OpenStack常用的ml2插件就是一个标准的core_plugin插件,它是用于LinuxBridge和OpenvSwitch之间实现具体的网络管理;在ML2中,它的内部也含有两个重要驱动,分别为Type_Drives和Mechanism_Drives,Type_Drives主要是根据Neutron网络拓扑来为用户分配网络、提供网络验证、管理可用网络类型和维护网络的状态。
在Neutron网络拓扑中可以有FLAT、Local、VLAN、GRE和VXLAN网络模式。Mechanism_Drivers主要是靠Core Plugin来实现,直接管理底层网络和实现底层网络的隔离。目前支持的主要有OpenvSwitch和LinuxBridge等。现在看来,ML2的出现在网络的可靠性以及性能方面都有显著的提高。Service_Plugin则是对三层以上提供更高级的服务。

3.Neutron 底层网络

二层到七层网络的虚拟化:L2(virtual switch)、L3(virtual Router和LB)、L4-7(virtual Firewall)等。网络连通性:二层网络和三层网络、租户隔离性、网络安全性、网络扩展性、REST API及更高级的服务,包括LBaaS、FWaaS、VPNaaS等。
网络提供:主要提供一个隔离的二层网段,在二层网段中,内部存在一个自身内部租户创建产生的广播域或者对外提供的共享标记。在创建网络时,需要加上创建用户的权限,可以分为Provider network和Tenant Network两种。
在Provider network中,网络均由管理员创建,对应于数据中心以后的物理网络中的一个网段,常见的创建为provider:network_type(网络类型,包括VXLAN、gre、vlan、flat、local),当然这种网络仅仅只是作为租户或者租户之间共享的网络,并不需要L3 agent。
在租户网络(Tenant Network)中,网络均是由租户的普通用户创建,默认情况下租户是不能创建共享的网络的,所以要保证租户之间的网络隔离,不被其他租户发现和使用。在tenant network中也有local、flat、vlan、gre和VXLAN等类型。但是,tenant普通用户创建的Flat和VLAN的tenant network实际还是Provider network(属于某一个实际物理网段),所以真正产生Tenant network的为GRE和VXLAN,这种和物理网络没有任何的联系。
Provider network与Tenant Network有以下几点区别。
(1)Provider network是由admin用户创建的,而Tenant network是由tenant普通用户创建的。
(2)Provider network和物理网络的某段直接映射,比如对应某个VLAN,需要预先在物理网络中做相应的配置。而tenant network是虚拟化的网络,Neutron需要负责其路由等三层功能。
(3)对Flat和VLAN类型的网络来说,只有Provider network才有意义。即使是这种类型的tenant network,其本质上也是对应于一个实际的物理段。
(4)对GRE和VXLAN类型的网络来说,只有tenant network才有意义,因为它本身不依赖于具体的物理网络,只是需要物理网络提供IP和组播即可。
(5)Provider network根据admin用户输入的物理网络参数创建;而tenant work由tenant普通用户创建,Neutron根据其网络配置来选择具体的配置,包括网络类型、物理网络和segmentation_id。
(6)创建Provider network时允许使用不在配置项范围内的segmentation_id。如图所示。
Neutron创建Provider:
在这里插入图片描述
在一个实际的生产环境中,Neutron的网络可以分为以下几种:实例通信网络、内部存储网络、内部管理网络和实例私有网络。
实例通信网络为外部通信网络;内部管理网络即OpenStack自身组件所使用的网络,通常为管理组件之间通信所使用的网络;实例私有网络为虚拟机使用的内部网络;内部存储网络为存储服务器之间的通信网络,负责数据之间的数据交换和数据备份,Neutron网络类型如图所示。
在这里插入图片描述

4.Neutron网络模式

FlatDHCP模式通常指定一个子网,规定虚拟机能使用的IP地址范围,创建实例时从有效IP地址池获取一个IP,分配给虚拟机实例,自动配置好网桥、通过DNSmasq分配地址,如图5-6所示。
VLAN模式需要创建租户VLAN,使得租户之间二层网络隔离,并自动创建网桥,在网络控制器上的DHCP为所有的VLAN启动,为每个虚拟机分配私网地址(DNSmasq),网络控制器NAT转换,也解决二层隔离问题,适合私有云使用,如图所示。
FlatDHCP模式:
在这里插入图片描述
VLAN模式:
在这里插入图片描述
GRE网络可以跨不同网络实现二次IP通信,而且通信封装在IP报文中,实现点对点隧道,如图所示。
GRE模式:
在这里插入图片描述

5.数据包接收

在Linux网络系统中,部分网卡都是自带端口自协商的功能,设备双方通过这样的方式建立合适的数据连接,包括连接速度和连接的方式。在数据接收方面,将数据内容放置程序缓存部分,而后进行中断方式通知CPU/CPU轮询读取数据帧;在数据发送方面,是以软中断方式传递给发包队列,而后匹配驱动才能让CPU控制使用网卡设备将数据发送出去。
依赖于Linux网络设备,通过网卡的设置不同和报文的目的MAC地址判断是否接受该报文。
网卡模式主要以下几种。
(1)直接模式
只接收目的MAC是网卡自己的数据帧。
(2)组播模式
接收所有的组播报文数据帧。
(3)广播模式
接收广播帧。
(4)混杂模式
可以接收所有任意目的MAC报文、无论报文的目的和MAC是否是自身的网卡MAC地址、单播或者非单播。
通常情况下网卡只接收MAC为网卡自身地址的数据帧和广播的数据帧,以及自己所在组播的组播报文。
当网卡被加入到OpenvSwitch中作为一个端口时会被设置成混杂模式。

6.Linux Bridge 和VLAN

Linux Bridge模拟了物理网络中的网桥的概念,将多个服务器端口加入到网桥中来,网桥端口对端相连的设备通过发送报文给Linux Bridge,并通过Linux Bridge学习报文SMAC和查找报文的DMAC转发到相应的目的地,这点也和普通的二层交换机非常类似。它既可以是物理网卡设备也可以是虚拟的端口。
Linux Bridge本身是没有VLAN功能的,需要VLAN模块协作实现VLAN过滤的功能,当端口加入到Linux Bridge中,默认是不属于任何VLAN或者属于所有VLAN的,只有这样才能对所有的VLAN的报文进行接收和转发,和普通的交换机的trunk口还是有区别的,交换机的trunk是针对VLAN的端口属性,需要自己配置VLAN才能转发报文通过;Linux Bridge没有配置VLAN端口就会让所有的报文通过。
Linux Bridge在OpenStack的云计算网路中也是有着非常重要和广泛的应用,nova-network就用Linux Bridge和Vlan做租户隔离,即使后面的Neutron组建在OpenvSwitch做了Plugin时也大量用到了Linux Bridge和VLAN。

7.OpenvSwitch说明

OpenvSwitch是开源Apache 2.0的高质量多层次虚拟交换机软件,在某一个虚拟化的环境中,vSwitch的主要功能:传递VM之间的流量、实现VM和外界网络通信。最初的虚拟机之间的隔离使用了Nova-network,底层采用的是Linux Bridge技术,虚拟机网络的组建和配置非常不灵活而且配置无法模块化,扩展非常困难,对于运维来说对错误定位也有一定的难度,OpenvSwitch就是为了解决以上问题而出现的,支持QoS、镜像功能和netflow功能等。OpenvSwitch支持vlan、vxlan和gre等多种隔离方式,同时支持OpenFlow协议,在后续的SDN技术可以延续对其管理。

8.NameSpace方案

Linux系统中的namespace称之为container,是一种资源隔离方案,是基于容器的虚拟化技术的基础,和C++里面的namespace非常类似,所以namespace是属于Linux系统层次资源管理和使用的技术内容,不属于网络部分的概念。
在Linux的系统调用进程创建函数clone,设置一个CLONE_NEWPID,参数就会新建一个namespace,在每个namespace里就如同新系统,进程号也是从1开始,独立的系统PID、IPC通信机制、网络环境、路由表和防火墙规则。
(1)namespace特点
① 在不同的namespace中资源是隔离的,信息传递只能通过网络来完成。
② 部署namespace开销小,部署迅速,但是这对内核开发来说是难事。
③ 与其他的虚拟化技术和云计算平台相比,不能指定任意想要的操作系统并部署想要的操作软件。

(2)linux namespace的常见命令
① 显示信息:包括路由和DHCP信息。
#ip netns list
② 显示某一个namespace内部的信息:如显示网络地址命令
#ip netns exec <IP的id> ip a
③ 查看防火墙信息:查看防火墙信息命令
ip netns exec iptables -nL
④ 创建测试NameSpace网桥:模拟Linux网桥的创建,并结合OpenvSwitch的网桥,完成一个测试网桥,并连接两个NameSpace,预期完成的效果如图
在这里插入图片描述
创建namespace1和namespace2命名空间。
#ip netns add namespace1
#ip netns add namespace2

创建br-ns网桥。
#ovs-vsctl add-brbr-ns

创建内部通信端口。
#ovs-vsctl add-port br-ns tap1 – set interface tap1 type=internal
#ovs-vsctl add-port br-ns tap2 – set interface tap2 type=internal

将tap1和tap2分别加入命名空间。
#ip link set tap1 netns namespace1
#ip link set tap2 netns namespace2

配置命名空间地址。
#ip netns exec namespace1 ipaddr add 192.168.0.10/24 dev tap1
#ip netns exec namespace1 ip link set tap1 up
#ip netns exec namespace1 ip link set lo up
#ip netns exec namespace2 ipaddr add 192.168.0.20/24 dev tap2
#ip netns exec namespace2 ip link set tap2 up
#ip netns exec namespace2 ip link set lo up

检测网络通畅。
#ip netns exec namespace1 ping 192.168.0.10
#ip netns exec namespace2 ping 192.168.0.20
#ip netns exec namespace1 ping 192.168.0.20
#ip netns exec namespace2 ping 192.168.0.10

完成创建ovs输出并查看,效果如下。
[root@controller ~]# ovs-vsctl show
a624a3b6-63ab-4ffd-b7ca-503277ec222d
Bridge br-ns
Port “tap2”
Interface “tap2”
type: internal
Port “tap1”
Interface “tap1”
type: internal
Port br-ns
Interface br-ns
type: internal
ovs_version: “2.1.3”

查看Namespace命令,执行效果如下。
[root@controller ~]# ip netns list
namespace1
namespace2

设定查看某个namespace的地址,执行效果如下所示。
[root@controller ~]# ip netns exec namespace1 ip a
28: lo: <LOOPBACK,UP,LOWER_UP>mtu 16436 qdiscnoqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
31: tap1: <BROADCAST,UP,LOWER_UP>mtu 1500 qdiscnoqueue state UNKNOWN
link/ether f6:88:67:c6:85:99 brdff:ff:ff:ff:ff:ff
inet 192.168.0.10/24 scope global tap1
inet6 fe80::f488:67ff:fec6:8599/64 scope link
valid_lft forever preferred_lft forever

9.DNSmasq工具

DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。

查看已经启动的dnsmasq进程命令如下。
#ps aux |grep dnsmasq
通过上面的结果可以看出,它的主要作用是为虚拟机分配IP地址,即每一个DNSmasq进程提供一个DHCP服务,同样的每启动一个这样的DHCP进程,同样保存在网络节点的/var/lib/neutron/dhcp/目录内部,而实例对应的MAC和分配的IP则对应在网络ID内的hosts文件内。
[root@controller ~]# ls -l /var/lib/neutron/dhcp/
total 4
drwxr-xr-x. 2 neutron neutron 4096 Oct 12 15:30 d152d61e-a548- 492e-a634-23c87b91f1eb
[root@controller ~]# cat /var/lib/neutron/dhcp/d152d61e-a548-492e-a634- 23c87b91f1eb/host
fa:16:3e:1b:66:b0,host-10-1-1-2.openstacklocal,10.1.1.2
fa:16:3e:fc:59:f3,host-10-1-1-1.openstacklocal,10.1.1.1
fa:16:3e:8a:9c:3b,host-10-1-1-4.openstacklocal,10.1.1.4

10.Neutron 网络拓扑

多平面网络,存在实例网络和外部通信网络同为一个网络,但同时又可以共享多个网络,当两个虚拟机需要相互通信时,虚拟机内部可以通过多个网卡同时共享一个物理网段,
混合平面私有网络,是指每个Tenant拥有租户自己的实例网络,同时共享一个相同的共享实例外部网络。其中第一台VM同属于Tenant A和Tenant B,第二台VM则只属于Tenant B私有网络,

多平面网络:
在这里插入图片描述
混合平面私有网络:
在这里插入图片描述
私有网络实现运营商路由功能。通过虚拟路由功能,连接多个租户内部实例网络,同时可以直接通过路由提供的SNAT功能访问外部网络,如图所示。
私有网络实现运营商路由:
在这里插入图片描述
通过私有网络实现每个租户创建自己专属的网络区段。每个租户对应租户路由设备,实现每个租户创建自己的专属网络环境,每个网络连接自己专属的虚拟路由器,满足访问外部网络,如图所示。
在这里插入图片描述

1.基础操作练习

(1)创建网络
列出系统扩展命令如下,执行结果如下所示。
$ neutron ext-list -c alias -c name

生效环境变量的命令如下。
#source /etc/keystone/admin-openrc.sh

创建网络的命令如下:
$ neutron net-create ext-net --shared --router:external=True

(2)创建子网
创建子网的命令如下:
$ neutron subnet-create ext-net --name ext-subnet --allocation-pool start=172.24.7.100,end=172.24.7.200 --disable-dhcp --gateway 172.24.7.254 172.24.7.0/24

(3)创建用户网络
创建用户网络的命令如下。
$ neutron net-create demo-net

(4)创建用户子网
创建用户子网的命令如下。
$ neutron subnet-create demo-net --name demo-subnet --gateway 10.0.0.1 10.0.0.0/24

(5)创建路由
创建路由器的命令如下。
$ neutron router-create router1

(6)创建路由网关接口
创建路由网关接口的命令如下,执行结果如下所示。
$ neutron router-interface-add router1 demo-subnet
Added interface 70c3c2af-cc96-4e5c-80aa-d9797656e836 to router router1.
$ neutron router-gateway-set router1 ext-net
Set gateway for router router1

(7)查看整体效果
在这里插入图片描述
(2)通过Shell命令行创建网络和子网
① 为业务部通过命令创建网络和子网,命令如下
#neutron net-create BS-Net
#neutron subnet-create --name BS-Subnet --gateway 172.24.4.1 --allocation-pool start=172.24.4.2,end=172.24.4.254 BS-Net 172.24.4.0/24
② 为工程部通过命令创建网络和子网
#neutron net-create IT-Net
#neutron subnet-create --name IT-Subnet --gateway 172.24.5.1 --allocation-pool start=172.24.5.2,end=172.24.5.254 IT-Net 172.24.5.0/24

(3)创建外来访问使用网络
#neutron net-create Guest-Net
#neutron subnet-create --name Guest-Subnet --gateway 172.24.6.1 --allocation-pool start=172.24.6.2,end=172.24.6.254 Guest-Net 172.24.6.0/24

3.网络隔离
创建业务部安全组规则
#nova secgroup-create BS_Rule 业务部安全组规则
#nova secgroup-add-rule BS_Rule ICMP -1 -1 172.24.4.0/24
#nova secgroup-add-rule BS_Rule TCP 1 65535 172.24.4.0/24
#nova secgroup-add-rule BS_Rule UDP 1 65535 172.24.4.0/24
#nova secgroup-add-rule BS_Rule ICMP -1 -1 172.24.5.0/24
#nova secgroup-add-rule BS_Rule TCP 1 65535 172.24.5.0/24
#nova secgroup-add-rule BS_Rule UDP 1 65535 172.24.5.0/24
查看安全组规则
#nova secgroup-list-rules BS_Rule
创建工程部安全组规则
#nova secgroup-create IT_Rule工程部安全组规则
#nova secgroup-add-rule IT_Rule ICMP -1 -1 172.24.5.0/24
#nova secgroup-add-rule IT_Rule TCP 1 65535 172.24.5.0/24
#nova secgroup-add-rule IT_Rule UDP 1 65535 172.24.5.0/24
#nova secgroup-list-rules IT_Rule
创建IT部门安全组规则
在这里插入图片描述

发布了6 篇原创文章 · 获赞 0 · 访问量 202

猜你喜欢

转载自blog.csdn.net/weixin_45678149/article/details/104478633