OS::Nova::Server 丰富的网络属性¶
https://blueprints.launchpad.net/heat/+spec/rich-network-prop
允许在 OS::Nova::Server 中指定端口和浮动 IP 关联属性,可以解决 nova 端口管理的问题,为用户提供更简单的方式来实现常见模式,并允许更多模板与 neutron/nova-networking 无关。
问题描述¶
目前很难解决 OS::Neutron::Port 的一些问题,包括
在服务器删除时,Nova 会删除所有端口,即使这些端口是在 nova 启动之前创建的 (https://bugs.launchpad.net/nova/+bug/1158684)。这会导致堆栈更新时出现问题,因为给定端口资源底层的端口在服务器被替换后可能不再存在。
端口与服务器的关系是排他的,但是堆栈更新替换服务器时,旧服务器和新服务器会尝试连接到相同的端口资源
在同一网络上,两个端口不能具有相同的固定 IP 地址,因此堆栈更新导致端口被替换时,除非固定 IP 地址也更改,否则将失败。
OS::Neutron::Port 具有顶级的
network属性,但subnet位于fixed_ips属性中。如果网络有多个子网,并且端口资源没有指定哪个子网,那么 neutron 会将端口分配给一个非确定的子网。如果用户不定义 OS::Neutron::Port 资源,他们可以避免上述问题,但如果他们想要定义 neutron 浮动 IP 关联,则必须定义。服务器+端口+浮动 IP 是一种非常常见的模式,用户可以从在服务器资源中定义所有这些内容中受益。
同样,任何将服务器与浮动 IP 关联的模板都只能在 neutron 或 nova-networking OpenStack 上工作。
提议的变更¶
OS::Nova::Server 具有一个 networks 属性,该属性允许使用映射列表,其中映射键是 fixed_ip、network、port 或 uuid 中的一个,这些映射直接对应于 nova 启动 nic 选项。
建议的更改是向此映射添加新的键,以完全描述 networks 项目中的端口。服务器资源将负责创建和管理端口,而不是允许 nova 隐式创建端口。
network现有键 创建 nic 的网络名称或 UUID。适用于 neutron 和 nova-network。fixed_ip现有键 要分配给 nic 的可选固定 IP 地址。适用于 neutron 和 nova-network。subnet新键 创建 nic 的 neutron 子网的名称或 UUID。如果指定,则network是可选的。如果同时指定了network,则验证将确认子网是否属于该网络。仅适用于 neutron。floating_ip新键 要分配给此 networks 条目的浮动 IP 的 ID。该值可以是来自OS::Neutron::FloatingIP或OS::Nova::FloatingIP的引用,或者可以从已经存在的浮动 IP 的参数中提供一个字符串。此属性取代了 OS::Neutron::FloatingIPAssociation 和 OS::Nova::FloatingIPAssociation,因此可以弃用这些不代表真实资源的资源。适用于 neutron 和 nova-network。port_extra_properties包含传递给 neutron 端口创建的额外值的映射,这些值未包含在上述或派生属性中。仅适用于 neutron。
实现将在 Server 资源中,并根据 self.is_using_neutron 具有不同的路径。
将执行验证,如果设置了 nova-networking 不支持的值,则会引发错误。
neutron 路径中的服务器创建将执行以下操作
限制端口最多只能有一个 fixed_ip(neutron 端口允许多个 fixed_ips)。需要多个固定 IP 的用户仍然可以创建完整的端口资源。
从 Server 属性 security_groups 派生安全组。这意味着所有创建的端口都将被分配给相同的安全组列表。
从服务器名称和 networks 列表位置派生端口名称
基于传递的和派生的属性创建端口,并将该
port-id添加到 novanics列表。将每个创建的端口的 port-id 存储在资源数据中
neutron 路径中的资源更新将执行以下操作
计算要更新、创建和删除的端口
neutron 路径中的资源删除将删除资源数据中存储的任何端口。
以下情况需要特殊处理
堆栈更新导致服务器替换,并且
其中一个
networks项目指定了一个未更改的 fixed_ip
在这种情况下,旧服务器的 handle_delete 和新服务器的 handle_create 需要交互,以允许将 fixed_ip 分配给分配给旧端口的端口。在回滚时可能需要重新分配给旧端口。
备选方案¶
另一种选择是等待 Nova 中 bug #1158684 的修复,并对 OS::Neutron::Port 和 OS::Nova::Server 进行任何必要的更改,以减轻 问题描述 中列出的项目。(项目 4.、5. 和 6. 可能不会得到解决。)
实现¶
负责人¶
此蓝图需要一位主要作者来采用它。Steve Baker 将在需要时提供实施和审查协助。
- 主要负责人
<skraynev>
- 协助者
<steve-stevebaker>
里程碑¶
- 完成目标里程碑
Kilo-2
工作项¶
“建议的更改”部分中提到的步骤描述了工作项列表。
依赖项¶
此蓝图没有蓝图或库依赖项。