管理自定义以太类型的 API 支持¶
一些运营商需要允许/拒绝使用自身非 IP 流量(例如用于集群应用程序)的应用程序的自定义以太类型。安全组 API 仅处理指定 IP 协议内的行为。对于防火墙参考实现(OVS 防火墙),任何非 IPv4 和 IPv6 的流量都将受到默认拒绝策略的影响。这意味着 OpenStack 客户没有选项可以使用 OpenStack 来允许使用单独的以太类型(如 InfiniBand 和 FCoE)的协议。
本规范建议向安全组 API 添加指定自定义以太类型的标准安全组行为(允许、拒绝)的功能,旨在在 OVS 和 OVN 防火墙中实现这些控制。
问题描述¶
OpenStack 中安全组的首次实现基于 iptables,它仅控制 IPv4 或 IPv6 以太类型的流量。由于后续的所有实现都是基于该初始实现的理念构建的,因此对于具有其他以太类型的流量,Neutron 安全组的行为一直未定义。
对于 OVS 防火墙驱动程序,具有非 IP 以太类型的流量的行为是落入默认拒绝操作。运营商可以添加一个流来允许此流量,但该流将在 neutron-openvswitch-agent 重新启动的下一次被删除。这是一个运行时要求,因此部署时间工具(如 TripleO 或 Ansible)无法处理它。
用例:客户在 OpenStack 中运行使用 InfiniBand(以太类型 0x4008)的应用程序,并且 OpenStack 从 iptables_hybrid 转换为 OVS 防火墙。InfiniBand 流量被 OVS 防火墙阻止,目前 Neutron API 没有方法可以解除阻止。
提议的变更¶
最佳解决方案是一个新的 API 扩展,使 Neutron 能够了解允许的以太类型并相应地调整 OVS 防火墙规则。当前的安全性组 API 接受一个以太类型选项,该选项仅限于 IPv4 和 IPv6;实施本规范将取消该限制,以便可以通过十六进制数字指定其他安全类型。如果指定了非 IP 以太类型,则将忽略以下参数:协议、端口范围最大值、端口范围最小值、远程组 ID、远程 IP 前缀。
对于具有自定义以太类型的流量的控制将是全有或全无,给定的协议将完全阻止或完全允许。
SecurityGroupRule 对象的“ethertype”字段是 EtherTypeEnumField 类型,这是一个 VALID_ETHERTYPES 常量的枚举;这需要更改为介于 0x0000 和 0xffff 之间的两位十六进制数字。安全性组规则数据库中以太类型的字段是 String(40),因此不需要修改。建议使用验证器 validate_ethertype,它还将取代安全组扩展中 sg_supported_ethertypes 的使用。
参考资料¶
本规范的 RFE 错误报告:https://bugs.launchpad.net/neutron/+bug/1832758