Skip to content

openstack_neutron

遇见王斌 edited this page Oct 14, 2017 · 9 revisions

neutron

原理图

在网络这一块,OpenStack 经历了由 nova-network(早期)到 Quantum(F 版本)再到 Neutron(H 版本)的演进过程。

Screenshot

在Neutron里面,有几个基本概念,其实跟物理网络一样.

网络 Network:三层网络, 可以包含多个子网. 子网 Subnet:三层网络, 每个子网有自己的网络号(CIDR). 接口 Port:虚拟网络中的接口, 类比物理网络设备上的网线接口. 路由器 Router: 类比物理网络中的路由器,用于不同三层网络之前通信.

neutron 包含组件及功能介绍:

  • neutron-server :对外提供 rest api,接收请求 并将请求分发到不同的 neutron-plugin 上。
  • neutron-plugin :处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络的状态, 并调用 Agent 处理请求。每个厂商基于 Openstack 开发了模拟自己硬件的软件,这个软件就是 plugin。 在早期,每个厂商开发各自的 plugin,功能也是各自实现,有大量的代码是重复的;另外,不同的厂商有不同的开发标准,导致程序的兼容性很差。针对这种情况 neutron-plugin 被分为了两部分:Core-plugin 和 Service-plugin 。
    • Core-plugin : Neutron 中即为 ML2(Modular Layer 2),负责管理 L2 的网络连接。ML2 中主要包括 network、subnet、port 三类核心资源,对三类资源进行操作的 REST API 被 neutron-server 看作 Core API,由 Neutron 原生支持。其中:
      • Network : 代表一个隔离的二层网段,是为创建他的租户而保留的一个广播域。Subnet 和 Port 始终被分配给某个特定的 network。 Network 的类型包括 Flat、Vlan、VxLan、Gre 等等
      • Subnet:代表一个 IPv4/v6 的 CIDR 地址池,以及与其相关的配置,如网关、DNS 等等,该 Subnet 中的 VM 实例随后会自动继承该配置。Subnet 必须关联一个 Network。
      • Port:代表虚拟交换机上的一个虚拟交换端口。VM 的网卡连接 VIF 连接 Port 后,就会拥有 MAC 地址和 IP 地址,Port 的 IP 地址是从 Subnet 地址池中分配的。
    • Service-plugin : 即为除 core-plugin 以外其它的 plugin,包括 l3 router、firewall、loadbalancer、VPN、metering 等等,主要实现 L3-L7 的网络服务。这些 plugin 要操作的资源比较丰富,对这些资源进行操作的 REST API 被 neutron-server 看作 Extension API,需要厂家自行进行扩展。
  • neutron-agent : 处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。和 plugin 是一一对应的关系,

Neutron,其实和其他的 OpenStack 组件差不多,他都是一个中间层,自己基本不干具体的活,通过插件的机制,调用第三方的组件来完成相关的功能。

继续深入

Linux bridge 和 OVS(openvswitch)

OpenStack 的网络里,可以有 4 种的网络流量

  • 管理网络:消息队列和数据库访问的网络
  • API 网络:外部调用 API
  • External:连接外网(provider 网络)
  • Guest:虚拟机互相通讯网络 (Tenant 网络)

4 种网络里,和 Neutron 有关的就是 External 和 Guest,即 Provider 网络和 Tenant 网络

对于 Provider 网络和 Tenant 网络,技术实现基本都是一样的,区别仅仅在于

  • Provider 网络,是有管理员创建,常用的网络是:Flat 和 Vlan。vxlan 基本是没有使用的可能性。默认为【flat】
  • Tenant 网络,是由用户自己创建,可以设置的选项就是 vlan,vxlan 和 flat,local 主要是测试使用。默认为【vxlan】

linuxbridge 和 OVS,可以干的活是虚拟不同的网络,目前这两种 Driver,都可以实现下面几种网络功能。

  • local
  • flat ---------------------------需要物理网卡支持
  • vlan ---------------------------需要物理网卡支持
  • vxlan【self-service 网络】------不需要物理网卡支持
  • GRE (linux bridge 不支持)

那么这 5 种网络里,local 网络,主要是用于测试,GRE 网络,目前社区已经基本处于维护,大家基本也可以不考虑。所以大家只需要了解其中 3 种就可以。

Linux bridge 时第二张网卡为什么无需设置 IP

上面说到 openstack 有 4 种网络里

  • 第一张网卡用于管理网络和 API 网络,主要是给 openstack 服务使用的
  • 第二张网卡用于 External 外部网络,是给虚拟机使用

Guest 也就是 Tenant 网络使用 vxlan 模式,无需物理网卡支持

部署好 openstack 后,创建 provider 网络的时候,即创建了一个网桥,第二张网卡用于会加入到创建的网桥中,所以无需配置 IP

可以参考 KVM 桥接网络部分