Manila/Kilo Network Spec
简介
基于 这些需求。
特性
实现可以分解为以下特性
驱动模式
添加驱动模式允许管理员告知 Manila 每个驱动应该如何运行。有些驱动可以支持多种运行模式,而对于仅支持一种模式的驱动,如果 Manila 能够明确知道该模式,而不是像今天这样根据驱动的行为进行猜测,则会更好。 行为上的两种具体差异导致总共 3 种可能的模式(因为一种组合是不可能的)。
mode=single_svm 在此模式下,Manila 将不会创建共享服务器,驱动程序不需要与任何网络管理系统交互。 假设所需的网络配置已提前完成。 此模式与 Cinder 中的驱动程序操作方式非常相似。
mode=flat_multi_svm 在此模式下,Manila 将为每个租户和共享网络创建共享服务器,但共享服务器将被假定存在于一个扁平网络上,并且租户网络到扁平网络的连接已提前建立。 以这种模式运行的驱动程序需要一个网络助手(见下文)来指定子网并为共享服务器分配单个 IP 地址。 此模式是新的,涵盖了一个重要的中间领域,我相信许多用户和部署者会觉得它很有价值。
mode=managed_multi_svm 在此模式下,Manila 将为每个租户和共享网络创建共享服务器,并且 Manila 将负责确保共享服务器和租户的共享网络之间的连接。 以这种模式运行的驱动程序需要一个网络助手来管理所有网络连接,包括在网络上分配 IP 地址、创建新网络、在网络之间建立路由以及在 SVM 上封装网络数据包以隔离物理网络并创建虚拟覆盖网络。 此模式与我们今天使用的最相似,但应该使管理员能够通过使用网络助手(见下文)对上述操作拥有更多的控制权。
网络助手
网络助手创建了一种新的插件架构,允许用户为特定用例扩展 Manila,并允许 Manila 开发团队开箱即用地支持更广泛的用例。 希望网络助手能够将所有特定于网络的代码从现有的驱动程序中移出。
只有以两种 multi_svm 模式之一运行的驱动程序才需要网络助手,因为 single_svm 驱动程序被假定为没有网络要求。 网络助手是一个由共享管理器实例化的 Python 对象,并支持一组定义的 API。 驱动程序在 SVM 创建过程中调用网络助手,以获取创建 net 逻辑/虚拟网络接口所需的详细信息。
以扁平模式运行的驱动程序只会期望网络助手返回
- 网络地址
- 子网掩码
- 广播地址
- 网关
- 1 个或多个用于 SVM 的子网 IP 地址
以托管模式运行的驱动程序期望网络助手返回以上所有内容,以及
- 分段方法(VLAN/VXLAN/等)
- 分段 ID 以及与分段方法相关的任何其他信息
此外,以扁平模式运行的驱动程序可以假定子网详细信息(网络、掩码、广播、网关)是一致的,并且只有 IP 地址会更改。 在托管模式下,网络助手可以自由使用多个网络并根据需要创建新网络。
网络插件
网络助手对象为共享管理器和驱动程序创建了一个交互接口,但实际实现是可插拔的。 显然,主要的网络助手插件将基于 Neutron,但其他实现也是可能的。 具体来说,我设想一个与 Nova-network 交互的插件,供选择使用它的部署者使用,以及至少一个没有外部依赖项的插件,这应该可以大大简化创建简单的测试环境,并且还将启用在没有 OpenStack 其余部分的情况下部署 Manila 的各种用例。
插件可以拥有自己的配置选项,以便管理员可以调整网络助手的操作。 这至关重要,因为管理员可能希望网络助手的多个实例对应于多个后端实例,例如,如果每个后端都连接到不同的扁平网络。
考虑这个用例
enabled_backends=netapp1,netapp2 [netapp1] driver=manila.share.drivers.netapp.cluster_mode.NetAppClusteredShareDriver mode=flat_multi_svm network_helper=helper1 ... [netapp2] driver=manila.share.drivers.netapp.cluster_mode.NetAppClusteredShareDriver mode=flat_multi_svm network_helper=helper2 ... [helper1] plugin=manila.network.simple.FlatNetworkHelper network=192.168.10.0 netmask=255.255.255.0 gateway=192.168.10.1 ip_range=192.168.10.50-192.168.10.99 [helper2] plugin=manila.network.simple.FlatNetworkHelper network=10.2.0.0 netmask=255.255.0.0 gateway=10.2.0.1 ip_range=10.2.100.0-10.2.100.255
在此示例中,我们有 2 个物理集群模式系统连接到 2 个现有的扁平网络。 此配置文件允许管理员告知 Manila 现有的网络布局,而无需与外部工具交互,也不需要在驱动程序中放置任何特殊的网络代码。 更重要的是,它允许 Manila 管理集群并创建 SVM,而无需对交换机或路由器进行任何网络管理员访问,这在现实世界的环境中是一种常见的限制。
上述的另一种选择是将 2 个物理网络添加到 Neutron 作为公共网络,并使用相关网络名称/ ID 输入到配置文件中的 Neutron 网络助手。
当使用 single_svm 模式驱动程序时,共享网络将有效地被忽略。 在 flat_multi_svm 后端的情况下,共享网络的子网/网络 ID 部分将被忽略。 这是对现有行为的更改,为了最大限度地减少对现有用户的影响,建议
- 共享网络的子网/网络 ID 部分应成为可选的——省略它们将意味着希望使用 single_svm 模式的后端
- 管理员应该能够创建“公共”共享网络,这些网络对所有租户可见且可用(只读)
- 管理员应该能够将其中一个公共共享网络指定为默认共享网络,以便租户不必总是指定共享网络
- 管理员可以通过配置文件选项更改默认值
- 管理员可以通过 extra_spec 覆盖每个共享类型的默认共享网络