nova-network 中多网络支持的改进

https://blueprints.launchpad.net/nova/+spec/better-support-for-multiple-networks

由于 nova-network 仍然在使用,它需要一些更新以支持多个网络。目前有一些设置是自动确定的或通过标志设置的,这些设置应该明确地为每个网络设置。本规范旨在为 networks 表添加一些选项,并将网络管理器和 linux_net 代码转换为支持多个网络。

问题描述

目前,无法拥有具有不同 MTU 设置的多个网络,或者拥有共享 IP 或具有外部网关的网络,以及不具有外部网关的网络。如果您只有一个网络,可以通过添加自定义 dnsmasq.conf 来为该网络指定不同的(外部)网关,但这在拥有多个网络时会失效。

提议的变更

此更改建议在 networks 表中添加四个字段

  • mtu

  • dhcp_server

  • enable_dhcp

  • share_address

每个新字段将取代现有的配置选项或自动值解释。如果未指定这些选项,则它们的默认值意味着对用户没有任何影响。

它还将修改网络创建以允许修改这些字段。将添加一个 API 扩展,以便可以确定是否可用额外的网络字段。

备选方案

在不更改数据模型的情况下支持此功能需要一些非常复杂的配置选项。例如,mtu 可以是网络名称和 mtu 的列表,但这非常笨拙。

数据模型影响

这会在网络模型中添加四个新字段。这些字段的备用方案将使用现有的配置选项和默认值。这些配置选项将被标记为已弃用,但默认情况下仍然有效。

四个新字段将被添加到对象模型中,并且它们将被移除以支持旧版本。

REST API 影响

当前的 network create API 允许传递额外的参数,并且这些参数会被静默忽略。为了提供有关是否支持新字段的信息,将创建一个虚拟 API 扩展,并且只有在启用 API 扩展后才会接受/返回额外的字段。

网络创建调用的 JSON 当前如下所示

{
    "network": {
        "label": "new net 111",
        "cidr": "10.20.105.0/24",
        ...
    }
}

使用新字段,它将支持

{
    "network": {
        "label": "new net 111",
        "cidr": "10.20.105.0/24"
        "mtu": 9000,
        "enable_dhcp": "true",
        "dhcp_server": "10.20.105.2",
        "share_address": true,
        ...
    }
}

这些字段也将返回在 show 命令中

{
    "network": {
        "bridge": "br100",
        "bridge_interface": "eth0",
        "broadcast": "10.0.0.7",
        "cidr": "10.0.0.0/29",
        "cidr_v6": null,
        "created_at": "2011-08-15T06:19:19.387525",
        "deleted": false,
        "deleted_at": null,
        "dhcp_start": "10.0.0.3",
        "dns1": null,
        "dns2": null,
        "gateway": "10.0.0.1",
        "gateway_v6": null,
        "host": "nsokolov-desktop",
        "id": "20c8acc0-f747-4d71-a389-46d078ebf047",
        "injected": false,
        "label": "mynet_0",
        "multi_host": false,
        "netmask": "255.255.255.248",
        "netmask_v6": null,
        "priority": null,
        "project_id": "1234",
        "rxtx_base": null,
        "updated_at": "2011-08-16T09:26:13.048257",
        "vlan": 100,
        "vpn_private_address": "10.0.0.2",
        "vpn_public_address": "127.0.0.1",
        "vpn_public_port": 1000,
        "mtu": 9000,
        "dhcp_server": "10.20.105.2",
        "enable_dhcp": true,
        "share_address": true
    }
}

安全影响

此更改没有安全影响。

通知影响

此更改不会影响通知。

其他最终用户影响

此更改还将包括对 python-novaclient network create 的修改,以允许用户创建指定附加字段的网络。

性能影响

此更改的性能影响可以忽略不计。

其他部署者影响

部署者应该开始使用网络字段代替配置选项,但没有要求他们立即迁移。

开发人员影响

此更改不应影响开发人员。

实现

负责人

主要负责人

vishvananda

其他贡献者

工作项

Nova 代码添加 Python-novaclient 代码添加 Tempest 测试添加

依赖项

此功能没有新的依赖项。

测试

目前没有针对 create network 调用的 tempest 测试。将添加一个包含新字段的 create network 测试。内部修改将通过单元测试覆盖。

文档影响

需要记录网络创建调用的新添加内容。

参考资料