网络 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 版本的项目(主题:审查/评论/变更/帮助)
(m1) 创建上述工作的 REST 端点。
(m1) 完善并充实新的扩展 API 的单元/集成测试。
(m1) 更新 Neutron 客户端以支持此新 API。
(m?) 设计并创建等效的 CLI 命令。
(m?) 添加和/或修改 Horizon 中的页面以显示已用和总计数。
问题和疑虑解答¶
以下是过去收到的问题和疑虑的解答
此扩展将支持 IPv4 和 IPv6,以及过滤每个协议的能力。
IPv6 总 IP 地址计数将是天文数字。这是已知的事实,也是我们计划支持 ip_version 作为查询参数的关键原因。
作为新的只读 API 扩展,它不应影响任何已知的驱动程序、服务、路由、DHCP、代理、调度、配额等。
它提供现有的子网和 IP 分配信息,就像 Neutron 今天一样(无需外部数据/结构/代码更改即可支持此功能)。
IPAM 疑虑:IPAllocations 和 IPAllocationPools 在 neutron 端保持最新,无论 IPAM 驱动程序如何。因此,IPAM 驱动程序实现者无需实现抽象函数来支持此功能。
浮动 IP:由于我们针对的是 IPAllocations 和池,因此此规范将处理浮动 IP 网络,其中浮动 IP 已保留(创建),但尚未与固定 IP 关联。端口计数无法支持此功能。