OpenStack组件之Neutron

1.Linux网络虚拟化基础

物理网络与虚拟化网络

  • OpenStack组件之Neutron_第1张图片

OpenStack组件之Neutron_第2张图片

Neutron最为核心的工作是对二层物理网络的抽象与管理,物理服务器虚拟化后,虚拟机的网络功能由虚拟网卡(vNIC)提供,物理交换机(Switch)也被虚拟化为虚拟交换机(vSwitch),各个vNIC连接在vSwitch的端口上,最后这些vSwitch通过物理服务器的物理网卡访问外部的物理网络。

Neutron为整个 Openstack环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和VPN等。 Neutron提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能

1.1-Linux网络虚拟化实现技术

①网卡虚拟化

  • TAP
  • TUN
  • VETH

交换机虚拟化

  • Linux Bridge
  • Open vSwitch

网络隔离

  • Network
  • Namespac

1.2-Linux网卡虚拟化-TAP/TUN/VETH

OpenStack组件之Neutron_第3张图片

  • TAP设备:模拟一个二层的网络设备,可以接收和发送二层网包
  • TUN设备:模拟一个三层的网络设备,可以接收和发送三层网包
  • VETH:虚拟Ethernet接口,通常以api的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之间的通道。
  • TAP/TUN提供了一台主机内用户空间的数据传输机制,它虚拟了一套网络接口,这套接口和物理的接口无任何区别,可以配置 IP,可以路由流量,不同的是,它的流量只在主机内流通。
  • TAP/TUN 有些许的不同,TUN 只操作三层的 IP 包,而 TAP 操作二层的以太网帧。
  •  Veth-Pair 是成对出现的一种虚拟网络设备,一端连接着协议栈,一端连接着彼此,数据从一端出,从另一端进。它的这个特性常常用来连接不同的虚拟网络组件,构建大规模的虚拟网络拓扑,比如连接 Linux Bridge、OVS、LXC 容器等。一个很常见的案例就是它被用于 OpenStack Neutron,构建非常复杂的网络形态。

1.3-交换机虚拟化——Linux bridge

  • Linux bridge:工作于二层的网络设备,功能类似于物理交换机
  • Bridge可以帮绑定Linux上的其他网络设备,并将这些设备虚拟化为端口。
  • 当一个设备被绑定到bridge时,就相当于物理交换机端口插入了一条连接着终端的网线。
  • 使用brctl命令配置Linux bridge:
  • Brctl addbr BRIDGE
  • Brctl addif BRIDGE DEVICE

OpenStack组件之Neutron_第4张图片

1.4-Linux交换机虚拟化-Open vSwitch

  •  Open vswitch是产品级的虚拟交换机
  • Linux bridge更适用于小规模,主机内部间通信场景。
  • Open vswitch更适合于大规模,多主机通信场景。

OpenStack组件之Neutron_第5张图片

1.5-Linux网络隔离-network namespace

  • Network namespace能创建多个隔离的网络空间,他们有独自的网络配置信息,例如网络设备、路由表、iptables等。
  • 不同网络空间中的虚拟机运行的时候仿佛自己就在独立的网络中。
  • Network Namespace通常与VRF(Virtual Routing Forwarding虚拟路由和转发)一起工作,VRF是一种IP技术,允许路由表的多个实例同时在同一路由器上共存。
  • 使用VETH可以连接两个不同网络命名空间,使用Bridge可以连接多个不同网络命名空间。

2.Neutron概念

  • neutron负责管理虚拟网络组件,专注于为OpenStack提供网络即服务(NaaS);为OpenStack计算提供网络连通和寻址服务。

2.1neutron功能

 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的网络包,后者是进出虚拟路由器的网络包。

  • 为了便于操作管理,neutron对网络进行了抽象,有如下基本管理对象:
  • Network
  • Subnet
  • Port
  • Router
  • Floating IP

OpenStack组件之Neutron_第6张图片

1.network

  • 网络;一个隔离的、虚拟二层广播域,可以看成一个虚拟交换机或者逻辑交换机。neutron支持多种类型的network,包括local、flat、VLAN、VXLAN和GRE
  • Local:与其他网络和节点隔离。Local 网络中的虚拟机只能与位于同一节点上同一网络的 虚拟机通信,Local 网络主要用于单机测试。 本地网络,只能在同一台compute主机上的VM通信
  • Flat:无VLAN tagging的网络。Flat网络中虚拟机能与位于同一网络的虚拟机通信,并可 以跨多个节点。VM可以在多台compute主机间通讯,不同子网可以通过路由
  • VLAN:802.1q tagging网络。VLAN是一个二层的广播域,同一VLAN中的 虚拟机可以通 信,不同VLAN只能通过Router通信。 VLAN网络可跨节点,是应用最广泛的网络类型。
  •  VXLAN:基于隧道技术的overlay网络。 VXLAN网络通过唯一的segmentation ID(也叫 VNI)与其他 VXLAN网络区分。 VXLAN中数据包会通过VNI封装成UDP包进行传输。因 为二层的包通过封装在三层传输,能够克服 VLAN 和物理网络基础设施的限制。
  •  GRE:与VXLAN类似的一种overlay网络,主要区别在于使用IP包而非UDP进行封装。
  •  生产环境中,一般使用的是VLAN、VXLAN或GRE网络。

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访问外界。

OpenStack组件之Neutron_第7张图片

7.physical network

物理网络;在物理网络环境中连接openstack不同节点的网络,每个物理网络可以支持neutron中的一个或多个虚拟网络。

openstack必须通过physical network才能和真实物理网络通信。

8.provider network

由openstack管理员创建的,直接对应于数据中心现有物理网络的一个网段。Provider network通常使用VLAN或者Flat模式,可以在多个租户之间共享。

