网络是openstack最重要的资源之一,没有网络,虚拟机将被隔离。Openstack的网络服务最主要的功能就是为虚拟机实例提供网络连接,最初由nova的一个单独模块nova-compute实现,但是nova-compute支持的网络服务有限,无法适应大规模、高密度和多项目的云计算,现已被专门的网络服务项目Neutron所取代
Neutron为整个openstack环境提供软件定义网络支持,主要功能包括二层交换、三层路由、防火墙、VPN,以及负载均衡等。Neutron在由其他openstack服务 (如nova)管理的网络接口设备(如虚拟网卡)之间提供网络连接即服务
实现虚拟化后,多个物理服务器可以被虚拟机取代,部署在同一台物理服务器.上。虚拟机由虚拟机管理器(Hypervisor)实现,在Linux系统中Hypervisor通常采用kvm。在对服务器进行虚拟化的同时,也对网络进行虚拟化
Hypervisor为虚拟机创建一个或多个虚拟网卡(vNIC),虚拟网卡等同于虚拟机的物理网卡。物理交换机在虚拟网络中被虚拟为虚拟交换机(vSwitch),虚拟机的虚拟网卡连接到虚拟交换机上,虚拟机交换机再通过物理主机的物理网卡连接到外部网络
对于物理网络来说,虚拟化的主要工作是对网卡和交换设备的虚拟化
openstack网络服务最核心的任务是对二层物理网络进行抽象和管理
与物理机不同,虚拟机并没有硬件设备,但是也要与物理机和其他虚拟机进行通信。Linux KVM的解决方案是提供虚拟网桥设备,像物理交换机具有若干网络接口(网卡) 一样,在网桥,上创建多个虚拟的网络接口,每个网络接口再与KVM虛拟机的网卡相连
在Linux的KVM虚拟系统中,为支持虚拟机的网络通信,网桥接口的名称通常以vnet开头,加上从0开始顺序编号,如vnet0、vnet1, 在创建虚拟机时会自动创建这些接口。虚拟网桥br1和br2分别连接到物理主机的物理网卡1和物理网卡
一个网桥可以桥接若干虚拟机,当多个虚拟机连接在同一网桥时,每个虚拟机发出的广播包会引发广播风暴,影响虚拟机的网络性能。通常使用虚拟局域网(VLAN)将部分虚拟机的广播包限制在特定范围内,不影响其他虚拟机的网络通信
通常使用VLAN将部分虚拟机的广播包限制在特定范围内,不影响其他虚拟机的网络通信
将多个虚拟机划分到不同的VL AN中,同一VLAN的虚拟机相当于连接同一网桥上
在Linux虚拟化环境中,通常会将网桥与VLAN对应起来,也就是将网桥划分到不同的VLAN中
VLAN协议为802.1Q, VLAN是具有802.1Q标签的网络
开放虚拟交换机(Open vSwitch)是与硬件交换机具备相同特性,可在不同虚拟平台之间移植,具有产品级质量的虚拟交换机,适合在生产环境中部署
交换设备的虚拟化对虚拟网络来说至关重要。在传统的数据中心,管理员可以对物理交换机进行配置控制服务器的网络接入,实现网络隔离、流量监控、QoS配置、流量优化等目标。在云环境中,采用Open vSwitch技术的虚拟交换机可使虚拟网络的管理、网络状态和流量的监控得以轻松实现
Open Switch在云环境中的虚拟化平台上实现分布式虚拟交换机,可以将不同主机上的OpenvSwitch交换机连接起来,形成一个大规模的虚拟网络
OpenStack网络服务提供一个API让用户在云中建立和定义网络连接。该网络服务的项目名称是Neutron。OpenStack网络负责创建和管理虚拟网络基础架构,包括网络、交换机、子网和路由器,这些设备由OpenStack计算服务Nova管理。同时,网络服务还提供防火墙和VPN这样的高级服务。可以将网络服务部署到特定主机上。OpenStack网络组件与身份服务、计算服务和仪表板等多个OpenStack组件进行整合
一个简化的典型的Neutron网络结构如图所示,包括-个外部网络、一个内部网络和-个路由器
外部网络负责连接OpenStack项目之外的网络环境,又称公共网络。与其他网络不同,它不仅仅是一个虚拟网络,更重要的是,它表示OpenStack网络能被外部物理网络接入并访问。外部网络可能是企业的局域网(Intranet),也可能是互联网(Internet) , 这类网络并不是由Neutron直接管理
内部网络完全由软件定义,又称私有网络。它是虚拟机实例所在的网络,能够直接连接到虚拟机。项目用户可以创建自己的内部网络。默认情况下,项目之间的内部网络是相互隔离的,不能共享。该网络由Neutron直接配置与管理
路由器用于将内部网络与外部网络连接起来,因此,要使虚拟机访问外部网络,必须创建一个路由器
Neutron需要实现的主要是内部网络和路由器。内部网络是对二层(L2)网络的抽象,模拟物理网络的二层局域网,对于项目来说,它是私有的。路由器则是对三层(L3) 网络的抽象,模拟物理路由器,为用户提供路由、NAT等服务
网路:一个隔离的二层广播域,类似交换机中的VLAN。Neutron支持多种类型的网络,如FLAT、VLAN、VXLAN等
子网: 一个IPV4或者IPV6的地址段及其相关配置状态。虚拟机实例的IP地址从子网中分配。每个子网需要定义IP地址的范围和掩码(这个有点像DHCP中定义的作用域的概念)
端口:连接设备的连接点,类似虚拟交换机上的一个网络端口。端口定义了MAC地址和IP地址,当虚拟机的虚拟网卡绑定到端口时,端口会将MAC和IP分配给该虚拟网卡
通常可以创建和配置网络、子网和端口来为项目搭建虚拟网络。网络必须属于某个项目,一个项目中可以创建多个网络。一个子网只能属于某个网络,一个网络可以有多个子网。一个端口必须属于某个子网,一个子网可以有多个端口
Local:Local网络与其他网络和节点隔离。该网络中的虚拟机实例只能与位于同一节点上同一网络的虚拟机实例通信,实际意义不大,主要用于测试环境。位于同一Local网络的实例之间可以通信,位于不同Local网络的示例之间无法通信。一个LocaI网络只能位于同一个物理节点上,无法跨节点部署
Flat:Flat是一种简单的扁平网络拓扑,所有的虚拟机实例都连接在同一网络中,能与位于同一网络的实例进行通信,并且可以跨多个节点。这种网络不使用VLAN,没有对数据包打VLAN标签,无法进行网络隔离。Flat是基于不使用VLAN的物理网络实施的虚拟网络。每个物理网络最多只能实现一个虚拟网络
VLAN:VLAN是支持802.1q协议的虚拟局域网,使用VLAN标签标记数据包,实现网络隔离。同一VLAN网络中的实例可以通信,不同VLAN网络中的实例只能通过路由器来通信。VL AN网络可以跨节点,是应用最广泛的网络拓扑类型之一
VXLAN:VXLAN (虚拟扩展局域网)可以看作是VLAN的一种扩展,相比于VLAN,它有更大的扩展性和灵活性,是目前支持大规模多租房网络环境的解决方案。由于VLAN包头部限长是12位,导致VLAN的数量限制是4096 (2^12) 个,不能满足网络空间日益增长的需求。目前VXL AN的封包头部有24位用作VXLAN标识符 (VNID)来区分VXLAN网段,最多可以支持16777216 (2^24) 个网段。
VXLAN使用STP防止环路,导致一半的网络路径被阻断。VXL AN的数据包是封装到UDP通过三层传输和转发的,可以完整地利用三层路由,能克服VLAN和物理网络基础设施的限制,更好地利用已有的网络路径
GRE:GRE (通用路由封装)是用一种网络层协议去封装另- -种网络层协议的隧道技术。GRE的隧道由两端的源IP地址和目的IP地址定义,它允许用户使用IP封装IP等协议,并支持全部的路由协议。在OpenStack环境中使用GRE意味着“IP over IP”,GRE与VXLAN的主要区别在于,它是使用IP包而非UDP进行封装的
GENEVE:GENEVE(通用网络虚拟封装)的目标宣称是仅定义封装数据格式,尽可能实现数据格式的弹性和扩展性GENEVE封装的包通过标准的网络设备传送,即通过单播或多播寻址,包从-个隧道端点传送到另一个或多个隧道端点。GENEVE帧格式由一个封装在IPV4或IPV6的UDP里的简化的隧道头部组成。GENEVE推出的主要目的是为了解决封装时添加的元数据信息问题(到底多少位,怎么用GENEVE自动识别与调整) ,以适应各种虚拟化场景。
随着云计算、大数据、移动互联网等新技术的普及,网络虚拟化技术的趋势在传统单层网络基础.上叠加一层逻辑网络。这将网络分为两个层次,传统单层网络称为Underlay (承载网络),叠加其上的逻辑网络称为Overlay (叠加网络或覆盖网络)。Overlay网络的节 点通过虚拟的或逻辑的连接进行通信,每一个虚拟的或逻辑的连接对应于Underlay网络的一条路径,由多个前后衔接的连接组成。Overlay网络无须对基础网络进行大规模修改,不用关心这些底层实现,是实现云网融合的关键。
VXLAN、GRE和GENEVE都是基于隧道技术的Overlay网络
Neutron仅有一个主要服务进程neutron-server。它是运行在控制节点上的,对外提供Openstack网络API作为访问Neutron的入口,收到请求后调用插件进行处理,最终由计算节点和网络节点上的各种代理完成请求
网络提供者是指提供OpenStack网络服务的虚拟或物理网络设备,如Linux Bridge. Open vSwitch,或者其他支持Neutron的物理交换机
与其他服务一样,Neutron的各组件服务之间需要相互协调和通信,neutron-server, 插件和代理之间通过消息队列进行通信和相互调用
数据库用于存放OpenStack的网络状态信息,包括网络、子网、端口、路由器等
客户端是指使用Neutron服务的应用程序,可以是命令行工具Horizon和Nova计算服务等
实例:以一个创建VLAN 100虚拟网络的流程为例说明这些组件如何协同工作
neutron-server收到创建网络的请求,通过消息队列通知已注册的Linux Bridge插件。(插件可以有很多,这里举例创建虚拟网络的插件是Linux Bridge插件)
该插件将要创建的网络信息(如名称、VLAN ID等)保存到数据库中,并通过消息队列通知运行在各节点上的代理
代理收到消息后会在节点上的物理
网卡上创建VLAN设备(比如eth1.100) ,并创建-一个网桥(比如brqxxx)来桥接VLAN设备
RESTful API:直接对客户端提供API服务,属于最前端的API, 包括Core API和Extension API两种类型。CoreAPI提供管理网络、子网和端口核心资源的RESTful API; Extension API则提供管理路由器、防火墙、负载均衡、安全组等扩展资源的RESTful API
Common Service:通用服务,负责对API请求进行检验、认证,并授权
Neutron Core:核心处理程序,调用相应的插件API来处理API请求
Plugin API:定义插件的抽象功能集合,提供调用插件的API接口,包括Core Plugin API和Extension。Plugin API两种类型。Neutron Core通过Core Plugin API调用相应的Core Plugin,通过Extension
Plugin API调用相应的Service Plugin
插件是Neutron的一种API的后端实现,目的是增强扩展性。插件按照功能可以分为Core Plugin和Service Plugin两种类型。Core Plugin提供基础二层虚拟网络支持,实现网络、子网和端口等核心资源抽象。Service Plugin是指Core Plugin之外的其他插件,提供路由器、防火墙、安全组、负载均衡等服务支持。从H版开始,Neutron提供一个名为L3 Router Service Plugin的插件支持路由服务
插件的调用由neutron-server的Core Plugin API和Extex sion Plugin API调用,用于确定具体的网络功能,即要配置什么样的网络
工作流程:插件处理neutron-server发来的请求, 主要职责是在数据库中维护Neutron网络的状态信息(更新Neutron数据库) 。通知相应的代理实现具体的网络功能。每-个插件支持一组API资源井完成特定的操作,这些操作最终由插件通过RPC调用相应的代理来完成。代理处理插件转来的请求,负责在网络提供者上真正实现各种网络功能。代理使用物理网络设备或虚拟化技术完成实际的操作任务,如用于路由器具体操作的L3代理
①控制节点和计算节点部署方案介绍
控制节点上可以部署neutron-server, Core Plugin和Service Plugin的代理。这些代理包括neutron-plugin-agent, neutron-medadata-agent. neutron-dhcp-agent. neutron-l3-agent. neutron-lbass-agent等。 Core Plugin和Service Plugin已经靠成到neutron-server中,不需要运行独立的Plugin服务。计算节点上可以部署Core Plugin, Linux Bridge或Open vSwitch的代理,负责提供二层网络功能。控制节点和计算节点都需要部署Core Plugin的代理,因为控制节点与计算节点通过该代理,才能建立二层连接
②控制节点和网络节点的结合
可以通过增加网络节点承担更大的负载。该方案特别适合规模较大的OpenStack环境。控制节点部署neutron-server服务,只负责通过neutron-server响应API请求。网络节点部署的服务包括Core Plugin的代理和Server Plugin的代理。将所有的代理主键从上述控制节点分离出来,部署到独立的网络节点上。由独立的网络节点实现数据的交换、路由以及负载均衡等高级网络服务。
Neutron可以通过开发不同的插件和代理来支持不同的网络技术,这是一种相当开放的架构。不过随着所支持的网络提供者种类的增加,开发人员发现了两个突出的问题。一个问题是多种网络提供者无法共存。Core Plugin负责管理和维护Neutron二层虚拟网络的状态信息,一个Neutron网络只能由一个插件管理,而Core Plugin插件与相应的代理是一一对应的。 如果选择Linux Bridge插件,则只能选择Linux Bridge代理,必须在OpenStack的所有节点上使用Linux Bridge插件,则只能选择Linux Bridge代理,必须在OpenStackR的所有节点上使用Linux Bridge作为虚拟交换机。另一个问题是开发新的插件的工作量太大,而所有传统的Core Plugin之间存在大量反复代码
为解决这两个问题,从OpenStack的H版开始,Neutron实现了一个插件ML2,旨在取代所有的Core Plugin,允许在OpenStack网络中同时使用多种二层网络技术,不同的节点可以使用不同的网络实现机制。ML2能够与现有的代理无缝集成,以前使用的代理无须变更,只需将传统的Core Plugin替换成ML2。ML2使得对新的网络技术的支持更为简单,无须从头开发Core Plugin,只需要开发相应的机制驱动,大大减少编写和的代码
类型驱动(Type Driver) : Neutron支持的每一种网络类型都有一 个对应的ML2类型驱动。类型驱动负责维护网络类型的状态、执行验证。创建网络等工作
机制驱动(Mechansim Driver) : geutron支持的每一种网络机制都有一个对应的ML2机制驱动。机制驱动负责获取由类型驱动维护的网络状态,并确保在相应网络设备(物理或虚拟的)上正确实现这些状态。目前Neutron已经实现的网络机制有以下3种类型:基于代理的: Linux Bridge. Open vSwitch等。基于控制器的: OpenDaylight,VMWare NSX等.基于物交换机的: Cisco Nexus. Arista. Mellanox等
扩展资源: ML 2作为一个Core Plugin,在实现网络,子网和端口核心资源的同时。也实现包括端口绑定。安全组等部分扩展资源
Linux Bridge是成熟可靠的Neutron二层网络虚拟化技术,支持Local, Flat、VLAN和VXLAN这4种网络类型
Linux Bridge可以将一台主机上的多个网卡桥接起来,充当一台交换机。它既可以桥接物理网卡,又可以是虚拟网卡。用于桥接虚拟机网卡(虚拟网卡)的是Tap接口,这是一个虚拟出来的网络设备,称为Tap设备,作为网桥的一个端口。Tap接口在逻辑上与物理接口具有相同的功能,可以接收和发送数据包
如果选择Linux Bridge代理,在计算节点上数据包从虚拟机发送到物理网卡需要经过以下设备
Tap接口:用于网桥连接到虚拟网卡,命名规则为tapxxx
Linux网桥:作为二二层交换机,命名规则为brxxxx
VLAN接口:在VLAN网络中用于连接网桥,命名为ethx.y (x为网卡名称,为VLAN ID)
VXLAN接口:在VXL AN网络中用于连接网桥,命令为vxlan-z(z是VNID)
物理网络接口:用于连接到物理网络
与Linux Bridge相比,Open vSwitch (OVS)具有集中管控功能,而且性能更加优化,支持更多的功能,目前在OpenStack领域成为主流它支持Local, Flat, VLAN, VXLAN, GRE和GENEVE等所有网络类型
①Open vSwitch的设备类型
Tap设备:用于网桥连接虚拟机网卡
Linux网桥:桥接网络接口
VETH对:直接相连的一-对虚拟网络接口。两个虚拟网络接口一收一发。用来连接两个虚拟网桥
OVS网桥: Open vSwitch的核心设备,包括-个OVS集成网桥和一个OVS物理连接网桥。所有在计算节点上运行的虚拟机连接到集成网桥,Neutron通过配置集成网桥上的端口来实现虚拟机网络隔离。物理连接网桥直接连接到物理网卡。这两个OVS网桥通过一个VETH对来对接
②Open vSwitch的数据包流程
如果选择Open vSwitch代理。在计算节点上数据包从虚拟机发送到物理网卡需要依次经过以下设备:
Tap接口:命名为tapxxx.
Linux网桥:命名为qbrxxxx(xxxx编号要与apxxxx编号要一致)
VETH对:两端分别命名为qvbxxx和qvoxx (其中xxx与taxxx中的xxx也要保持一致)
OVS PATCH端口:两端分别命名为int-br-ethx和phy-br-ethx (x为物理网卡名称中的编号) .这是特有的端口类型,只能在Open vSwitch中使用
OVS物理连接网桥:分为两种类型,在Flat和VLAN中使用OVS提供者网桥,命名为br-ethx (x为物理网卡名称中的编号) ;在VXLAN. GRE或GENEVE叠加网络中使用OVS隧道网桥,命名为br-un,另外,在Local网络中不需要任何OVS物理连接网桥。物理网络接口:用于连接到物理网络,命名为ethx (x为物理网卡名称中的编号)
③Open vSwitch网络的逻辑结构
所有的虚拟机都连接到同一一个网桥br-int,Open vSwitch通过配置br-int和br-ethx_上的流规则来进行VL AN转换,进而实现VLAN之间的隔离。例子中内部的VLAN标签分别为1和2,而物理网络的VLAN标签则为101和102.当br-eth1网桥.上的phy-br-eth1端口收到一个VLAN 1标记的数据包时,会将其中的VLAN 1转让为VLAN 101;当br-int网桥上的int-br-eth1端口收到一个VLAN 101标记的数据包时会将其中的VLAN 101转换为VLAN 1
①DHCP主要组件
DHCP代理(neutron-dhcp-agent)
DHCP驱动
DHCP代理调度器(agent scheduler)
DHCP代理的主要任务
定期报告DHCP代理的网络状态,通过RPC报告给neutron-server,然后通过Core Plugin报告给数据库并进行更新网络状态
启动dnsmasq进程,检测qdhcp-xxxx名称空间(namespace)中的ns-xxxx端口接收到的DHCP DISCOVER请求
DHCP代理配置文件/etc/neutron/dhcp_agent.ini
interface_driver:用来创建TAP设备的接口驱动
dhcp_driver:指定DHCP驱动
②DHCP代理工作机制
创建实例时,Neutron随机生成MAC并从配置数据中分配一个固定IP地址,一起保存到dnsmasq的hosts文件中,让dnsmasq进程做好准备
与此同时, nova-compute会设置虚拟机网卡的MAC地址
实例启动,发出DHCPDISCOVER广播,该广播消息在整个网络中都可以被收到
广播到达dnsmasq监听Tap接口。Dnsmasq收到后检查其host文件,发现有对应项,它以DHCPOFFER消息将IP和网关IP发回到虚拟机实例
虚拟机实例发回DHCPREQUEST消息确认接受DHCPOFFER
Dnsmasq发回确认消息DHCPACK, 整个过程结束
③Linux网络名称空间
Linux网络名称空间是Linux提供的一种内核级别网络环境隔离的方法。当前Linux支持6种不同类别的命名空间,网络名称空间只是其中一种。在二层网络上, VLAN可以将-个物理交换机分割成几个独立的虚拟交换机。在三层网络上,Linux网络名称空间可以将一个物理三层网络分割成几个独立的虚拟三层网络
(1)Linux网络名称空间概述
在Linux中,网络名称空间可以被认为是隔离的拥有单独网络栈的环境。它经常用来隔离网络资源(设备和服务),只有拥有同样网络名称空间的设备才能彼此访问。它还提供了在网络名称空间内运行进程的功能。后台进程可以运行在不同名称空间内的相同端口上,用户还可以虚拟出一块网卡
网络名称空间可以创建一一个完全隔离的全新网络环境,包括一一个独立的网络接口、路由表、ARP表、IP地址表、iptables或ebtables等,与网络有关的组件都是独立的
执行以下命令进入指定的网络名称空间:
ip netns exec net001(netns名称) bash
为虚拟环境net001的eth0接口增加IP地址
ip netns exec net001 ip address add xx.xx.xx.xx/24 dev eth0
网络名称内部通信没有问题,但被隔离的网络名称空间之间要通信,就必须采用特定方法,即VETH对VETH对是一种成对出现的特殊网络设备,它们像一根虚拟的网线,可用于连接两个名称空间,向VETH对一 端输入的数据将自动转发到另一端
例如创建两个网络名称空间netns1和netns2并使他们之间通信,执行以下步骤:
#创建两个网络名称
ip netns add netns1
ip netns add netns2
#创建一个VETH对
ip link add veth1 type veth peer name veth2
#将上述两个VETH虚拟接口分别放置到两个网络名称空间中
ip link set veth1 netns netns1
ip link set veth2 netns netns2
这样两个VETH虚拟接口就分别出现在两个网络名称中,两个空间就打通了,其中的设备可以互相访问
(2)Linux网络名称空间实现DHCP服务隔离
Neutron通过网络名称空间为每个网络提供独立的DHCP和路由服务,从而允许项目创建重叠的网络。如果没有这种隔离机制,网络就不能重叠,这样就失去了很多灵活性
每个dnsmasq进程都位于独立的网络名称空间,命名为qdhcp: xxx.
以创建Flat网络为例,Neutron自动新建该网络对应的网桥brqaxxxx,以及DHCP的Tap设备tapxxxx。 物理主机本身也有一个网络名称空间,称为root, 拥有所有物理和虚拟接口设备,而物理接口只能位于root名称空间。新创建的名称空间默认只有一个回环设备。如果DHCP的Tap虛拟接口放置到qdhcp-xxx名称空间,该Tap虚拟接口将无法直接与root名称空间中网桥设备brqxxxx连接。为此,Neutron使用VETH对来解决这个问题,添加VETH对tapxxxx与ns-xxxx, 让qdexxxxx连接到brqxxxx
(3)Linux网络名称空间实现路由器
Neutron允许在不同网络中的子网的CIDR和IP地址重叠,具有相同IP地址的两个虚拟机也不会产生冲突,这是由于Neutron的路由器通过Linux网络名称空间实现的,每个路由器有自己独立的路由表
④neutron路由器
Neutron路由器是一个三层(L3)网络的抽象,其模拟物理路由器,为用户提供路由、NAT等服务。在OpenStack网络中,不同子网之间的通信需要路由器,项目网络与外部网络之间的通信更需要路由器
Neutron提供虚拟路由器,也支持物理路由器。例如,两个隔离的VLAN网络之间要实现通信,可以通过物理路由器实现,如上图所示,由物理路由器提供相应的IP路由表,确保两个IP子网之间的通信。将两个VLAN网络中的虚拟机的默认网关分别设置为物理路由器的接口A和B的IP地址,VLANA中的虚拟机要与VLAN B中的虚拟机通信时,数据包通过VLAN A中的物理网卡到达物理路由器,由物理路由器转发到VLAN B中的物理网卡,再到目的虚拟机
Neutron的虚拟路由器使用软件模拟物理路由器,路由实现机制相同。Neatron的路由L3代理提供
⑤L3代理
在Neutron中L3代理具有举足轻重的地位,它不仅提供虚拟路由器,而且通过iptables漫供地址转换、浮动地址利安全组功能。L3代理利用Linux IP栈、路由和iptables来实现内部网络中禾同网络的虚拟机实例之间的通信,以及虚拟机实例和外部网络之间的网络流量的路由和转发。L3代理可以部署在控制节点或者网络节点上
#路由
L3代理提供的虚拟路由器通过虚拟接口连接到子网,一个子网一个接口,该接口的地址是该子网的网关地址。L3代理会为每个路由器创建一个名称空间,通过VETH对与TAP相连,然后将网关IP配置在位于名称空间的VETH接口上,这样就能够提供路由。网络节点如果不支持Linux名称空间,则只能运行一个虚拟路由器
#通过网络名称空间支持网络重叠
在云环境下用户可以按照自己的规划创建网络,不同项目的网络IP地址可能会重叠。L3代理使用Linux网络名称空间来提供隔离的转发上下文,隔离不同项目的网络。每个L3代理运行在-个名称空间中,每个名称空间由quouter-命名
#源地址转换
L3代理通过在ptables表中增加POSTROUTING链来实现源地址转换,即内网计算机访问外网时,发起访问的内网P地址转换为外网网关的IP地址。心种功能让虚拟机实例能够直接访问外网,并能够从外网返回。项目网络连接到Neutron路由器,通常将路由器作为默认网关
#目的地址转换
Neutron需要设置浮动IP地址支持从外网访问项目网络中的实例。每个浮动IP唯一对应- 个路由器,浮动IP->关联的端口->所在的子网->包含该子网以及外部子网的路由器。创建浮动IP时,在Neutron分配浮动IP后,通过PRC通知该浮动IP对应的路由器去设置该浮动IP对应的iptables规则。从外网访问虚拟机实例时,目的IP地址为实例的浮动IP地址, 因此必须由iptables将其转化为固定IP地址,然后再将其路由到实例
浮动IP地址提供静态NAT功能,建立外网IP地址与实例所在项目IP地址的一对-映射。浮动IP地址配置在路由器提供网关的外
网接口上,而不是实例中
#安全组
安全组定义了哪些进入网络流量能被转发给虚拟机实例,每个安全组可以有若干条规则,可以给每个实例绑定若干安全组
⑥FWass
FWaaS是一种基于Neutron L3 Agent的虚拟防火墙,是Neutron的一个高级服务。通过它,OpenStack可以将防火墙应用到项目、路由器、路由器端口和虚拟机端口,在子网边界.上对三层和四层的流量进行过滤
Neatron路由器上应用防火墙规则,控制进出项目网络的数据。防火墙必须关联某个策略。FWaaS的应用对象是虚拟路由器,可以在安全组之前控制从外部注入的流量,但是对于同一个子网内的流量不做限制,安全组保护的是实例,而FWaaS保护的是子网,两者互为补充
两个版本: FWaaSv1与FWaaSv2
FWaaSv1是传统的防火墙方案,对路由器提供保护,将防火墙应用到路由器时,该路由器的内部端口受到保护
FWaaSv2防火墙概念由防火墙组替代,一个防火墙包括两项策略:入口策略和出口策略。防火墙组不再应用于路由器级,而是路由器端口。FWaaSv2的配置仅提供命令行工具,不支持Dashboard图形界面
虚拟网络类型:提供者网络与自服务网络提供者网络
提供者网络为虚拟机实例提供二层连接,可支持DHCP和元数据服务。这类网络连接或映射到数据中心的现有二层网络,通常使用VLAN标签(802.1q) 来识别和隔离
默认情况下只有OpenStack管理员才能创建和更改提供者网络。若要允许普通用户也能具备这种权限,只需在Neutron服务的policy.json文件中设置以下参数:
“create_network:provider:physical netwokrule:admin_or_network_owner”,“update_network:provider:physical network,*rule:admin_or_network owner"",
提供者网络只能负责实例的二层连接,缺乏对路由和浮动IP地址的功能支持。提供者网络将三层操作交由物理网络设施负责。
提供者网络默认由管理员创建,实际上,就是与物理网络有直接映射关系的虚拟网络。要使用物理网络直接连接虚拟机实例,必须在OpenStack中将物理网络定义为提供者网络。这种网络可以在多个项目之间共享。虽然可以创建VXL AN或GRE类型的提供者网络,但是只有Flat或VLAN类型的网络拓扑才对提供者网络具有实际意义。提供者网络和物理网络的某个网段直接映射,因此需要预先在物理网络中做好相应的配置。物理网络的每个网段最多只能实现一个提供者网络
自服务网络的主要目的是让非特权的普通项目自行管理网络,无须管理员介入。这类网络完全是虚拟的。需要通过虚拟路由器与提供者网络和像Internet这样的外部网络通信。自服务网络也对实例提供DHCP服务和元数据服务
绝大多数情况下,自服务网络使用像VXLAN或GRE这样的Overlay协议,因此这些协议要比使用VLAN标记的二层网络分段支持更多的网络,而且VLAN通常还要求物理网络设施的额外配置
IPV4自服务网络通过虚拟路由器上的源NAT与提供者网络进行交互进行通信(内部) ,浮动IP地址则通过虚拟路由器上的目的NAT让来自提供者网络的用户访问虚拟机实例(外部)
网络服务使用L3代理实现路由器,L3代理至少要部署在一个网络节点上。自服务网络必须有一个L3代理。不过,一个L3代理或网络节点的过载或故障就能影响一大批自服务网络和使用它们的实例。实际部署需要提供高可用功能来增加冗余,提高自服务网络的性能
用户可以为项目中的连接创建项目网络,也就是自服务网络。默认情况下自服务网络被完全隔离并且不会和其他项目共享。OpenStack网络支持的网络隔离和覆盖技术包括Flat、VLAN、GRE和VXLAN等
一个典型自服务网络包括三层路由服务、DHCP服务、不能提供LBaas和FWaas这样高级服务虽然自服务网络可以选择Local, Flat, VL AN, VXL AN或GRE等类型,但是Flat和VLAN类型的自服务网络本质上对应于-个实际的物理网段,因此真正有意义的是VXLAN或GRE类型,因为这类Overlay网络本身不依赖于具体的物理网络,只要物理网络能够提供IP多播支持即可
这种虚拟网络中包括自服务网络(作为内部网络)和提供者网络(作为外部网络),也可以使用这两种网络为虚拟机实例提供网络连接。
的性能
用户可以为项目中的连接创建项目网络,也就是自服务网络。默认情况下自服务网络被完全隔离并且不会和其他项目共享。OpenStack网络支持的网络隔离和覆盖技术包括Flat、VLAN、GRE和VXLAN等
一个典型自服务网络包括三层路由服务、DHCP服务、不能提供LBaas和FWaas这样高级服务虽然自服务网络可以选择Local, Flat, VL AN, VXL AN或GRE等类型,但是Flat和VLAN类型的自服务网络本质上对应于-个实际的物理网段,因此真正有意义的是VXLAN或GRE类型,因为这类Overlay网络本身不依赖于具体的物理网络,只要物理网络能够提供IP多播支持即可
这种虚拟网络中包括自服务网络(作为内部网络)和提供者网络(作为外部网络),也可以使用这两种网络为虚拟机实例提供网络连接。