前置:

Neutron 是 OpenStack 中的 SDN 网络组件,管理云内的物理和虚拟网络。

Netutron 对其管理对象的抽象建模:

  1. Network 虚拟的、隔离的二层广播域(简单理解为虚拟交换机,一定是二层)
    1. Subnet 子网,真的就是子网网段(所以是子网是三层),包含在 Network 中(一对多),在此之上配置 DNS、网关、路由等
    2. Port 虚拟交换端口,也是包含在 Network 中(虚拟交换机的端口),可以分配 IP 和 MAC
      1. 主要在交换机那侧,但还有外部网络的一侧。
  2. Router 路由器,连接 Network 内部各子网、连接外部网络
  3. 外部网络

概念

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

  1. 安全组是作用在 neutron port 上的一组策略,规定了虚拟机入口和出口流量的规则。
  2. 安全组基于 Linux iptables 实现
  3. 安全组默认拒绝所有流量只有添加了放行规则的流量才允许通过(即所有规则都是放行规则)
  4. 每个 OpenStack 项目中都有一个 default 默认安全组,默认包含如下规则:拒绝所有入口流量、允许所有出口流量

Neutron 架构

一句话:Neutron 主要包含 Neutron serverPluginAgent 等组件。Neutron server 对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求;Plugin 处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络的状态,并调用 Agent 处理请求;Agent 处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能;此外还有 database,用来存放 OpenStack 的网络状态信息,包括 Network、Subnet、Port、Router 等。

  1. controller-node 控制节点 Neutron Server
    1. Core
  2. compute-node 计算节点
    1. L2 Agent
  3. network-node 网络节点:各种 agent
    1. L2 Agent、L3 Agent、DHCP Agent
  4. 其他
    1. 消息队列
    2. 数据库

计算节点?

这里的计算节点应该不是指 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 网络:

  1. 仅提供简单的网络互通,虚拟网络、路由、负载均衡等由物理设备提供
  2. 网络简单、高效,适合中小企业私有云网络场景

todo 看不动了,不知道仅用 Bridge 如何为跨主机的 VM 提供网卡,veth 么

Neutron 大型网络模型:Open vSwitch + VXLAN

提供多租户、大规模网络隔离能力,适合大规模私有云和公有云网络场景。

todo 看不动了,也需要太多的网络专业知识,留着吧。

neutron 命令行工具