弃用 multinic、os-virtual-interfaces 和浮动 IP 操作 API¶
https://blueprints.launchpad.net/nova/+spec/deprecate-multinic-proxy-api
代理 API 在 弃用 API 代理 规范中已被弃用,导致 2.36 微版本。但 multinic、os-virtual-interfaces、addFloatingIP 和 removeFloatingIP API 在该变更中被遗漏。本规范旨在描述它们的弃用。
问题描述¶
multinic
Nova 的 neutron 实现的 multinic API(在 nova.network.neutronv2.api 下)正在为实例的现有接口在特定网络中分配一个新的固定 IP 地址。用户只能输入现有接口使用的网络 ID,然后实现将从该网络中的现有子网分配一个固定 IP 地址。如果网络中只有一个子网,则新的固定 IP 地址将仅从该子网分配。如果网络中有多个子网,它始终从 Neutron list subnets API 响应中的第一个子网项分配固定 IP 地址。这种语义没有明确的使用场景。此外,此行为只是 Neutron API 的代理 API。用户可以使用以下 Neutron API 执行相同操作
# To list all subnets in the specific network
neutron subnet-list --network-id NETWORK_ID
# Update the port includes the existed subnet and fixedIP and the new subnet
neutron port-update --fixed-ip subnet-id=EXISTED_SUBNET_ID,ip_address=EXISTED_IP_ADDRESS --fixed-ip subnet-id=NEW_SUBNET_ID
在 GET /servers/{uuid} 和 GET /servers/{uuid}/ips 的 API 响应中,存在固定 IP 地址信息。由于 Neutron 会在端口更新时发送 network-changed 事件,因此即使用户通过 Neutron API 直接向实例添加新的 fixedIP,该信息也不会过时。
os-virtual-interfaces
The os-virtual-interfaces API 具有一个 GET /servers/{server_id}/os-virtual-interfaces 方法,用于列出服务器的虚拟接口。此 API 仅使用 nova-network 实现,并在使用 Neutron 时导致 400 错误。nova-network 自 14.0.0 Newton 版本发布以来已被弃用,虽然它不是对外部服务的代理,但我们使用 2.36 微版本弃用了几个网络资源 API,这属于同一类弃用。
addFloatingIP, removeFloatingIP
The floatingip actions API 用于将浮动 IP 与实例的端口接口关联。该 API 支持 nova-network 和 neutron 后端。由于 nova-network 已被弃用,我们不再需要此 API。对于 neutron,API 实现是 neutron API 的一种代理。
要通过 addFloatingIP API 将浮动 IP 与实例关联,最终用户需要执行以下操作
neutron floatingip-create EXT_NET_ID
nova floating-ip-associate FLOATING_IP_ID [--fixed-address FIXED_ADDRESS]
使用 neutron,最终用户需要执行以下操作
neutron floatingip-create EXT_NET_ID
neutron floatingip-associate FLOATING_IP_ID VM_PORT_ID
or
neutron floatingip-create EXT_NET_ID VM_PORT_ID
实例的浮动 IP 信息也在 Nova API 中公开。您可以从 GET /servers/{uuid} 和 GET /servers/{uuid}/ips API 的 addresses 属性中获取实例的浮动 IP 信息。这些实例浮动 IP 信息是从实例网络缓存中读取的。如果用户通过 Neutron API 直接将浮动 IP 关联到实例的接口,Neutron 将向 Nova 发送 network-changed 事件,然后 Nova 将更新特定实例的网络信息缓存。这显然不是原子或安全的,并且在未来我们可能会重构服务器表示中的 addresses 字段,但这超出本规范的范围。
用例¶
作为用户,我希望将多个固定和/或浮动 IP 添加到我的服务器实例,并以一致且可预测的方式进行。
作为部署者,我不想支持有缺陷的计算 API,这些 API 是对网络服务的糟糕代理。
提议的变更¶
在一个微版本中,弃用 multinic、os-virtual-interfaces、addFloatingIP 和 removeFloatingIP API。
在弃用微版本或更高版本的这些 API 的请求将导致 404 NotFound 响应。
备选方案¶
永久保留这些代理。这将增加 Nova 的维护成本,并降低我们适应新功能和要求的速度。
数据模型影响¶
无
REST API 影响¶
以下请求在微版本或更高版本下将导致 404 错误响应
POST /servers/{server_id}/action
{
"addFixedIp": {
"networkId": 1
}
}
POST /servers/{server_id}/action
{
"removeFixedIp":{
"address": "10.0.0.4"
}
}
GET /servers/{server_id}/os-virtual-interfaces
POST /servers/{server_id}/action
{
"addFloatingIp" : {
"address": "10.10.10.10",
"fixed_address": "192.168.0.3"
}
}
POST /servers/{server_id}/action
{
"removeFloatingIp": {
"address": "172.16.10.7"
}
}
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
python-novaclient 中用于以下命令的 python API 绑定和 CLI 将被弃用并在新的微版本下被限制
nova add-fixed-ipnova remove-fixed-ipnova virtual-interface-listnova floating-ip-associatenova floating-ip-disassociate
如果用户想使用这些 CLI 或 API,他们应该使用低于新微版本的版本进行请求。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Alex Xu <hejie.xu@intel.com>
- 其他贡献者
Matt Riedemann <mriedem.os@gmail.com>
工作项¶
以下所有操作都在单个新的微版本下完成
弃用 multinic、os-virtual-interfaces、addFloatingIP 和 removeFloatingIP API。
弃用并限制在 其他最终用户影响 部分中列出的 CLI 和 API。
依赖项¶
无
测试¶
将进行树内功能测试,以确保这些 API 在此 Microversion 之后能够正常工作并返回 404 错误。
对于 Tempest,以下测试需要在新的微版本下被限制
test_add_remove_fixed_iptest_associate_disassociate_floating_iptest_associate_already_associated_floating_iptest_rescued_vm_associate_dissociate_floating_iptest_server_basic_opstest_minimum_basic_scenariotest_list_virtual_interfaces
根据新的微版本,Tempest 可能需要更改更多测试,例如与上述正向测试相关的负向测试。此外,场景测试中的某些更改可能具有重复的覆盖范围,并且可以合并。
文档影响¶
更新计算 api-ref 文档,以说明 multinic、os-virtual-interfaces、addFloatingIP 和 removeFloatingIP API 的弃用。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Pike |
引入 |