前言
openstack基于分布式架构以驱动方式加载服务,相应的增加了复杂度但是也便于理解了
分布式代表openstack的所有服务及服务组件都可以解耦安装,也就是每个服务或服务下组件都可以实现单独部署
驱动的方式好处就是以标准的api插件驱动接入任何厂商的服务,openstack提供标准插件,厂商只需要提供相应的驱动
neutron服务
提供虚拟化的openstack网络环境,包括二层交换、三层路由、四层以上应用
网络基础概念
- L2二层交换
- 工作在TCP\IP 数据链路层,解决的就是怎么物理的找到PC
- VLAN:限定广播域范围
- MAC:物理接口硬件地址
- ARP:通过同时二层MAC地址找到其他PC对应的IP(为了跨设备或者跨广播域通讯)
- 转发表:存储MAC和IP的对应关系
- L3三层路由
- 工作在TCP\IP 网络层,解决的就是我怎么跨物理设备的找到PC
- IP:物理接口逻辑地址
- NAT:解决公网地址短缺问题,实现内网地址上公网访问服务
- 路由表:存储我怎么去往目标路
- 四层以上应用
- 负载均衡:为应用实现负债分担,实现应用的集群
- DHCP:自动配置PC的IP相关信息
- 防火墙:实现数据包安全的检测进出站
- VPN:实现跨公网建立内网通讯
neutron架构
下图演示了一个neutron服务的生命周期
Neutron Server
- 对外提供openstack网络api,接收请求,并调用 Plugin 处理请求
Queue
- openstack部分服务采用队列技术来完成服务之间的通讯和调用
Plugin
- 处理server请求,维护网络状态,调用Agent 处理请求
Agent
- 处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能
network provider
- 提供网络服务的虚拟或物理网络设备
- 例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机
Database
- 存放openstack网络状态信息,ip、端口、路由等
neutron平面架构
- Neutron server下分Core Plugins(L2)和Service Plugins(L3)
- ML2 Plugins是逻辑的统一接口,引入了 type driver 和 mechansim driver,进而解耦
2.0 ML2的Plugins出现是为了解决传统Core Plugins带来的两个问题
2.1 无法同时使用多种 network provider
2.2 开发新的 core plugin 工作量大 - Service Plugins提供三层以上的更高级服务
- 所有Agent节点都是通过队列跟控制节点通讯
4.0 引入队列对于openstack来说的用处
4.1 解耦各个服务,便于服务的集中通讯和调用
4.2 提高性能,队列好处就是能提供异步调用,调用者无需等待
4.3 伸缩性,针对子程序出现性能问题随时可以加入新节点提供服务
open vswitch 和 linux bridge
linux bridge 内核实现的原生桥接功能
- 技术属于最早,技术比较成熟
- 结构简单,易于理解
- 较高的稳定性,转发性能强
- 支持的类型驱动有限,gre不支持
open vswitch(OVS)
基于软件的方式实现了硬件交换机的功能
- 可扩展性网络
- 很好的支持CDN网络
- Open vSwitch结构复杂
- 隧道协议的支持
- 缺乏较高的转发和稳定性
neutron物理部署
网卡流量类型
- 管理 网络:队列和数据库使用
- API 网络:向用户暴露 API 服务,Keystone的endpoints 配置地址
- VM 网络:虚拟机之间通讯使用
- 外部 网络:虚拟机需要访问公网使用
组合使用是需要根据情况而定,MV网络其实是可以不用(因为对我虚拟机而言我内部的网络就是外部网络),管理网络和API为一个网卡
部署节点
- 控制节点 + 计算节点
- 控制节点+网络节点+计算节点
2种架构的理解
- 网络节点主要是针对三层以上服务,所以针对这些需求大的选择部署三个节点
- 对于服务器虚拟化而言(服务器内部使用),L3服务可以不需要部署,直接依赖物理设备,通过外部网卡通讯
- 对于公有云环境,必然是全部要部署,才能满足租户自动化个性服务
问题1、控制节点需要neutron-Plugins-Agent 和MV网络
- 在服务器虚拟化场景是可以不需要
- Agent的所有计算节点属于同步创建删除(配置需要对应相关流量网卡),控制节点MV网络需要提供DHCP和L3功能的通讯
问题2、计算节点只会同步L2,不同步L3
- 计算节点只安装L2 Agent,L3功能都是基于控制节点实现(或者网络节点)