OpenStack核心组件-neutron

一、neutron介绍:

1.1、neutron产生的背景

        传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备;而云环境下的网 络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要创建、修改和删除网络,网络 的连通性和隔离不已经太可能通过手工配置来保证了。 而软件定义网络SDN所具有的灵活性和自动化优势使其成为云时代网络管理的主流。在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。SDN 模式服务, 通过使用它,网络管理员和云计算操作员可以通过程序来动态定义虚拟网络设备。

二、neutron中的基本概念:

2.1、network(vSwitch)

network 是一个隔离的二层广播域。Neutron 支持多种类型的 network,有local,flat,VLAN,VxLAN 和 GRE。

2.1.1、local网络

local 网络与其他网络和节点隔离。local 网络中的 instance 只能与位于同一节点上同一网络的

instance 通信,local 网络主要用于单机测试。

2.1.2、flat(无vlan tagging的网络

flat网络中的instance能与位于同一网络的instance通信,并且可以跨多个节点。

2.1.3、vlan(带 tagging 的网络)

vlan 是一个二层的广播域,同一 vlan 中的instance可以通信,不同vlan只能通过router通信。vlan 网络可跨节点,是应用最广泛的网络类型。

2.1.4、VXLAN(大二层网络)

vxlan 是基于隧道技术的网络。vxlan 网络通过唯一的VNI(虚拟网络标识)与其他 vxlan 网络区分。vxlan 中数据包会通过 VNI 封装成 UDP 包进行传输。因为二层的包通过封装在三层传输,能够克服 vlan 和物理网络基础设施的限制。

2.1.5、GRE类型网络

gre 是与 vxlan 类似的一种网络。主要区别在于使用 IP 包而非 UDP 进行封装。不同 network 之间在二层上是隔离的。以 vlan 网络为例,network A 和 network B 会分配不同的 VLAN ID,这样就保证了 network A 中的广播包不会跑到 network B 中。当然,这里的隔离是指二层上的隔离,借助路由器不同。

network 是可能在三层上通信的。network 必须属于某个Project( Tenant 租户),Project 中可以创建多个 network。 network 与 Project 之间是 1 对多 关系。

2.2、subnet

2.2.1、subnet 的作用:

subnet 是一个 IPv4 或者 IPv6 地址段。instance的IP从subnet中分配。每个subnet需要定义 IP 地址的范围和掩码。(相当于DHCP服务器的作用)network 与 subnet 是 1 对多 关系。一个 subnet 只能属于某个 network;一个 network 可以有多个 subnet,这些 subnet 可以是不同的 IP 段,但不能重叠。

2.2.2、subnet 的使用:

(1)下面的配置是有效的:

        network A subnet A-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"}

        subnet A-b: 10.10.2.0/24 {"start": "10.10.2.1", "end": "10.10.2.50"}

(2)下面的配置则无效,因为 subnet 有重叠

        network A subnet A-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"}

        subnet A-b: 10.10.1.0/24 {"start": "10.10.1.51", "end": "10.10.1.100"}

判断依据:不是判断 IP 是否有重叠,而是 subnet 的 CIDR 重叠(都是 10.10.1.0/24)。

如果 subnet 在不同的 network 中,CIDR 和 IP 都是可以重叠的

        network A  subnet A-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"}

        network B  subnet B-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"}

这里大家不免会疑惑: 如果上面的 IP 地址是可以重叠的,那么就可能存在具有相同 IP 的两个

instance,这样会不会冲突? 简单的回答是:不会!

具体原因: 因为 Neutron 的 router 是通过 Linux network namespace 实现的。network

namespace 是一种网络的隔离机制。通过它,每个 router 有自己独立的路由表。上面的配置有

两种结果:

1. 如果两个 subnet 是通过同一个 router 路由,根据 router 的配置,只有指定的一个 subnet

可被路由。

2. 如果上面的两个 subnet 是通过不同 router 路由,因为 router 的路由表是独立的,所以两

个 subnet 都可以被路由。

2.3、port

2.3.1、port 的功能

port 可以看做虚拟交换机上的一个端口。port 上定义了 MAC 地址和 IP 地址,当 instance 的虚拟网卡 VIF(Virtual Interface) 绑定到 port 时,port 会将 MAC 和 IP 分配给 VIF。subnet 与 port 是 1 对多 关系。一个 port 必须属于某个 subnet;一个 subnet 可以有多个port。

2.3.2、Project,Network,Subnet,Port 和 VIF 之间关系
Project 1 : m Network 1 : m Subnet 1 : m Port 1 : 1 VIF m : 1 Instance
Neutron 功能
Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙
和 VPN 等。Neutron 提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用
来实现这些功能。
二层交换 Switching

Nova 的 Instance 是通过虚拟交换机连接到虚拟二层网络的。Neutron 支持多种虚拟交换机,包括 Linux 原生的 Linux Bridge 和 Open vSwitch。 Open vSwitch是一个开源的虚拟交换机,它支持标准的管理接口和协议。 利用 Linux Bridge 和 OVS,Neutron 除了可以创建传统的 VLAN 网络,还可以创建基于隧道 技术的 Overlay 网络,比如 VxLAN 和 GRE。Instance 可以配置不同网段的 IP,Neutron 的 router(虚拟路由器)实现 instance 跨网段通信。router 通过 IP forwarding,iptables 等技术来实现路由和 NAT。

三、neutron网络架构:

与 OpenStack 的其他服务的设计思路一样,Neutron 也是采用分布式架构,由多个组件共同对外提供网络服务。Neutron 由如下组件构成:

(1)Neutron Server

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

(2)Plugin

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

(3)Agent

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

(4)network provider

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

(5)Messageing Queue

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

(6)Database

        存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等。

四、组件之间的协同工作

4.1、组件之间的工作流程

以创建一个 VLAN100 的 network 为例,假设 network provider 是 linux bridge, 流程如下:

1、Neutron Server 接收到创建 network 的请求,通过 Message Queue(RabbitMQ)通知已注册的 Linux Bridge Plugin。

2、Plugin 将要创建的 network 的信息(例如名称、VLAN ID 等)保存到数据库中,并通过Message Queue 通知运行在各节点上的 Agent。

3、Agent 收到消息后会在节点上的物理网卡(比如 eth2)上创建 VLAN 设备(比如 eth2.100), 并创建 bridge 桥接 VLAN 设备。

4.2、组件的职责

1、plugin 解决的是 What 的问题,即网络要配置成什么样子?而至于如何配置 How 的工作则交由 agent 完成。

2、plugin,agent 和 network provider 是配套使用的,如上例中 network provider 是 linux bridge,那么就得使用 linux bridge 的 plungin 和 agent;如果 network provider 换成了OVS 或者物理交换机,plugin 和 agent 也得替换。

3、plugin 的一个主要的职责是在数据库中维护 Neutron 网络的状态信息,这就造成一个问题:所有 network provider 的 plugin 都要编写一套非常类似的数据库访问代码。为了解决这个问题,Neutron 在 Havana 版本实现了一个 ML2(Modular Layer 2)

4、plugin,对 plgin 的功能进行抽象和封装。有了 ML2 plugin,各种 network provider 无需开发自己的 plugin,只需要针对 ML2 开发相应的 driver 就可以了,工作量和难度都大大减少。

plugin 按照功能分为两类: core plugin 和 service plugin。core plugin 维护 Neutron 的 netowrk, subnet 和 port 相关资源的信息,与 core plugin 对应的 agent 包括 linux bridge,OVS 等; service plugin 提供 routing, firewall, load balance 等服务,也有相应的 agent。

五、组件详解

5.1、Neutron Server

5.1.1、Neutron Server 模型拆分

OpenStack核心组件-neutron_第1张图片

Core API:对外提供管理 network, subnet 和 port 的 RESTful API。

Extension API:对外提供管理 router, load balance, firewall 等资源的 RESTful API。

Commnon Service:认证和校验 API 请求。

Neutron Core:Neutron server 的核心处理程序,通过调用相应的 Plugin 处理请求。

Core Plugin API:定义了 Core Plgin 的抽象功能集合,Neutron Core 通过该 API 调用相应的

Core Plgin。

Extension Plugin API:定义了 Service Plgin 的抽象功能集合,Neutron Core 通过该 API 调

用相应的 Service Plgin。

Core Plugin:实现了 Core Plugin API,在数据库中维护 network, subnet 和 port 的状态,

并负责调用相应的 agent 在 network provider 上执行相关操作,比如创建 network。

Service Plugin:实现了 Extension Plugin API,在数据库中维护 router, load balance, security

group 等资源的状态,并负责调用相应的 agent 在 network provider 上执行相关操作,比如

创建 router。

Neutron Server 包括两部分:
1. 提供 API 服务。 2. 运行 Plugin。即 Neutron Server = API + Plugins

5.2、Moduler Layer 2

5.2.2、多种network provider出现的问题

1. 只能在OpenStack 中使用一种core plugin ,多种network provider 无法共存。只使用一个 core plugin 本身没有问题。但问题在于传统的 core plugin 与 core plugin agent 是一一对应的。也就是说,如果选择 open vswitch plugin, 所有节点上只能使用 open vswitch,而不能使用其他的 network provider。

2. 不同 plugin 之间存在大量重复代码,开发新的 plugin 工作量大所有传统的 core plugin 都需要编写大量重复和类似的数据库访问的代码,大大增加了 plugin 开发和维护的工作量。

5.2.3 、解决传统 core plugin 的问题

Moduler Layer 2:是 Neutron 在 Havana 版本实现的一个新的 core plugin,用于替代原有的 linux bridge plugin 和 open vswitch plugin。 作为新一代的 core plugin,提供了一个框架,允许在 OpenStack 网络中同时使用多种 Layer 2 网络技术,不同的节点可以使用不同的网络实现机制。

OpenStack核心组件-neutron_第2张图片

5.2.4、ML2 Core Plugin 的优势:

(1)可以在不同节点上分别部署 linux bridge agent, open vswitch agent或其他第三方 agent。

(2)ML2 不但支持异构部署方案,同时能够与现有的 agent 无缝集成:以前用的 agent 不需要变,只需要将 Neutron server 上的传统 core plugin 替换为 ML2。

(3)要支持新的 network provider 就变得简单多了:无需从头开发 core plugin,只需要开发相应的  driver,大大减少了要编写和维护的代码。

5.2.5、ML2 Core Plugin的架构

OpenStack核心组件-neutron_第3张图片

(1) Type Driver

Neutron 支持的每一种网络类型都有一个对应的 ML2 type driver。 type driver 负责维护网络类型的状态,执行验证,创建网络等。 ML2 支持的网络类型包括 local, flat, vlan, vxlan 和 gre。 

(2) Mechansim Driver

Neutron 支持的每一种网络机制都有一个对应的 ML2 mechansim driver。mechanism driver 负责获取由 type driver 维护的网络状态,确保在相应的网络设备(物理或虚拟)上正确实现这些状态。

mechanism driver 有三种类型:

1、Agent-based (linux bridge, open vswitch)

2、Controller-based(OpenDaylight, VMWare NSX)

3、基于物理交换机包括 Cisco Nexus, Arista, Mellanox 。

5.2.6、案例演示:

 type driver 为 vlan ,mechansim driver 为 linux bridge,操作是创建 network vlan100:

(1)vlan type driver 会确保将 vlan100 的信息保存到 Neutron 数据库中,包括 network 的名称,

vlan ID 等。

(3)linux bridge mechanism driver 会确保各节点上的 linux brige agent 在物理网卡上创建 ID

为 100 的 vlan 设备 和 brige 设备,并将两者进行桥接。

5.3、Service Plugin / Agent 详解:

Core Plugin/Agent 负责管理核心实体:net, subnet 和 port。而对于更高级的网络服务,则由 Service Plugin/Agent 管理。 Service Plugin 及其 Agent 提供更丰富的扩展功能,包括路由,load balance,firewall 等

OpenStack核心组件-neutron_第4张图片

5.3.1、DHCP

dhcp agent 通过 dnsmasq 为 instance 提供 dhcp 服务。

5.3.2、Routing

L3 Agent 可以为 project(租户)创建 router,提供 Neutron subnet 之间的路由服务。路由

功能默认通过 iptables 实现。

5.3.3、Firewall

L3 Agent 可以在 router 上配置防火墙策略,提供网络安全防护。另一个与安全相关的功能是

Security Group,也是通过 iptables 实现。

Firewall 与 Security Group 的区别在于:

Firewall 安全策略位于 router,保护的是某个 project 的所有 network。

Security Group 安全策略位于 instance,保护的是单个 instance。

5.3.4、Load Balance

Neutron 默认通过 HAProxy 为 project 中的多个 instance 提供 load balance 服务。

5.3.5、metadata-agent 

        instance 在启动时需要访问 nova-metadata-api 服务获取 metadata 和 userdata,这些 data 是该 instance 的定制化信息,比如 hostname, ip, public key 等。 但 instance 启动时并没有 ip,neutron-metadata-agent 该 agent 让 instance 能 够 通 过 dhcp-agent 或 者 L3-agent 与 nova-metadata-api 通信。

六、Neutron功能总结:

OpenStack核心组件-neutron_第5张图片

1、Neutron 通过 plugin 和 agent 提供的网络服务。

2、plugin 位于 Neutron server,包括 core plugin 和 service plugin。

3、agent 位于各个节点,负责实现网络服务。

4、core plugin 提供 L2 功能,ML2 是推荐的 plugin。

5、使用最广泛的 L2 agent 是 linux bridage 和 open vswitch。

6、service plugin 和 agent 提供扩展功能,包括 dhcp, routing, load balance, firewall, 等。

七、Neutron 架构深入探究

OpenStack核心组件-neutron_第6张图片

OpenStack核心组件-neutron_第7张图片

OpenStack核心组件-neutron_第8张图片

OpenStack核心组件-neutron_第9张图片

(1)Restful API:面向客户端提供API服务,包含Core API和Extension API。

(2)Common Service:通用服务,校验及认证来自上层的API请求。

(3)Neutron Core:负责调用Plugin处理来自上层的请求。

(4)Plugin API:提供调用Plugin的API。

(5)Core Plugin默认配置为ML2 Plugin,负责提供基础网络功能,并对网络进行管理及维护。  

(6)ML2 Plugin的Drivers主要有以下两种: Type Drivers:管理网络类型,维护网络状态,支持的网络类型包括Local、Flat、GRE、VLAN、 VxLAN、Geneve。 Mechabism Drivers:管理底层网络,实现底层网络隔离。

(7)Service Plugin负责提供三层及三层以上的网络服务,例如:路由、负载均衡、防火墙和VPN服务等。 L3 Service Plugin:提供路由及浮动IP服务。 Load Balance Plugin:提供负载均衡服务。 Firewall Plugin:提供防火墙服务。 VPN Plugin:提供VPN服务。

(8)Agent向虚拟机提供二层和三层的网络连接、完成虚拟网络和物理网络之间的转换、提供扩展服务等。 L2 Agent:负责连接端口和设备。 L3 Agent:负责连接Tenant网络到数据中心或Internet。 DHCP agent:用于自动配置虚拟机IP地址。 Metadata Agent:提供元数据服务。

八、Neutron的网络类型

OpenStack核心组件-neutron_第10张图片

Flat网络模型的特点:

(1)不支持虚拟局域网,属于扁平化网络模型。

(2)Linux Bridge直接绑定物理网卡并连接Flat网络中所有虚拟机。

(3)每个Flat网络独占一个物理网卡,且该物理网卡不能配置IP地址。

OpenStack核心组件-neutron_第11张图片

VLAN网络模型的特点:

(1)可实现多租户之间的网络隔离。

(2)同一VLAN网络中的虚拟机可以通信,不同VLAN网络中的虚拟机只能通过路由器来通信。

OpenStack核心组件-neutron_第12张图片

VxLAN网络模型的特点:

(1)VxLAN网络使用隧道技术。

(2)极大地扩充了二层网段数量,VxLAN使用24比特的VNI,可提供超过1600万个VxLAN网段。

(3)租户内部通信可以跨越任意IP网络,支持虚拟机任意迁移。

九、Neutron网络实现模型

OpenStack核心组件-neutron_第13张图片

OpenStack核心组件-neutron_第14张图片

9.1.Neutron架构中的网络设备:

br-ex:连接外部(external)网络的网桥。

br-int:集成网桥,所有 instance 的虚拟网卡和其他虚拟网络设备都将连接到该网桥。

br-tun:隧道(tunnel)网桥,基于隧道技术的 VxLAN 和 GRE 网络将使用该网桥进行通信。

tap interface:命名为 tapXX,连接虚拟机或者不同命名空间,例如连接dhcp(ns1)和br-int(root)。

linux bridge:命名为 qbrXXXX。

veth pair:命名为 qvbXXXX, qvoXXXX

OVS patch ports:命名为 int-br-ethX 和 phy-br-ethX(X 为 interface 的序号)。

ethX,物理 interface,X 为 interface 的序号。

9.2.Neutron中的管理网与数据网:

在OpenStack中,管理网络(Management Network)和数据网络(Data Network)有不同的作用和功能:

  1. 管理网络(Management Network):

    • 用途: 用于OpenStack各个组件之间的管理通信,比如API服务、数据库服务、消息队列服务等组件之间的通信。

    • 功能: 提供了用于管理和维护OpenStack基础架构的网络,包括实例的创建、删除、状态监控、日志收集以及服务间的通信等管理操作。

    • 安全性: 通常这个网络被设计为内部网络,只允许特定的管理流量通过,并且可能会通过防火墙或安全组进行限制。

  2. 数据网络(Data Network):

    • 用途: 用于实例(虚拟机、容器等)之间或实例与外部网络的通信。

    • 功能: 提供了用于实例之间通信或实例与外部网络通信的网络基础设施。

    • 安全性: 数据网络通常需要更广泛的网络访问权限,因为它涉及到实例之间的正常通信以及实例与外部网络的连接。

总结:管理网络通常使用 ethernet 以太网进行通信,数据网络由于在宿主机内部创建了多种虚拟交换机使用vxlan隧道的方式进行通信。

你可能感兴趣的:(openstack)