第九部分 网络服务 neutron 概述
一、neutron 架构
OpenStack 的网络服务 neutron 是整个 OpenStack 中最复杂的一个部分,它的基本架构是一个中心服务(neutron-server)外加各种 plugins 和 agents,使用不同的 network provider(网络提供者,如 Linux Bridge、OpenvSwitch(ovs)等)来实现各种网络架构,在这之上为实例提供网络、子网、端口和防火墙等网络资源。
下图是 neutron 的基本架构
可见,neutron 采用分布式架构,由多个组件(子服务)共同对外提供网络服务。
neutron server
对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。
下图是 neutron server 的结构图
neutron server 包括两部分
- 提供 API 服务;2. 调用 Plugins。
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 Plugin 的抽象功能集合,Neutron Core 通过该 API 调用相应的 Core Plugin。
Extension Plugin API
定义了 Service Plugin 的抽象功能集合,Neutron Core 通过该 API 调用相应的 Service Plugin。
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。
plugin
处理 neutron server 发来的请求,维护 OpenStack 逻辑网络的状态,并调用 Agent 处理请求,实现 “提供什么网络(what)” 的功能。
plugin 按照功能分为两类: core plugin 和 service plugin。
core plugin:维护 neutron 的 netowrk, subnet 和 port 相关资源的信息,与 core plugin 对应的 agent 包括 linux bridge, OVS 等;
service plugin:提供 dhcp、routing, firewall, load balance 等服务,也有相应的 agent。
agent
处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能,实现 “怎么提供网络(how)” 的功能。
network provider
提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 等。
Queue
Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 消息队列通信和调用。
Database
存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等。
二、neutron 的工作原理
下一节要在 neutron 中使用 linux bridge 这一种 network provider 来提供网络服务,那么,它是怎样实现的呢?
根据上面 neutron server 的分层模型,要想使用这种 network provider,需要安装两个东西:linux bridge core plugin 和 linux bridge agent。
linux bridge core plugin:与 neutron server 一起运行,实现了 core plugin API。负责维护数据库信息,通知 linux bridge agent 实现具体的网络功能。
linux bridge agent:接收来自 plugin 的请求,通过配置主机上的 linux bridge 实现 neutron 网络功能。通常位于计算节点或者网络节点。
同样道理,如果使用的 network provider 是 open vSwitch,那么只需要安装 open vswitch plugin 和 open vswitch agent 就行了。
可见,plugin,agent 和 network provider 是配套使用的,比如上面的 network provider 是 linux bridge,那么就得使用 linux bridge 的 plugin 和 agent;如果 network provider 换成了 OVS 或者物理交换机,plugin 和 agent 也得替换。
这就造成一个问题:所有 network provider 的 plugin 都要编写一套非常类似的数据库访问代码。
为了解决这个问题,neutron 实现了一个叫ML2(Modular Layer 2)plugin,对 plugin 的功能进行抽象和封装。
有了 ML2 plugin,各种 network provider 无需开发自己的 plugin,只需要针对 ML2 开发相应的 driver 就可以了。
三、ML2(Modular Layer 2)plugin
Moduler Layer 2(ML2)是 Neutron 在 Havana 版本(H 版本)实现的一个 core plugin,用于替代原有的 linux bridge plugin 和 open vswitch plugin,并一直沿用至今。
ML2 提供了一个框架,允许在 OpenStack 网络中同时使用多种 Layer 2 网络技术,不同的节点可以使用不同的网络实现机制。
采用 ML2 plugin 后,可以在不同节点上分别部署 linux bridge agent, open vswitch agent, hyper-v agent 以及其他第三方 agent。
ML2 对二层网络进行抽象和建模,引入了 type driver 和 mechansim driver。这两类 driver 解耦了 Neutron 所支持的网络类型(type)与访问这些网络类型的机制(mechanism),其结果就是使得 ML2 具有非常好的弹性,易于扩展,能够灵活支持多种 type 和 mechanism。
type driver
Neutron 支持的每一种网络类型都有一个对应的 ML2 type driver。 type driver 负责维护网络类型的状态,执行验证,创建网络等。
ML2 支持的网络类型包括 local, flat, vlan, vxlan 和 gre。
Mechansim Driver
Neutron 支持的每一种网络机制都有一个对应的 ML2 mechansim driver。 mechanism driver 负责获取由 type driver 维护的网络状态。
mechanism driver 有三种类型:
Agent-based:包括 linux bridge, open vswitch 等。
Controller-based:包括 OpenDaylight, VMWare NSX 等。
基于物理交换机:包括 Cisco Nexus, Arista, Mellanox 等。
比如要创建一个 type driver 为 vlan,mechansim driver 为 linux bridge 的 network vlan100,那么:
vlan type driver 会确保将 vlan100 的信息保存到 neutron 数据库中,包括 network 的名称,vlan ID 等;linux bridge mechanism driver 会确保节点上的 linux brige agent 在物理网卡上创建 ID 为 100 的 vlan 设备和 bridge 设备,并将两者进行桥接。
linux bridge 和 open vswitch 的 ML2 mechanism driver 的作用是配置各节点上的虚拟交换机。
四、service plugin/agent
Service Plugin 及其 Agent 提供更丰富的扩展功能,包括 dhcp、路由,load balance,firewall 等
DHCP
dhcp agent 通过 dnsmasq 为实例提供 dhcp 服务。
Routing
l3 agent 可以为 project(租户)创建 router,提供 neutron subnet 之间的路由服务。路由功能默认通过 IPtables 实现。
Firewall
l3 agent 可以在 router 上配置防火墙策略,提供网络安全防护。
Security Group
另一个与安全相关的功能是 Security Group,也是通过 IPtables 实现。
Firewall 与 Security Group 的区别在于:
Firewall 安全策略位于 router,保护的是某个 project 的所有 network。
Security Group 安全策略位于实例,保护的是单个实例。
Load Balance
neutron 默认通过 HAProxy 为 project 中的多个 instance 提供 load balance 服务。
五、neutron 管理的网络资源
neutron 可以创建、删除和修改下面几种网络资源
network
network 是一个隔离的二层广播域。neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE。
subnet
subnet 是一个 IPv4 或者 IPv6 地址段。实例的 IP 地址从 subnet 中分配。每个 subnet 需要定义 IP 地址的范围和掩码。
port
port 可以看做虚拟交换机上的一个端口。port 上定义了 MAC 地址和 IP 地址,当实例的虚拟网卡连接到端口时,port 会把 ip 地址和 mac 地址分配给虚拟网卡。
在 OpenStack 中,一个项目(租户)可以有多个 network,一个 network 可以有多个 subnet,一个 subnet 可以有多个 port,一个 port 属于一个实例,一个实例可以连接多个 port(多网卡)。
六、neutron 和 nova 的交互
网络服务 neutron 和计算服务 nova 是通过 neutron-metadata-agent 来交互的。
实例在启动时需要访问 nova-metadata-api 服务获取 metadata 和 userdata,这些 data 是该实例的定制化信息,比如 hostname,ip,public key 等。
通过 neutron-metadata-agent,能够通过网络访问到 nova-metadata-api 服务,从而获得实例的定制化信息。该 agent 让实例能够通过 dhcp-agent 或者 l3-agent 与 nova-metadata-api 通信。
七、neutron 的物理部署
方案 1:控制节点 + 计算节点
控制节点
部署的服务包括:neutron server, core plugin 的 agent 和 service plugin 的 agent。
计算节点
部署 core plugin 的 agent,负责提供二层网络功能。
- core plugin 和 service plugin 已经集成到 neutron server,不需要运行独立的 plugin 服务。
- 控制节点和计算节点都需要部署 core plugin 的 agent,因为通过该 agent 控制节点与计算节点才能建立二层连接。
- 可以部署多个控制节点和计算节点。
方案 2:控制节点 + 网络节点 + 计算节点
在这个部署方案中,OpenStack 由控制节点,网络节点和计算节点组成。
控制节点
部署 neutron server 服务。
网络节点
部署的服务包括:core plugin 的 agent 和 service plugin 的 agent。
计算节点
部署 core plugin 的 agent,负责提供二层网络功能。
这个方案的要点是将所有的 agent 从控制节点分离出来,部署到独立的网络节点上。
控制节点只负责通过 neutron server 响应 API 请求。
由独立的网络节点实现数据的交换,路由以及 load balance 等高级网络服务。
可以通过增加网络节点承担更大的负载。
可以部署多个控制节点、网络节点和计算节点。
该方案特别适合规模较大的 OpenStack 环境。
八、网络服务 neutron 小结
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 等。
https://blog.51cto.com/11694088/2460201