1.Neutron概要
OpenStack网络服务提供了一个API接口,允许用户在云上设置和定义网络连接和地址。这个网络服务的项目代码名称是Neutron。OpenStack网络处理虚拟设备的创建和管理网络基础设施,包括网络、交换机、子网以及由计算服务(nova)管理的设备路由器。高级服务,如防火墙或虚拟私人网络(VPN)也可以使用。
OpenStack网络由neutron-server,持久化存储数据库,和任意数量的插件代理组成,这些代理提供其他服务,如与本地linux联网接口机制、外部设备或SDN控制器。
OpenStack网络是完全独立的,可以部署到一个专用主机。如果你的部署使用了一个控制器主机运行集中计算组件,你可以部署网络服务来取代主机的设定。
OpenStack网络集成了各种组件:
- 身份认证(Keystone)用于身份验证以及api请求的授权。
- 计算服务(Nova)用于把一个特定网络插入每个虚拟机中。
- 仪表盘(Horizon)由管理员和租户通过一个基于WEB的图形界面创建和管理网络。
2.Neutron内容
OpenStack网络(neutron)管理OpenStack环境中所有虚拟网络基础设施(VNI),物理网络基础设施(PNI)的接入层。OpenStack网络允许租户创建包括像 firewall, :term:load balancer
和 :term:virtual private network (VPN)
等这样的高级虚拟网络拓扑。
网络服务提供网络,子网以及路由这些对象的抽象概念。每个抽象概念都有自己的功能,可以模拟对应的物理设备:网络包括子网,路由在不同的子网和网络间进行路由转发。
对于任意一个给定的网络都必须包含至少一个外部网络。不像其他的网络那样,外部网络不仅仅是一个定义的虚拟网络。相反,它代表了一种OpenStack安装之外的能从物理的,外部的网络访问的视图。外部网络上的IP地址可供外部网络上的任意的物理设备所访问
外部网络之外,任何 Networking 设置拥有一个或多个内部网络。这些软件定义的网络直接连接到虚拟机。仅仅在给定网络上的虚拟机,或那些在通过接口连接到相近路由的子网上的虚拟机,能直接访问连接到那个网络上的虚拟机。
如果外部网络想要访问实例或者相反实例想要访问外部网络,那么网络之间的路由就是必要的了。每一个路由都配有一个网关用于连接到外部网络,以及一个或多个连接到内部网络的接口。就像一个物理路由一样,子网可以访问同一个路由上其他子网中的机器,并且机器也可以访问路由的网关访问外部网络。
另外,你可以将外部网络的IP地址分配给内部网络的端口。不管什么时候一旦有连接连接到子网,那个连接被称作端口。你可以给实例的端口分配外部网络的IP地址。通过这种方式,外部网络上的实体可以访问实例.
网络服务同样支持安全组。安全组允许管理员在安全组中定义防火墙规则。一个实例可以属于一个或多个安全组,网络为这个实例配置这些安全组中的规则,阻止或者开启端口,端口范围或者通信类型。
每一个Networking使用的插件都有其自有的概念。虽然对操作VNI和OpenStack环境不是至关重要的,但理解这些概念能帮助你设置Networking。所有的Networking安装使用了一个核心插件和一个安全组插件(或仅是空操作安全组插件)。另外,防火墙即服务(FWaaS)和负载均衡即服务(LBaaS)插件是可用的。
3.Neutron架构
- 位于最上层的Neutron Server充当一个门派中的“掌门人”角色(RESTful Server),负责接受来自外部门派(项目)的API请求,比如Nova API创建网络的请求。
- 位于中间层的Neutron plugin充当一个门派中的“信使”角色,负责传达最高层指令给下面的人。
- 位于下层的Neutron Agent充当一个门派中“干活”角色,负责执行一些具体的任务和操作。
类似于各个计算、存储节点被虚拟化为计算、存储资源池,Openstack所在的整个物理网络在Neutron中也被虚拟化为网络资源池。通过对网络资源的划分和可扩展性,Neutron能够为每个租户提供独立的虚拟网络环境。
Neutron分别提供了二层(L2)vSwitch交换和三层(L3)Router路由抽象的功能,对应于物理网络环境中的交换机和路由器实现。具体实现了如下功能:
- Router:为租户提供路由、NAT等服务。
- Network:对应于一个真实物理网络中的二层局域网(VLAN),从租户的的角度而言,是租户私有的。
- Subnet:为网络中的三层概念,指定一段IPV4或IPV6地址并描述其相关的配置信息。它附加在一个二层Network上,指明属于这个network的虚拟机可使用的IP地址范围。
(1)Linux虚拟网络
Neutron中最为核心的工作便是对二层物理网络network的抽象与管理。
虚拟机的网络功能由虚拟网卡(vNIC)提供,Hypervisor可以为每个虚拟机创建一个或多个vNIC,从虚拟机的角度出发,这些vNIC等同于物理的网卡,为了实现与传统物理网络一样的网络功能,与物理网卡一样,Switch也被虚拟化成虚拟交换机(OpenvSwitch),各个vNIC连接在vSwitch的端口(br-int)上,最后这些vSwitch通过物理服务器的物理网卡访问外部的物理网络。
对一个虚拟的二层网络结构而言,主要是完成两种网络设备的虚拟化,即物理网卡和交换设备。在Linux环境下网络设备的虚拟化主要有以下几种形式:
1)TAP/TUN/VETH
提到Neutron的虚拟网络功能实现,不得不先提基于Linux内核级的虚拟设备。
TAP/TUN/VETH是Linux内核实现的一对虚拟网络设备,TAP工作在二层,收发的是 MAC 层数据帧;TUN工作在三层,收发的是 IP 层数据包。Linux 内核通过TAP/TUN设备向绑定该设备的用户程序发送数据,反之,用户程序也可以像操作硬件网络设备一样,通过TAP/TUN设备接收数据。
基于TAP设备,实现的是虚拟网卡的功能,当一个TAP设备被创建时,在Linux的设备文件目录下将会生成一个对应的字符设备文件(/dev/tapX文件),而运行其上的用户程序便可以像使用普通文件一样打开这个文件进行读写。
VETH设备总是成对出现的,接收数据的一端会从另一端发送出去,理解为一根虚拟的网线即可。
2)Linux Bridge
Linux Bridge(Linux内核实现的网桥)是工作在二层的虚拟网络设备,功能类似于物理的交换机。
它的实现原理是,通过将其他Linux网络设备绑定到自身的Bridge上,并将这些设备虚拟化为端口。为什么我们已经有了OVS,还要有Linux Bridge 呢?这是因为Linux Bridge实现了qbrxxx设备,提供了OVS无法支持的安全组(Security Group)功能。
3)Open vSwitch
对于云计算中的虚拟网络而言,交换设备的虚拟化是很关键的一环,vSwitch负责连接vNIC与物理网卡,同时也桥接同一物理服务器内的各个VM的vNIC。
因此,我们可以像配置物理交换机一样,将接入到OpenvSwitch(需要指出的是在多个以上时,vSwitch是分布式虚拟交换机)上的各个VM分配到不同的VLAN中实现网络隔离,并且,我们也可以在OVS端口上为VM配置QOS,同时OVS也支持包括NetFlow、sFlow等标准的管理接口和协议。从而,通过这些接口可以实现VM流量监控的任务。
运行在云环境中各种或相同虚拟化平台上的多个vSwitch实现了分布式架构的虚拟交换机。一个物理服务器上的vSwitch可以透明的与其他服务器上的vSwitch连接通信。
(2)Neutron RPC
RPC是neutron中跨模块进行方法调用的很重要的一种方式,主要包括client端和server端。client端用于发出rpc消息,server端用于监听消息并进行相应处理。
1)Agent 端RPC
在dhcp agent、 l3 agent、 firewall agent以及metering agent的main函数中都能找到类似的创建一个Agent rpc服务端的代码。
2)plugin端的rpc
3)neutron-server端的rpc
(3)Neutron的核心
- 网络:在实际的物理环境下,我们使用交换机或集线器把多个计算机连接起来形成了网络。在Neutron的世界里,网络也是将多个不同的云主机连接起来。
- 子网:在实际的物理环境下,在一个网络中。我们可以将网络划分为多个逻辑子网。在Nrutron的世界里,子网也是隶属于网络下的。
- 端口:在实际的物理环境下,每个子网或每个网络,都有很多端口,比如交换机端口来供计算机连接。在Neutron的世界里端口也是隶属于字往下,云主机的网卡会对应到一个端口上。
- 路由器:在实际的网络环境下,不同网络或不同逻辑子网之间如果需要通信,需要通过路由器进行路由。在Nrutron里路由也是这个作用,用来连接不同的网络或子网。
4.Neutron网络模型
1.单一平面网络
单一平面网络的缺点:
- 存在单一网络瓶颈,缺乏可伸缩性。
- 缺乏合适的多租户隔离。
2.多平面网络
3.混合平面私有网络
4.通过私有网络实现运营商路由功能
5.通过私有网络实现每个租户创建自己专属的网络区段
5.Neutron网络流程
虚拟实现的1层到3层(TCP/IP)整个流程
一层的服务器及其VM(由Linux Kernel创建的qbr、tap/tun、veth、iptables这些设备分别实现相应功能)→二层的网络设备(由OpenvSwitch、dnsmasq创建的qvo、br-int、br-tun、br-ex、qrouter、qdhcp等设备分别实现相应功能)→再到,三层的传输程序(由patch-int/patch-tun等分别实现相应的功能)。
在Neutron虚拟网络中,除了Neutron本身命令外,还包括了Linux Bridge的brctl命令;OpenvSwitch的ovs-vsctl、ovs-ofctl命令和L3的NameSpace的ipnetns等命令。