Neutron自身并不提供任何网络功能,它只是一个架子。Neutron的网络功能大部分是Plugin提供的,除了DHCP和L3-agent等的某些部分功能。
Neutron将网络按照三层交换机的概念分为:
Network:相当于交换机根据vlan创建的一个三层接口;
Subnet:相当于交换机创建了一个三层接口地址;
Port:相当于交换机的一个物理端口,但是这个端口有一个MAC地址;
Neutron 有什么?
L2
在 L2 层,由虚拟交换机来实现。虚拟交换机有下列这些种:
Linux 网桥,基于 Linux 内核的网桥。需要说明的是,网桥就是交换机,是交换机的一种常用的书面叫法。
OpenvSwitch(OVS):OVS 有两种模式,一种是当普通的虚拟交换机来使用,另一个是和 OpenFlow 控制器协作当作 OpenFlow 控制器来使用。
一些基于 Overlay 技术的 SDN 实现,如 Dove 等。
一些非开源的商业交换机。
目前,Neutron 已经实现的 L2 层插件如下图 6 所示,linuxbridge 实现了 Linux 网桥,openvswitch 插件实现了 openvswitch 网桥,bigswitch 插件实现了一种 SDN 控制器,ml2 是一种通用的插件(这些 L2 层的插件主要分写数据库的 plugin 部分和运行在计算节点的 agent 部分,plugin 写数据库的字段有差异但不多,所以代码重复,ml2 可以理解为一个公共的 plugin)。且每种插件基本上实现了 FLAT, VLAN, VXLAN, GRE 等四种拓扑。
Neutron 中 L2 层插件
Neutron 中 L2 层插件
L3
Neutron 的 L3 层由基于 namespace ipv4 forward + iptables 实现。
需要启动 l3-agent 进程,如果需要 DHCP 服务的话也需要启动 dhcp-agent 进程。
L4-L7
LBaaS 基于 Haproxy 实现;FWaaS 基于 iptables 实现;VPNaaS 有基于 IPSec 的 VPN 实现,也有基于 MPLS 的 VPN 实现,也有基于 SSL 的 VPN 实现。
截止到笔者写此文为止,目前只有 LBaaS 能用,其他的 FWaaS, VPNaaS 和 NATaaS 仍在开发中。但对于 FWaaS 有 Security Group 功能可用,区别在于前者由于作为独立服务也能部署在网络节点上提供边缘防火墙特性,后者依然能够在计算节点上使用 iptables 规则控制从虚机出去的,进来虚机的,虚机之间的流量。
这样neutron的CLI或者horizon的页面配置了网络功能后,就会调用neutron的API,然后如果plugin是OVS的话,就会生成对应的比如OVS的命令下发到底层虚拟网络设备,底层就提供了相应的网络功能(如果支持的话,有的不支持也不会报错,比如H版对IPV6转发的支持)。这些网络功能包括二层vlan或vxlan等租户之间的隔离、floating IP之间的三层转发和NAT转换、防火墙、VPN和负载均衡等,看官网还提供有IDS和DC互联,但是还没有驱动力去调研。
如果你能配置出如下图3中网络且都能访问外网和相互隔离,说明你已经对底层有了一定了解:
neutron配置后的一种网络拓扑实例
上面图中,如果用OVS作为plugin的话需要注意,里面的一个虚拟路由器并不是直接对应创建一个OVS,很有迷惑性,在底层其仅仅是在OVS上创建了一个vlan,配置了一个三层接口地址,并且添加了一个和这个网段相连的虚拟port。有兴趣的可以配置成功后,到底层详细dump下。