manila 网络支持 neutron 的分层端口绑定

https://blueprints.launchpad.net/manila/+spec/manila-hpb-support

许多 manila 驱动程序能够支持 VLAN 网络,但该技术将云中的实际网络数量限制为 4096。其他叠加技术通常不受供应商驱动程序的支持。使用 HPB(分层端口绑定)可以通过使用多个(在物理网络的层次结构中)端口绑定来减少此障碍。例如,这允许在 VLAN 之上使用 VXLAN。通常,这对于底层存储是透明的,因为所有分层绑定都由 neutron 完成,最终后端存储只会看到一个 VLAN。

问题描述

当前设计(manila/network)中的 Manila 仅使用 neutron 来预留 IP 并从中检索专用的分段 ID(VLAN ID)。端口本身保持 inactive 状态。

此特性将涵盖实现的三个方面

  • manila 中对 neutron 端口绑定的支持

  • baremetal 配置的支持

  • 对多段网络 / HPB 支持的支持

用例

作为管理员,我希望创建一个带有 share-server 的 share-network,该 share-network 将自动配置到底层网络基础设施。这涵盖 neutron ML2 私有和提供者网络以及多段网络(如 HPB 网络)。

此特性仅对支持 DHSS 的驱动程序有用(DHSS=True)。否则,网络设置是一项管理员需要手动完成的工作。

提议的变更

manila 应该能够受益于 neutron 端口绑定扩展 [1]。此 API 扩展允许端口进行实际绑定,也包括交换机上的物理端口配置。

启用端口绑定支持

要启用端口绑定,需要在 neutron port create 请求中指定一个额外的字段:binding:host_id

host_id 通常在 neutron ML2 驱动程序中使用,用于标识可以执行绑定的代理。对于 manila 的情况,不一定需要代理,因此 host_id 应该设置为不由 OVS 代理管理的值。它可以设置为存储盒的名称(或 IP 地址)。

在绑定端口时,neutron 将遍历所有 ML2 mech 驱动程序。重要的是,其中一个驱动程序应该指示可以满足绑定。来自 Cisco [2] 的可用 mech 驱动程序和即将推出的 Arista mech 驱动程序已经支持这种情况下进行绑定。

此特性的一部分也是一个小的 neutron manila mech 驱动程序。它可以泛型地满足绑定。这还允许驱动程序执行部分绑定,并且在 gate 中也能在 neutron 中工作。

Baremetal vNIC 类型 / Ironic ML2 集成

Ironic 在将物理设备/服务器连接到 neutron 管理的网络时,遇到了一个非常类似的问题。此特性可以重用此处描述的 ML2 Ironic 接口:[3]

为了重用此特性,vnic_type 必须在端口创建期间设置为 baremetal。此外,需要在端口创建中添加一些网络信息,例如

"binding:profile": {
    "local_link_information": [{
        "switch_id": 00-12-ff-e1-0d,
        "port_id": dd013:12:33:4,
        "switch_info": {"switch_ip": 10.0.0.1}
    }]
}

这可以通过在 manila.conf 中进行静态配置来实现,每个后端一个

[manila_storage_drv1]
port_binding_profiles=phy_conn1,phy_conn2

[phy_conn1]
switch_id = 00-12-ff-e1-0d
port_id = dd013:12:33:4
switch_info = switch_ip=10.0.0.1

多段绑定

多段绑定与绑定单个段网络的方式不同。从 API 的角度来看,单个段如下所示

$ neutron net-show <>

provider:network_type: vlan
provider:physical_network: mynet1
provider:segmentation_id: 1029

多段网络如下所示

$ neutron net-show <>

segments: [
    provider:network_type: vxlan, provider:segmentation_id: 123, ..
    provider:network_type: vlan, provider:segmentation_id: 544, ..
    ]

mech 驱动程序也可以在绑定期间动态分配段。

对于 manila,这意味着必须在识别使用的段之前创建端口。这可以使用一个专门的 neutron-manila-mech 驱动程序来完成,该驱动程序在 binding:vif_details 中添加所需的信息,或者通过使用 manila 配置中的 physical_network 字段。

稍后,neutron 应该支持一个 API 接口,以更好地检索绑定信息。这项工作将在此处跟踪:[5]

备选方案

引入一个 neutron ML2 代理,该代理遵循 neutron 执行所有网络相关操作的概念。这意味着所有代理都需要一个驱动程序概念来支持多个供应商和 API。

数据模型影响

无。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

share 服务器的创建将花费更长的时间,因为 manila 需要等待 neutron 端口变为活动状态。以后可以通过引入多处理并像 Nova 那样进行 share 服务器创建来增强这一点。

其他部署者影响

需要增强配置文件以激活此特性。旧功能 / 旧配置将按原样工作。

开发人员影响

实现

负责人

主要负责人

m-koderer

其他贡献者

  • tpatzig

  • dgonzalez

工作项

  • manila 中对 neutron 端口绑定的支持

  • baremetal 配置的支持

  • 对多段网络 / HPB 支持的支持

  • 在 contrib 中添加一个 manila mech 驱动程序

依赖项

无。

测试

代码将通过单元测试进行测试。功能测试必须在单独的 CI 作业中完成

  • 可以使用 manila mech 驱动程序测试绑定

  • 仅静态的多段可以潜在地使用 neutron 网络进行测试

一个潜在的测试候选者可以是容器驱动程序 [6],因为它需要 neutron 完成绑定。使用动态多段的完整端到端测试需要一个第三方 CI。目前正在讨论在 Netapp-CI 系统中添加这些测试。

文档影响

有关新配置开关和可能的部署类型的文档。

参考资料