支持 manila 中的 IPv6 访问¶
https://blueprints.launchpad.net/manila/+spec/support-ipv6-access
问题描述¶
目前 IP 访问规则类型仅支持 IPv4。有效的格式为 xxx.xxx.xxx.xxx 或 xxx.xxx.xxx.xxx/xx。当用户希望在 manila 中启用 IPv6 时,这还不够。受影响最大的领域是 API(访问规则)和驱动程序(访问规则 & 导出位置)。
用例¶
拥有 IPv6 接口的最终用户也希望访问他们的共享,而 manila 当前仅在基于 IP 的访问时支持 IPv4 协议。
提议的变更¶
支持访问规则中的 IPv6
正如 manila 社区在 IRC 会议(主题 IPv6)[1] 中同意的那样,manila 可以通过为 IP 访问规则类型添加 IPv6 格式验证来解决此需求。将验证方法从我们自己的函数 (_validate_ip_range) 更改为标准模块 ‘ipaddress’(同时支持 IPv4 和 IPv6)。
使用 ipaddress 模块,以下 IPv6 格式都被认为是可接受的
2001:0DB8:02de:0000:0000:0000:0000:0e13 #uncompressed
2001:DB8:2de:0:0:0:0:0e13 #leading zeros removed
2001:DB8:2de::0e13 #consecutive sections of zeroes omitted
2001:dB8:2De::0E13 #mixed case
2001:dB8::/32 #network range
manila 会将所有这些转换为小写和压缩格式,这意味着第一个示例的结果将类似于(这也是 RFC5952 [2] 中推荐的规范格式)
2001:db8:2de::e13
支持网络插件中的 IPv6
独立网络插件和 neutron 网络插件(nova 网络插件将被忽略,因为它们正在被弃用)需要进行修改以支持 IPv6。
网络插件将添加新的布尔型配置选项 ‘network_plugin _ipv4_enabled’ 和 ‘network_plugin_ipv6_enabled’ 来指示其启用的 IP 版本。默认值分别为 ‘True’ 和 ‘False’。最终我们将支持单个网络插件同时启用 IPv4 和 IPv6,但对于 Ocata 阶段,为了限制在当前的 manila 网络插件架构下,只能配置一个选项为 True(IPv4 或 IPv6)。我们还将弃用 ‘standalone_network_plugin_ip _version’,它将等效于 ‘network_plugin_ipv6_enabled=True’ 和 ‘network_plugin_ipv4_enabled=False’,反之亦然。
网络插件应更新为根据其 IP 版本配置分配网络资源(用户网络和管理网络)。例如,neutron 网络插件仅在 ‘network_plugin_ipv6_enabled = True’ 时才会分配 IPv6 端口。如果未找到具有配置或指定的网络资源的合适资源,则分配过程将因异常而失败。
支持驱动程序中的 IPv6
由于不同驱动程序中导出位置支持的状态各不相同,manila 将引入两个 extra_specs(和驱动程序功能)‘ipv4_support’、‘ipv6_support’,以便后端和用户易于支持和配置。
为共享类型添加新的可选布尔型 extra_specs ‘ipv4_support’、‘ipv6_support’,指示所需的 IP 版本(省略任一 extra_spec 表示“不关心”该功能的匹配)。
驱动程序必须使用它们可以支持的 IP 版本报告功能,功能格式与 extra_specs 相同。驱动程序应该考虑两种情况:- DHSS=false,驱动程序仅在实际配置了 IPv4 导出位置时才报告 IPv4 为 True,并且仅在实际配置为支持 IPv6 导出位置时才报告 IPv6 为 True。 - DHSS=true,驱动程序仅在驱动程序和配置的网络插件(用户和管理网络)都具有 IPv4 功能时才报告 IPv4 为 True,IPv6 也是如此。
manila 调度程序将在涉及 IP 版本 extra_specs 时选择具有功能过滤器的正确后端。
驱动程序必须根据其 IP 版本功能返回导出位置,并且仅允许主机地址出现在导出位置中,不允许主机名。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
此 API 微版本需要更新。
allow_access 操作中支持 IPv6 地址和 IPv6 网络。
驱动程序影响¶
将更新驱动程序,以便使用 IPv4 地址的现有驱动程序将报告 ipv4_support=True。当驱动程序同时支持 IPv4 和 IPv6 时,它们需要根据其功能和存储后端的配置报告其支持版本。 此外,以下函数可能需要更改
_update_share_stats
create_share
delete_share
create_share_from_snapshot
update_access
setup_server
manage_existing
create_replica
promote_replica
migration_start
migration_complete
create_consistency_group
create_consistency_group_from_cgsnapshot
此外,驱动程序必须将位置作为地址而不是主机名导出,因为地址是特定的 IPv4 或 IPv6,而主机名可以在任何特定时间解析为 IPv4 或 IPv6 地址。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
python-manilaclient 将更改以反映 IP 访问类型验证方法的变化。
支持 IPv6 的 access-allow 命令将如下所示
manila access-allow test_share ip "AD80:0:0:0:ABAA:0:C2:2"
manila-ui 将进行相应的 UI 更改,以处理 IP 访问规则类型有效值。
性能影响¶
无
其他部署者影响¶
部署者必须确保其 IP 版本偏好反映在存储后端上,以便数据接口具有所需的 IPv4 和 IPv6 地址。
开发人员影响¶
驱动程序接口的更改如上所述。第三方后端将实施这些更改,并在其驱动程序中启用 IPv6(如果他们希望启用 IPv6)时报告其 IPv6 功能(支持矩阵可以在这里找到 [3])。
实现¶
负责人¶
主要负责人
zhongjun(jun.zhongjun2@gmail.com)
TommyLike(tommylikehu@gmail.com)
zengyingzhe(zengyingzhe@huawei.com)
工作项¶
实现核心功能
报告现有 IPv4 驱动程序的 ipv4_support=True 功能
在网络插件中实现 IPv6。
在通用、华为和虚拟驱动程序中实现 IPv6 ACL
实现 tempest 测试
实现场景测试
实现 manila-ui 支持
实现 python-manilaclient 支持
更新 manila API 文档
更新 manila 指南文档中的 IPv6 相关内容
依赖项¶
无
测试¶
单元测试
功能测试
Tempest 测试
文档影响¶
更新用户指南
更新 manila API 文档
更新 manila 开发人员文档中的 IPv6 相关内容
参考资料¶
[1] http://eavesdrop.openstack.org/meetings/manila/2016/manila.2016-08-25-15.00.log.html [2] https://tools.ietf.org/html/rfc5952#section-4 [3] https://docs.openstack.org/developer/manila/devref/share_back_ends_feature_support_mapping.html