使用 OVS 学习操作实施 OpenStack 安全组防火墙驱动程序

作者:Rodolfo Alonso Hernández

推动因素

截至目前,OpenStack 的 Neutron 项目上仅实施了一个防火墙,即基于 iptables 的防火墙。 该防火墙能够较好地满足使用 Linux Bridge 的用户的网络需求。 但是,Linux Bridge 既不是 Neutron 上的唯一网络选项,也不是使用最多的一个。 使用最多的是 Open vSwitch (OVS),该网络选项目前为多达 46% 的 OpenStack 公共部署提供支持。 虽然 iptables 适用于使用 Linux Bridge 的部署,但是它对于 OVS 却并非最佳选择。 连接 iptables 与 Open vSwitch 需要进行大量的编码和网络,但实际上 OVS 本身已经提供了可用于部署内部规则的方法(使用 OpenFlow 协议)。我们应使用此方法,并且我们也已经这样做了。

我在此处展示的防火墙完全基于 OVS 规则,它是一个纯 OVS 模型,不依赖于底层平台的功能。 它用来与 Neutron 代理通信的公共 API 与现有的 Linux Bridge 防火墙实施相同,可支持已经使用 OVS 的用户直接完成过渡。

技术手段

2015 年 OpenStack 温哥华峰会上发布了一款新型防火墙。 虽然尚未实施,但是它利用了 Linux 的“conntrack (连接跟踪)”模块。 该模块可通过跟踪连接状态来实施“状态防火墙”。 据预计,使用连接跟踪可最大程度地降低用户空间处理流量包的需求,从而实现更高的性能。

另一方面,我们实施的防火墙基于“学习操作”。这些学习操作可跟踪一个方向的流量,然后设置一个新的流,允许流量向相反的方向流动。 该实施完全基于 OpenFlow 标准。

当添加工作组规则时,将会有一个“手动” OpenFlow 规则添加到 OVS 配置中。 例如,该新规则允许从特定端口进入 TCP 流量。 当某个数据包与该规则匹配时,“手动”规则便会允许该数据包传送至目的地。 但是,这只是新防火墙的一个主要方面,另一方面,该防火墙还会提供一个“自动”规则,将相反的流量回复发送回来源。

最初,我们担心由于使用学习操作会迫使所有数据包在用户空间处理,所以可能会影响性能。 但是,本篇博客下文提供的基准测试结果显示,该设计的性能高于 iptables。 更重要的是,该防火墙允许使用 OVS 的 DPDK,这要比没有防火墙的非 DPDK OVS 的性能高出 4 倍。

工作原理概述

流量分为内部虚拟机间的流量(东西流量)和内部机器和外部主机之间的流量(南北流量)。 安全组规则仅适用于由 Neutron 控制并包含一个或多个安全组的机器,这表示,只有计算主机内的虚拟机才会受到这些规则的影响。

在一个计算节点中,OVS 内会创建多个桥接来处理主机流量。 连接虚拟机的桥接即为“集成桥接”。 防火墙仅管理该桥接的规则。

数据包到达集成桥接后,该桥接上使用的防火墙规则将立即开始处理流量。 下文介绍了使用的 OVS 处理表和规则。

处理表详细介绍

下图展示了所使用的各种处理表和规则以及优先级(从最高至最低)。

表 0: 输入表

The Input Table

第一个表,即输入表(表= 0)是默认表,流入桥内的流量全部由该表处理。 ARP 包使用最高的权限处理。 VLAN 内的每个机器必须在其他 VLAN 机器中填充其地址。

其余流量(无 ARP 包)均发送至选择表。

表 1: 选择表

The Selection Table

选择表负责监控每个包是否来自或发送至虚拟机。 添加的规则可确保只有与存储的端口 MAC 地址、VLAN 标签和端口编号匹配的数据包才能够通过。 如果数据包为 DHCP 包,那么 IP 必须是 0.0.0.0。

不符合该规则的流量将丢掉。

表 2: 导入表

The Ingress Table

导入表有三种规则:

  • 当输出规则匹配时,将自动创建“学习”输入规则。 如前文所述,创建该输出规则还会激活反向输入规则的创建。
  • 服务输入规则始终由防火墙添加,以允许某些 ICMP 流量和 DHCP 消息。
  • 手动输入规则由安全组中的用户添加。

如果流量与这些规则不符,将会被丢掉。

表 3: 导出表

The Egress Table

导出表有三种规则(以及第四个):

  • 当输出规则匹配时,将自动创建“学习”输入规则。 如前文所述,创建该输出规则还会激活反向输入规则的创建。
  • 服务输出规则始终由防火墙添加,以允许某些 ICMP 流量和 DHCP 消息。
  • 手动输出规则由安全组中的用户添加。

