网络 IP 可用性扩展

https://bugs.launchpad.net/neutron/+bug/1457986

问题描述

如果我们能知道某个网络或其子网中的 IP 地址何时即将耗尽,那该多好?

基本需求:确定网络或子网的 IP 地址消耗情况,相对于它们支持的总 IP 地址数。理想情况下,此信息应为网络和子网提供以下信息

  • 已用 IP 地址(在该子网或网络中分配或保留的数量)

  • 总 IP 地址(子网定义的可用最大总数)

此蓝图描述了一个简单的 Neutron API 扩展,它增加了管理员(或监控器)调用 API 以获取每个网络 IP 可用性详细信息的的能力。然后,监控器可以在超过阈值时向云操作员发出警报,以便他们知道需要增加容量。此蓝图的目标是提供一个简单的 API 扩展,以获取此 IP 可用性信息。

用例

  • 管理员或监控器调用 API 扩展以获取有关网络 IP 可用性的详细信息。管理员或监控器可以根据这些数据对几乎已满的网络采取行动。

  • 为未来的 nova 调度器提供基础 API,以根据宿主机的后端网络容量过滤或加权计算主机。

  • 提供网络或子网中已用 IP 地址的数量。回答问题:当网络关闭时,有多少 IP 地址受到影响(适用于 IPv4 和 IPv6)

提议的变更

我们建议添加一个只读 (GET) API 扩展,该扩展从 OpenStack 中现有的数据结构中检索 IP 可用性信息。

为了创建此 API,我们计划创建一个服务扩展,管理员可以配置并将其添加到他们的部署中。如果社区希望,也可以将其永久实现到 API 中(非扩展)。

GET /v2.0/network-ip-availability

  • 支持过滤器查询参数

    • network_id(网络 ID 作为 UUID)

    • network_name(网络名称)

    • ip_version(IP 版本,4 或 6)

    • tenant_id(拥有者租户作为 UUID)

  • 访问权限:admin(通过 json.policy)

  • 只读:没有 此 API 的任何部分会更改或修改数据。

  • 响应数据

    • 网络 IP 可用性:network_ip_availability 响应,其中包含一个网络列表(参见网络信息)

    • 网络信息:网络 ID、网络名称、租户 ID、子网部分列表(参见子网信息)、网络中使用的 IP 地址数量、网络可以支持的最大 IP 地址数量。

    • 子网信息:子网 ID、子网名称、IP 版本、cidr、子网中使用的 IP 地址数量、子网可以支持的最大 IP 地址数量。

提议的变更

从轨道观察新 REST API 的运作方式

  • 为 IP 可用性计数信息创建 API 扩展

  • 扩展查询数据库以获取 Allocation、AllocationPool、Subnet、已用 IP 地址数量以及每个子网内的总 IP 地址数量。

  • 扩展生成并返回一个响应,其中包含一个网络列表以及每个网络中嵌套的子网信息列表。

  • 实现代码更改应限制在扩展本身内,不要触及 Neutron 的其他区域。

  • Python 客户端已修改以支持获取此数据。

  • CLI 已修改以支持获取此数据。

  • 其他被认为对完整的端到端体验必要的修改。

初始版本范围

针对 Mitaka 版本的项目(主题:审查/评论/变更/帮助)

  1. (m1) 创建上述工作的 REST 端点。

  2. (m1) 完善并充实新的扩展 API 的单元/集成测试。

  3. (m1) 更新 Neutron 客户端以支持此新 API。

  4. (m?) 设计并创建等效的 CLI 命令。

  5. (m?) 添加和/或修改 Horizon 中的页面以显示已用和总计数。

问题和疑虑解答

以下是过去收到的问题和疑虑的解答

  • 此扩展将支持 IPv4 和 IPv6,以及过滤每个协议的能力。

  • IPv6 总 IP 地址计数将是天文数字。这是已知的事实,也是我们计划支持 ip_version 作为查询参数的关键原因。

  • 作为新的只读 API 扩展,它不应影响任何已知的驱动程序、服务、路由、DHCP、代理、调度、配额等。

  • 它提供现有的子网和 IP 分配信息,就像 Neutron 今天一样(无需外部数据/结构/代码更改即可支持此功能)。

  • IPAM 疑虑:IPAllocations 和 IPAllocationPools 在 neutron 端保持最新,无论 IPAM 驱动程序如何。因此,IPAM 驱动程序实现者无需实现抽象函数来支持此功能。

  • 浮动 IP:由于我们针对的是 IPAllocations 和池,因此此规范将处理浮动 IP 网络,其中浮动 IP 已保留(创建),但尚未与固定 IP 关联。端口计数无法支持此功能。

参考资料