1、网络架构
openvswitch与linux-bridge相比较而言,openvswitch支持的网络类型更加丰富,应用也比较广泛,因此图示直接使用OVS。linux-bridge支持local, flat, vlan和vxlan 四种network type,目前不支持gre,相比较而言openvswitch支持GRE网络;
管理网络:用户管理所有节点的网络;
内部网络:计算节点与网络节点通过内部网络通信,tenant network(租户网络,租户自己创建管理,网络之间可以重合);
外部网络:内部的VM与外部物理网络间使用外部网络通信使用,一般由管理员创建并赋予相应属性,称为public network(或者叫provider network?);
2、neutron模块
主要包含以下几个部分:
(1)neutron-server:可以理解为类似于nova-api那样的一个组件,一个专门用来接收neutron REST API调用的服务器。负责将不同的rest api发送到不同的neutron-plugin。接受和路由API请求到网络plug-in。一般部署在控制节点(controller),负责通过Neutron-server响应的API请求;
(2)neutron-plugin:可以理解为不同网络功能(例如创建端口(ports)、网络(Networks)、子网(Subnets)等)实现的入口,现在大部分都是软件定义网络,各个厂商都开发自己的plugin(插件)。neutron-plugin接收netron-server发过来的rest api,向neutron database完成一些信息注册(比如用户要建端口)。然后将具体要执行的业务操作和参数通知给自身对应的neutron-agent。Openstack的plug-ins一般支持Open vSwitch、Linux Bridging、思科物理/虚拟交换机等等。一般Core plugin 和service plugin已经集成到neutron-server中,不需要运行独立的plugin服务。
(3)agent:常见的agent包括L3、DHCP、plug-in agent;一般网络节点需要部署Core Plugin的代理和service Plugin的代理,计算节点也需要部署Core Plugin的代理,通过该代理才能建立二层连接。
(4)messaging queue:在neutron-server和agents之间路由信息,同时作为一个数据库存储plug-ins的网络状态;
模块之间调用关系:(此段为摘抄内容)
(5)Client(客户端)是指使用Neutron服务的应用程序,可以是命令行工具(脚本)、Horizon和Nova计算服务等;
(6)Neutron-database(数据库,默认使用MariaDB)用于存放OpenStack的网络状态信息,包括网络、子网、端口、路由器等;
举列说明:创建一个Vlan 10虚拟网络的流程。
- 1、Neutron-server 收到创建网络(Network) 的请求,通过消息队列(RabbitMQ)通知已注册的Linux Bridge插件,这里架设网络提供者为Linux Bridge。
- 2、该插件将要创建的网络信息(如名称、ID值、VLANID等)保存到数据库中并通过消息队列通知运行在各个节点上的代理。
- 3、代理收到信息后会在节点上物理网卡上创建Vlan设备(比如物理接口的子接口 Eth1.10),并创建一个网桥(比如brgXXX)来桥接网络设备。
2.2 agent
agent | 描述 |
L3 agent (neutron-l3-agent) | 提供L3/NAT转发,使租户内的虚机实例被外部网络访问 |
dhcp agent (neutron-dhcp-agent) | 为租户网络提供dhcp功能 |
metering agent (neutron-metering-agent) | 提供L3数据流量的监控、计算 |
metadata agent | 是提供一个机制给用户,可以设定每一个instance 的参数 |
OpenvSwitch agent | 使用Open vSwitch来实现VLAN, GRE,VxLAN来实现网络的隔离,还包括了网络流量的转发控制 |
plug-in agent ( neutron-*-agent ) | 在每个hypervisor上运行以执行本地vSwitch配置。 这个插件是否运行取决于使用的插件,有些插件不需要代理。 |