前置:
- 网络虚拟化
- Linux Bridgetodo
- Linux Network namespacetodo
- VxLAN 和 GREtodo
- 在三层网络(VxLAN 都使用四层 UDP 了)虚拟二层网络,以获得二层网络的更大灵活性和网络规模
- Open vSwitchtodo
Neutron 是 OpenStack 中的 SDN 网络组件,管理云内的物理和虚拟网络。
Netutron 对其管理对象的抽象建模:
Network虚拟的、隔离的二层广播域(简单理解为虚拟交换机,一定是二层)Subnet子网,真的就是子网网段(所以是子网是三层),包含在 Network 中(一对多),在此之上配置 DNS、网关、路由等Port虚拟交换端口,也是包含在 Network 中(虚拟交换机的端口),可以分配 IP 和 MAC- 主要在交换机那侧,但还有外部网络的一侧。
Router路由器,连接 Network 内部各子网、连接外部网络- 外部网络
概念
Network
或许除了 External Network,所有的受 Neturon 管理的 Network 都是这里所说的 Network。支持多种类型:Local、Flat、 VLAN、 VXLAN 和 GRE
Physical Network
在物理网络环境中连接 OpenStack 不同节点的网络,一个物理网络上可以创建多个 VLAN 类型的虚拟网络。
注意:Physical Network 看说明也未必真物理,重点还是连接各个控制节点上的网络。
Provider Network
Provideer Network 是作为 Provider,同时也是「被提供的」,OpenStack 管理员创建的,直接对应于数据中心现有物理网络的一个网段。
Provider Network 通常使用 VLAN 或者 Flat 模式,可以在多个租户之间共享。
Provider 的重点是映射另一个网络来提供服务:直接使用(本网络与其他网络相同)、连通其他网络(作为中间网络连通两个网络)。
Self-service Network
使用 OpenStack 时常常提到的 Network 其实是这种,Self-service Network,自助服务网络,也叫租户网络或项目网络。
由 OpenStack 租户创建,完全虚拟的,只在本网络内部连通,不能在租户间共享。
Self-service Network 通常使用 VXLAN 或者 GRE 模式,可以通过 Virtual Router 的 SNAT 与 Provider Network 通信。
External Network
External Network:外部网络,不受 Neutron 的外部网络,一般是另一个数据中心的网络或者 Internet。
一般将租户的 Virtual Router 连接到该网络,并创建 Floating IP 绑定虚拟机,实现虚拟机与外部网络的通信。
外部网络是一种特殊的虚拟网络,提供 VLAN 和 LOCAL 两种类型。
Floating IP
由 Router 提供,从 External Network 创建一个特殊 Port,可以将 Floating IP 绑定到任意 Network 中的 Port 上,底层会做 NAT 转发(DNAT),将发送给 Floating IP 的流量转发到该 Port 对应的 Fixed IP 上。
注意:此处的 Floating IP 没浮动,仅仅是相对 Fixed IP 而言的,仅仅是 NAT 转发,为内部网络分发外部网络 IP。
NOTE
外界可以通过 Floating IP 访问虚拟机,虚拟机也可以通过 Floating IP 访问外界。
Security Group
- 安全组是作用在 neutron port 上的一组策略,规定了虚拟机入口和出口流量的规则。
- 安全组基于 Linux iptables 实现
- 安全组默认拒绝所有流量,只有添加了放行规则的流量才允许通过(即所有规则都是放行规则)
- 每个 OpenStack 项目中都有一个
default默认安全组,默认包含如下规则:拒绝所有入口流量、允许所有出口流量
Neutron 架构
一句话:Neutron 主要包含 Neutron server、Plugin 和 Agent 等组件。Neutron server 对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求;Plugin 处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络的状态,并调用 Agent 处理请求;Agent 处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能;此外还有 database,用来存放 OpenStack 的网络状态信息,包括 Network、Subnet、Port、Router 等。
controller-node控制节点Neutron ServerCore
compute-node计算节点- L2 Agent
network-node网络节点:各种 agent- L2 Agent、L3 Agent、DHCP Agent
- 其他
- 消息队列
- 数据库
计算节点?
这里的计算节点应该不是指 Nova 的计算节点,那如何实现的提供和管理网络呢?
Neutron 架构简洁(看着),因为涉及为了插件化的 Plugin,保活核心也是插件。一个 Plugin 作为服务(Service),对外提供额外的 API(Server),对内注册并调用 Agent。
在插件化架构中需要注意 Neutron Core,它主要提供了核心功能 Network Subnet Port,Core 本身又主要是 ML2 Plugin,是一个开放性框架,在一个 plugin 下,可以集成各个厂家、各种后端技术支持的 Layer 2 网络服务。
其他扩展统称 Service Plugin,包括 Router、SecurityGroups 等等。

Neutron 小型网络模型:Linux Bridge + Flat/VLAN
Linux Bridge + Flat/VLAN 网络:
- 仅提供简单的网络互通,虚拟网络、路由、负载均衡等由物理设备提供
- 网络简单、高效,适合中小企业私有云网络场景
todo 看不动了,不知道仅用 Bridge 如何为跨主机的 VM 提供网卡,veth 么
Neutron 大型网络模型:Open vSwitch + VXLAN
提供多租户、大规模网络隔离能力,适合大规模私有云和公有云网络场景。
todo 看不动了,也需要太多的网络专业知识,留着吧。