网络服务NEUTRON概述

一、NEUTRON架构

OpenStack的网络服务neutron是整个OpenStack中最复杂的一个部分,它的基本架构是一个中心服务(neutron-server)外加各种plugins和agents,使用不同的network provider(网络提供者,如Linux Bridge、OpenvSwitch(ovs)等)来实现各种网络架构,在这之上为实例提供网络、子网、端口和防火墙等网络资源。

下图是neutron的基本架构

可见,neutron采用分布式架构,由多个组件(子服务)共同对外提供网络服务。

1. NEUTRON SERVER

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

下图是neutron server的结构图

neutron server包括两部分

1.提供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,负责提供二层网络功能

1. CORE PLUGIN和SERVICE PLUGIN已经集成到NEUTRON SERVER,不需要运行独立的PLUGIN服务。

2. 控制节点和计算节点都需要部署CORE PLUGIN 的AGENT,因为通过该AGENT控制节点与计算节点才能建立二层连接。

3. 可以部署多个控制节点和计算节点。

方案2:控制节点 + 网络节点 + 计算节点

在这个部署方案中,OpenStack 由控制节点,网络节点和计算节点组成。

控制节点

部署neutron server服务。

网络节点

部署的服务包括:core plugin的agent和service plugin的agent。

计算节点

部署core plugin的agent,负责提供二层网络功能。

这个方案的要点是将所有的agent从控制节点分离出来,部署到独立的网络节点上。

1.控制节点只负责通过NEUTRON SERVER响应API请求。

2.由独立的网络节点实现数据的交换,路由以及LOAD BALANCE等高级网络服务。

3.可以通过增加网络节点承担更大的负载。

4.可以部署多个控制节点、网络节点和计算节点。

该方案特别适合规模较大的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等。

OpenStack Train版-7.neutron网络服务概述的更多相关文章

  1. OpenStack Train版-11.安装horizon服务(计算节点)

    OpenStack仪表板Dashboard服务的项目名称是Horizon,它所需的唯一服务是身份服务keystone,开发语言是python的web框架Django. 安装Train版本的Horizo ...

  2. OpenStack Train版-10.安装neutron网络服务(网络节点:可选)

    可选:安装neutron网络服务节点(neutron01网络节点192.168.0.30)网络配置按照官网文档的租户自助网络 配置系统参数 echo 'net.ipv4.ip_forward = 1' ...

  3. OpenStack Train版-9.安装neutron网络服务(计算节点)

    在计算节点安装neutron网络服务(computel01计算节点192.168.0.20)安装组件 yum install openstack-neutron-linuxbridge ebtable ...

  4. OpenStack Train版-8.安装neutron网络服务(控制节点)

    安装neutron网络服务(controller控制节点192.168.0.10) 创建neutron数据库 mysql -uroot CREATE DATABASE neutron; GRANT A ...

  5. CentOS7安装OpenStack(Rocky版)-06.安装Neutron网络服务(控制节点)

    上一章介绍了独立的nova计算节点的安装方法,本章分享openstack的网络服务neutron的安装配制方法 ------------------- 完美的分割线 ----------------- ...

  6. openstack第四章:neutron— 网络服务

    第四篇neutron— 网络服务 一.neutron 介绍:   Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是 ...

  7. openstack (5)-- 部署 Neutron 网络服务

    Neutron 概念: 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要创建.修改和删除网络,网络的连 ...

  8. OpenStack核心组件-neutron网络服务

    1. neutron 介绍 1.1 Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能 ...

  9. openstack核心组件——neutron网络服务(8)

    云计算openstack核心组件——neutron网络服务(8)   一.neutron 介绍:   Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云 ...

随机推荐

  1. i春秋新春战疫—web—简单的招聘系统

    打开靶机 打开后看到登录界面 利用万能密码,以admin身份登录 登录成功后看到如下界面 在Blank Page界面内发现注入点,抓包 保存在sqlmap目录下test.txt文件夹,使用sqlmap ...

  2. Rancher On K3s 高可用架构部署

    Rancher 推荐部署架构 k3s 模式 RKE 和 k8s 模式 备注: 我对 RKE 的理解就是 Ansible + kubeadm 的打包,首先 rke 需要到每一个节点都可以免密 ssh , ...

  3. testng学习笔记-- beforesuit和aftersuit

    一.定义 测试套件,主要关注执行顺序 套件:suit可以包含多个class 二.代码标签 三.运行结果

  4. setTimeout、Promise、Async/Await 的区别

    事件循环中分为宏任务队列和微任务队列其中setTimeout的回调函数放到宏任务队列里,等到执行栈清空以后执行promise.then里的回调函数会放到相应宏任务的微任务队列里,等宏任务里面的同步代码 ...

  5. WPF和MVVM的结合使用方法,不可错过

    Model:存储数据模型(类) 也在此业务逻辑,主要负责类文件的存储. ViewModel:连接View和Model,借助Command来负责界面的跳转和调用Model中方法来操作Model的数据. ...

  6. C#Process调用外部程序

    前言 使用C#调用外部程序,一种是通过Process类,一种是通过命令行,本文主要说一下使用C#中的Process类调用外部程序的方式. 过程: 1. 创建Process对象 2. 配置启动选项(输入 ...

  7. Java 集合框架()

    一概述 二Collection接口 List Set Queue 三Map接口 HashMap LinkedHashMap TreeMap 四其它集合类 Vector Stack HashTable ...

  8. MySQL常见优化

    MySQL常见优化 1.操作符优化 1.1<> 操作符(不等于) 1.2LIKE优化 1.3in,not in,exists与not exists 1.3.1in和exists 2.whe ...

  9. Java8新特性_四大内置核心函数式接口

    Consumner : 消费型接口 Supplier :供给型接口 Function:函数式接口 Predicate:断言型接口 其他接口: 四大内置核心函数式接口: Consumner : 消费型接 ...

  10. Kubernetes之持久化存储

    转载自 https://blog.csdn.net/dkfajsldfsdfsd/article/details/81319735 ConfigMap.Secret.emptyDir.hostPath ...