9.self- service network

自助网络服务\租户网络\项目网络;由openstack租户创建的,完全虚拟的,只在本网络内部连通,不能再租户之间共享。

  • 通常使用VXLAN或者GRE模式,可以通过virtual router的SNAT与provider network通信。
  • 不同Self-service Network中的网段可以相同,类似于物理环境中不同公司的内部网络。 Self-service Network如果需要和外部物理网络通信,需要通过Router,类似于物理环境中公司上网需要通过路由器或防火墙。

OpenStack组件之Neutron_第8张图片

10.external network

外部网络\公共网络;一种特殊的provider network,连接的物理网络与数据中心或internal相通,网络中的port可以访问外网。

  • 一般将租户的virtual router连接到该网络,并创建floating IP绑定该虚拟机,实现虚拟机与外网通信。
  • External Network类似于物理环境中直接使用公网IP网段,不同的是,OpenStack中External Network对应的物理网络不一 定能直连Internet,有可能只是数据中心的一个内部私有网络。

OpenStack组件之Neutron_第9张图片

11.security group

安全组;安全组是作用在neutron port上的一组策略,规定了虚拟机入口和出口流量的规则;安全组基于Linux IPtables(包过滤防火墙)实现。安全组默认拒绝所有流量,只有添加了放行规则的流量才能通过。每个openstack项目中都有一个default默认安全组,默认包含如下规则:拒绝所有入口流量,允许所有出口流量。安全组由L2 agent实现,如neutron-openvswitch-agent会将安全组规则转换成IPTables规则,一般发生在计算节点;

3.neutron架构图

OpenStack组件之Neutron_第10张图片

OpenStack组件之Neutron_第11张图片

OpenStack组件之Neutron_第12张图片

  • Neutron Server

对外提供 Openstack网络APl,接收请求,并调用 Plugin处理请求。

  • Plugin

处理 Neutron Server发来的请求,维护 Openstack逻辑网络的状态,并调用 Agent处理请求。

  • Agent

处理 Plugin的请求,负责在 network provider上真正实现各种网络功能。

  • Network provider

提供网络服务的虚拟或物理网络设备,例如 Linux Bridge, Open vswitch或者其他支持Neutron的物理交换机。

  • Queue

Neutron Server、 Plugin和 Agent之间通过 Messaging Queue通信和调用。

  • Database

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-server部署在控制节点上,每个计算节点上都需要部署L2 Agent,L3 Agent一般运行在网络节点上,DHCP agent一般也部署在网络节点上;控制节点和网络节点是可以合并的, Neutron-server安装在哪里,哪里就是控制节点,L3 Agent安装在哪里,哪里就是网络节点,计算节点上一般只部署 L2 Agent

4.neutron架构说明

neutron的架构是基于插件的,不同的插件提供不同的网络服务,主要包含以下网络组件:

  • Neutron server

对外提供网络API,并调用Plugi处理请求

Core api:基础组件组成,对外提供管理网络、子网和端口的RESTful API;service api:高级组件组成,对外提供管理路由、防火墙、VPN等资源的RESTful API.

  • Plugin

处理neutron server的请求,维护网络状态,并调用Agent处理请求

  • Agent

处理Plugin的请求,调用底层虚拟或物理网络设备实现各种网络功能

plugin、agent和network provider是配套使用的,如果network provider是Linux bridge,那么就得使用Linux bridge的plugin和agent,如果network provider换成了OVS或物理交换机,plugin和agent也得换

5.neutron组件

 5.1-neutron server

Neutron server=APIs+Plugins,通过这种方式,可以自由对接不同网络后端能力。

  • API定义各类网络服务
  • Plugin实现各类网络服务

5.2-core Plugin

主要指ML2 plugin(Modular Layer 2),是一个开放性框架,在一个plugin下,可以集成各个厂家、各种后端技术支持的Layer 2网络服务。

  • 通过Type Driver和Mechanism Driver调用不同的底层网络技术,实现二层互通
  • ML2 Plugin的Drivers主要分为以下两种:

  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,大大减少了要编写和维护的代码。

OpenStack组件之Neutron_第13张图片

5.3-service plugin

用于实现高阶网络服务,例如路由、负载均衡、防火墙和VPN服务等。L3 Service Plugin主要提供路由,浮动IP服务等。

5.4-Agent

向虚拟机提供二层和三层的网络连接、完成虚拟网络和物理网络之间的转换、提供扩展服务等

OpenStack组件之Neutron_第14张图片

一套OpenStack中,只能使用一种交换模式。ML2 Plugin可以兼容底层两种交换模式,比如用一个ML2 Plugin统一管理一个Linux  bridge,一个OVS

拓扑

OpenStack组件之Neutron_第15张图片

一般compute节点有两个网卡,一个管理口,一个业务口,network节点有三个网卡,一个管理口,一个内部通讯网络(做路由的),一个与外部网络连接的网卡;

br-int用来提供内部网络通信;br-ex提供内外网互通;br-tun是隧道网络,只用于VXLAN(跨数据中心的的大二层技术【将二层网络封装在三层中进行传输】) GRE网络

不同租户的网络可以重叠吗?可以

同一个物理交换机是如何隔离不同租户的?namespace命名空间,一个租户一个namespace

veth是成对出现的(相当于一条网线连两台电脑),tap设备只有一个(相当于一张网卡)

flat网络

OpenStack组件之Neutron_第16张图片

VM1和VM2通信,走它内部br-int的桥就通了;VM1访问VM3,通过br-eth1(虚拟交换机)连接物理网络就能通

OpenStack组件之Neutron_第17张图片

小结:

neutron架构:

OpenStack组件之Neutron_第18张图片

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实现通信

你可能感兴趣的:(OpenStack,云计算,架构,openstack)