允许指定路由器外部 IP 地址¶
https://blueprints.launchpad.net/neutron/+spec/specify-router-ext-ip
目前没有办法指定路由器在其外部端口上使用的 IP 地址。此蓝图允许设置外部 IP,并且默认情况下该操作仅限于管理员权限。
该规范最初已获得 Juno 的批准,但是由于时间限制以及与周期末期正在进行的所有 DVR 工作冲突,代码在截止日期前被简化为只读版本。
完成这项工作所需的剩余代码已经完成并经过了多次审查。[1] 它影响大约 100 行 L3 代码,因此占用的空间很小,并且不应需要审查者付出太多的额外精力来合并。
问题描述¶
当前的路由器 API 不允许对路由器对象上的外部接口分配的 IP 地址进行任何控制。这使得在租户路由器必须分配一个具有特殊处理的、在提供商网络上具有已知地址的场景下变得困难。
或者,即使地址最初是随机分配的,也没有办法删除路由器、将其移动到另一个项目,并保留先前分配的地址。
提议的变更¶
允许在传递给 router_update 的 external_gateway_info 中指定路由器的外部 IP。默认情况下,这将由 policy.json 限制为仅管理员操作。
格式将采用标准 fixed_ips 格式,该格式用于指定普通端口的 IP 地址,因此它提供了指定 subnet_id 而不是直接指定 IP 的灵活性。
请求的地址可以是在与外部网络关联的任何子网内的任何地址,但不能是网关地址。它们不受分配池范围的影响。
如果地址已被使用,API 将返回冲突错误 (HTTP 409)。
备选方案¶
N/A
数据模型影响¶
N/A
REST API 影响¶
‘external_fixed_ips’ 是 ‘external_gateway_info’ 下的一个字段,包含路由器接口的外部 IP 地址。由于先前允许读取地址的部分实现,该字段已存在于当前的 API 中。唯一的区别是该字段现在可以由管理员(或 policy.json 中定义的具有权限的其他用户)更新。
属性名称 |
类型 |
访问 |
默认值 |
验证/转换 |
描述 |
|---|---|---|---|---|---|
external_fixed_ips |
端口的 fixed_ip 格式 |
只读,所有者读写,管理员 |
生成 |
与普通端口的 fixed_ips 字段验证相同。 |
外部 IP 地址 |
目前只能指定一个固定的 IP,但如果路由器支持多个外部 IP,则将来可能会进行调整。
安全影响¶
如果默认 policy.json 未经修改,则不适用。如果对其进行修改以允许所有用户设置 IP,则普通用户将被允许忽略外部子网上定义的分配范围。
通知影响¶
N/A
IPv6 影响¶
IP 验证将使用与任何端口 IP 地址相同的验证,因此此更改应与 IPv6 兼容。
其他最终用户影响¶
N/A
性能影响¶
N/A
其他部署者影响¶
N/A
开发人员影响¶
N/A
社区影响¶
社区将欣喜若狂,因为如此惊人的功能甚至有可能实现,更不用说在软件中实现了。
实现¶
负责人¶
kevinbenton
工作项¶
对 L3 数据库代码、API 和策略进行更改。
更新 neutronclient
依赖项¶
N/A
测试¶
Tempest 测试¶
N/A
功能测试¶
N/A
API 测试¶
单元测试应该足够,因为 IP 地址分配之外不会有任何新的行为,而 IP 地址分配在 neutron 代码中得到了很好的控制。
文档影响¶
用户文档¶
指示租户可以看到其路由器的外部 IP,并且管理员可以指定路由器 IP。
开发人员文档¶
需要更新开发人员 API 文档,以指示现在可以设置外部路由器 IP。
参考资料¶
相关 bug