弃用 multinic、os-virtual-interfaces 和浮动 IP 操作 API

https://blueprints.launchpad.net/nova/+spec/deprecate-multinic-proxy-api

代理 API 在 弃用 API 代理 规范中已被弃用,导致 2.36 微版本。但 multinicos-virtual-interfacesaddFloatingIPremoveFloatingIP 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 是对网络服务的糟糕代理。

提议的变更

在一个微版本中,弃用 multinicos-virtual-interfacesaddFloatingIPremoveFloatingIP 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-ip

  • nova remove-fixed-ip

  • nova virtual-interface-list

  • nova floating-ip-associate

  • nova floating-ip-disassociate

如果用户想使用这些 CLI 或 API,他们应该使用低于新微版本的版本进行请求。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Alex Xu <hejie.xu@intel.com>

其他贡献者

Matt Riedemann <mriedem.os@gmail.com>

工作项

以下所有操作都在单个新的微版本下完成

  • 弃用 multinicos-virtual-interfacesaddFloatingIPremoveFloatingIP API。

  • 弃用并限制在 其他最终用户影响 部分中列出的 CLI 和 API。

依赖项

测试

将进行树内功能测试,以确保这些 API 在此 Microversion 之后能够正常工作并返回 404 错误。

对于 Tempest,以下测试需要在新的微版本下被限制

  • test_add_remove_fixed_ip

  • test_associate_disassociate_floating_ip

  • test_associate_already_associated_floating_ip

  • test_rescued_vm_associate_dissociate_floating_ip

  • test_server_basic_ops

  • test_minimum_basic_scenario

  • test_list_virtual_interfaces

根据新的微版本,Tempest 可能需要更改更多测试,例如与上述正向测试相关的负向测试。此外,场景测试中的某些更改可能具有重复的覆盖范围,并且可以合并。

文档影响

更新计算 api-ref 文档,以说明 multinicos-virtual-interfacesaddFloatingIPremoveFloatingIP API 的弃用。

参考资料

历史

修订版

发布名称

描述

Pike

引入