物理网络与虚拟化网络
Neutron最为核心的工作是对二层物理网络的抽象与管理,物理服务器虚拟化后,虚拟机的网络功能由虚拟网卡(vNIC)提供,物理交换机(Switch)也被虚拟化为虚拟交换机(vSwitch),各个vNIC连接在vSwitch的端口上,最后这些vSwitch通过物理服务器的物理网卡访问外部的物理网络。
Neutron为整个 Openstack环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和VPN等。 Neutron提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能
①网卡虚拟化
②交换机虚拟化
③网络隔离
1. 二层交换
Neutron支持多种虚拟交换机,一般使用Linux Bridge和Open vSwitch创建传统的VLAN网络,以及基于隧道技术的Overlay网络,如VxLAN和GRE(Linux Bridge 目前只支持 VxLAN)。
2. 三层路由
Neutron从Juno版开始正式加入的DVR(Distributed Virtual Router)服务,它将原本集中在网络节点的部分服务分散到了计算节点上。可以通过namespace中使用ip route或者iptables实现路由或NAT,也可以通过openflow给OpenvSwitch下发流表来实现。
3. 负载均衡
LBaaS 支持多种负载均衡产品和方案,不同的实现以 Plugin 的形式集成到 Neutron,通过HAProxy来实现。
4. 防火墙
Neutron有两种方式来保障instance和网络的安全性,分别是安全组以及防火墙功能,均可以通过iptables来实现,前者是限制进出instance的网络包,后者是进出虚拟路由器的网络包。
1.network
2.subnet
子网;一个IPV4或者IPV6地址段。虚拟机的IP从subnet中分配。每个subnet需要定义IP地址的范围和掩码。subnet必须与network关联,subnet可选属性:DNS,网关IP,静态路由
3.port
端口;逻辑网络交换机上的虚拟交换端口,虚拟机通过port附着到network上,当instance上的虚拟网卡VIF(virtual interface)绑定到port时,port可以分配IP地址和Mac地址。
4.router
路由器;连接租户内同一network或不同network之间的子网,以及连接内外网。
5.fixed IP
固定IP;分配到每个端口上的IP,类似于物理环境中配置到网卡上的IP。
6.floating IP
浮动IP;floating IP是从external network创建的一种特殊port,可以将floating IP绑定到任意network中的port上,底层会做NAT转发,将发送给floating IP的流量转发到该port对应的fixed IP上。外界可以通过floating IP访问虚拟机,虚拟机也可以通过floating IP访问外界。
7.physical network
物理网络;在物理网络环境中连接openstack不同节点的网络,每个物理网络可以支持neutron中的一个或多个虚拟网络。
openstack必须通过physical network才能和真实物理网络通信。
8.provider network
由openstack管理员创建的,直接对应于数据中心现有物理网络的一个网段。Provider network通常使用VLAN或者Flat模式,可以在多个租户之间共享。
9.self- service network
自助网络服务\租户网络\项目网络;由openstack租户创建的,完全虚拟的,只在本网络内部连通,不能再租户之间共享。
10.external network
外部网络\公共网络;一种特殊的provider network,连接的物理网络与数据中心或internal相通,网络中的port可以访问外网。
11.security group
安全组;安全组是作用在neutron port上的一组策略,规定了虚拟机入口和出口流量的规则;安全组基于Linux IPtables(包过滤防火墙)实现。安全组默认拒绝所有流量,只有添加了放行规则的流量才能通过。每个openstack项目中都有一个default默认安全组,默认包含如下规则:拒绝所有入口流量,允许所有出口流量。安全组由L2 agent实现,如neutron-openvswitch-agent会将安全组规则转换成IPTables规则,一般发生在计算节点;
对外提供 Openstack网络APl,接收请求,并调用 Plugin处理请求。
处理 Neutron Server发来的请求,维护 Openstack逻辑网络的状态,并调用 Agent处理请求。
处理 Plugin的请求,负责在 network provider上真正实现各种网络功能。
提供网络服务的虚拟或物理网络设备,例如 Linux Bridge, Open vswitch或者其他支持Neutron的物理交换机。
Neutron Server、 Plugin和 Agent之间通过 Messaging Queue通信和调用。
Database 用来存放 Openstack的网络状态信息,包括 Network、 Subnet、Port、 Router等。
Neutron 架构原则
统一API
核心部分最小化
可插入式的开放架构
可扩展
Message Queue
Neutron-server使用Message Queue与其他Neutron agents进行交换消息,但是这个 Message Queue不会用于Neutron-server与其他OpenStack组件(如nova )进行交换 消息。
L2 Agent
负责连接端口(ports)和设备,使他们处于共享的广播域(broadcast domain)。通常运 行在Hypervisor上。利用OVS、Linux的Bridge或者其他厂商的技术给每个project提供独立的网络服务。
L3 Agent (L3 Agent安装在哪里,哪里就是网络节点)
负责连接tenant网络到数据中心,或连接到Internet。在真实的部署环境中,一般都需要 多个L3 Agent同时运行。
DHCP agent
用于自动配置虚拟机网络。
Advanced Service
提供LB、Firewall和VPN等服务
neutron的架构是基于插件的,不同的插件提供不同的网络服务,主要包含以下网络组件:
对外提供网络API,并调用Plugi处理请求
Core api:基础组件组成,对外提供管理网络、子网和端口的RESTful API;service api:高级组件组成,对外提供管理路由、防火墙、VPN等资源的RESTful API.
处理neutron server的请求,维护网络状态,并调用Agent处理请求
处理Plugin的请求,调用底层虚拟或物理网络设备实现各种网络功能
plugin、agent和network provider是配套使用的,如果network provider是Linux bridge,那么就得使用Linux bridge的plugin和agent,如果network provider换成了OVS或物理交换机,plugin和agent也得换
5.1-neutron server
Neutron server=APIs+Plugins,通过这种方式,可以自由对接不同网络后端能力。
5.2-core Plugin
主要指ML2 plugin(Modular Layer 2),是一个开放性框架,在一个plugin下,可以集成各个厂家、各种后端技术支持的Layer 2网络服务。
Type Driver:定义了网络类型,每种网络类型对应一个Type Driver。
Mechanism Driver:对接各种二层网络技术和物理交换设备,如OVS,Linux Bridge等。Mechanism Driver从Type Driver获取相关的底层网络信息,确保对应 的底层技术能够根据这些信息正确配置二层网络。
ML2 不但支持异构部署方案,同时能够与现有的Agent无缝集成:以前用的Agent不需要变,只需要将Neutron Server上的传统Core Plugin替换为ML2。有了ML2,要支持新的Network Provider就变得简单多了:无需从头开发Core Plugin,只需要开发相应的Mechanism Driver,大大减少了要编写和维护的代码。
5.3-service plugin
用于实现高阶网络服务,例如路由、负载均衡、防火墙和VPN服务等。L3 Service Plugin主要提供路由,浮动IP服务等。
5.4-Agent
向虚拟机提供二层和三层的网络连接、完成虚拟网络和物理网络之间的转换、提供扩展服务等
一套OpenStack中,只能使用一种交换模式。ML2 Plugin可以兼容底层两种交换模式,比如用一个ML2 Plugin统一管理一个Linux bridge,一个OVS
拓扑
一般compute节点有两个网卡,一个管理口,一个业务口,network节点有三个网卡,一个管理口,一个内部通讯网络(做路由的),一个与外部网络连接的网卡;
br-int用来提供内部网络通信;br-ex提供内外网互通;br-tun是隧道网络,只用于VXLAN(跨数据中心的的大二层技术【将二层网络封装在三层中进行传输】) GRE网络
不同租户的网络可以重叠吗?可以
同一个物理交换机是如何隔离不同租户的?namespace命名空间,一个租户一个namespace
veth是成对出现的(相当于一条网线连两台电脑),tap设备只有一个(相当于一张网卡)
flat网络
VM1和VM2通信,走它内部br-int的桥就通了;VM1访问VM3,通过br-eth1(虚拟交换机)连接物理网络就能通
小结:
neutron架构:
Neutron server接收api请求
Plugin/agent实现请求
database保存neutron网络状态
Message queue实现组件之间通信
instance在启动之前需要访问nova-metadata-api服务获取metadata和userdata,这些data是该instance的定制化信息,比如hostname、ip、public key等。但instance启动时并没有ip,如何能够通过网络访问到nova- metadata-api服务呢?答案就是 neutron- metadata- agent。该 agent让 Instance能够通过dhcp- agent或者
L3- agent与nova- metadata-api通信。
L3基础概念
L3即vrouter,主要功能是连接租户内同一network或不同network之间的子网,以及连接内外网(FIP/SNAT)。前者是数据中心内部虚机之前的通信,成为东西向流量。后者是虚机与外部通信,称为南北向流量。
vrouter分为两种模式:集中式,分布式。集中式指的是vrouter实例化在network节点,compute节点不实例化vrouter,当两个不同子网的vm通信时,流量需要在network节点上的vrouter做一次三层转发,走两次隧道。分布式指的是vruoter实例化在所有compute节点,三层转发的功能在本节点的vrouter实例中完成。从而只需要走一次隧道。
集中式路由
1.之和网络节点有关系,router所在节点即为网络节点,只有在网络节点上部署L3-agent,实现3层通信的功能。
2.所有3层流量必须经过网络节点
分布式路由
浮动IP
NAT:将私有地址和公有地址进行一个转换,可以解决IP地址不足的问题,还能避免来自外网的攻击,隐藏和保护内部虚拟机。
浮动IP:利用NAT原理给虚拟机配置一个外网IP,虚拟机访问外网时将原地址转换成该外网IP,外网访问该外网IP时转换成虚拟机IP实现通信