如果流量与之前的规则不符,将发送至导出内部流量。

Egress external traffic

该表负责处理南北流量。 如果流量需要离开集成桥接,便会到达该表。 做最后的检查:如果该表的任何流量发送至虚拟机,那么该流量将被丢掉。 只有外部导入流量才必须由该表管理。 未被这些规则过滤的流量将使用“常规”操作发送。 数据包由 OVS 使用内置的 ARP 表发送。

性能指标评测

我们在采用两个英特尔® 至强™ 处理器 E5-2680 v2 (2.80GHz,40 线程)和 64 GB 内存的服务器上对该新防火墙进行了基准测试。

我们为该测试创建了唯一控制器/计算节点,并在同一台主机上运行了虚拟机。 虚拟机的配置为 Ubuntu* Desktop Edition 14.04 LTS (3.16.0-30 内核)、4GB 内存和 8 个核心。

为了在主机和虚拟机上注入流量,使用了 Ixia XG12 机箱和 10 Gbps 端口。

无 DPDK,无防火墙

数据包大小 \ 用户1101001,00010,000
6493.1486.6698.5896.41101.38
128121.08122.29118.03121.78118.17
256144.93197.10197.08197.09197.08
512366.59421.05420.78420.88420.83
1024870.21870.43814.53815.06759.62
12801,122.00984.451,053.851,053.03929.00
15181,125.551,264.421,264.041,195.111,056.33

无 DPDK,iptables

数据包大小 \ 用户1101001,00010,000
6493.1891.3884.7592.8384.20
128101.0688.3394.2987.5190.16
256197.10144.75197.10196.90144.86
512421.05312.54312.78366.90312.78
1024815.28594.25704.98760.15649.80
1280984.56707.33984.57983.91818.45
15181,125.80709.091,125.431,125.55875.31

无 DPDK,学习操作

数据包大小 \ 用户1101001,00010,000
6492.45101.9576.3693.24100.92
128131.15122.0099.48108.4091.91
256196.94197.09197.10197.06197.13
512366.59421.05421.04421.02366.95
1024759.61870.34815.04870.21704.87
1280983.69986.76929.21984.55929.15
1518931.071,264.45986.171,264.32931.54

无 DPDK,学习操作

数据包大小 \ 用户1101001,00010,000
641,641.76923.58952.421,010.71910.67
1282,761.311,575.621,578.311,708.011,543.14
2565,257.293,188.033,186.353,350.853,074.94
5128,946.625,304.725,393.625,616.175,410.86
10249,807.889,699.399,634.919,806.728,810.03
12809,845.589,845.579,845.559,845.539,845.50
15189,869.439,869.379,869.389,869.399,869.34

DPDK,学习操作

数据包大小 \ 用户1101001,00010,000
64559.01359.72311.09252.73134.53
1281,022.93713.27540.54540.28151.89
2562,028.901,353.601,066.66996.52163.30
5123,742.672,537.262,043.941,898.97169.93
10246,619.184,817.833,829.523,712.83248.32
12808,012.435,858.604,709.674,534.04475.08
15188,946.966,786.095,472.005,296.74551.59

注:这些表中展示的所有数据均为初步结果。 性能测试中使用的软件和工作负载可能仅在英特尔® 微处理器上进行了性能优化。 诸如 SYSmark* 和 MobileMark* 等测试均系基于特定计算机系统、硬件、软件、操作系统及功能。 上述任何要素的变动都有可能导致测试结果的变化。 请参考其它信息及性能测试(包括结合其它产品使用时的运行性能)以对目标产品进行全面评估。 如欲了解更多信息,请访问 http://www.intel.com/performance

如欲了解有关性能及性能指标评测结果的更完整信息,请访问 www.intel.com/benchmarks

如何部署

如要使该防火墙与 OVS DPDK 兼容,您需要下载 networking-ovs-dpdk 项目:

git clone https://github.com/stackforge/networking-ovs-dpdk.git

您还可将该项目安装为 PIP 包:

pip install networking-ovs-dpdk

如要启用防火墙,您可以将以下代码添加到您的 devstack/local.conf 文件中:

[[post-config|/etc/neutron/plugins/ml2/ml2_conf.ini]]
[securitygroup]
#firewall_driver = neutron.agent.linux.iptables_firewall
firewall_driver = networking_ovs_dpdk.agent.ovs_dpdk_firewall.OVSFirewallDriver

 

Para obter informações mais completas sobre otimizações do compilador, consulte nosso aviso de otimização.