Cloud 分配openstack浮动IP,同时确保它不会从其他服务器上删除

Cloud 分配openstack浮动IP,同时确保它不会从其他服务器上删除,cloud,openstack,floating-ip,Cloud,Openstack,Floating Ip,(我使用openstack4j通过RESTAPI与OpenStack对话) 我想重用在我的租户中分配的一些未分配的浮动IP(分配给新配置的服务器)。然而,似乎addFloatingIp操作在分配未使用的浮动IP和在服务器之间重新分配浮动IP之间没有区别 我想自动化这个过程,但我担心以下竞争条件:一个客户端检查特定IP是免费的,在它设法将其与服务器A关联之前,另一个客户端将其与服务器B关联。从第二个客户端的角度来看,成功关联后,可以在以后的任何时间删除关联的浮动IP 有没有更好的方法?可能的解决办

(我使用openstack4j通过RESTAPI与OpenStack对话)

我想重用在我的租户中分配的一些未分配的浮动IP(分配给新配置的服务器)。然而,似乎
addFloatingIp
操作在分配未使用的浮动IP和在服务器之间重新分配浮动IP之间没有区别

我想自动化这个过程,但我担心以下竞争条件:一个客户端检查特定IP是免费的,在它设法将其与服务器A关联之前,另一个客户端将其与服务器B关联。从第二个客户端的角度来看,成功关联后,可以在以后的任何时间删除关联的浮动IP


有没有更好的方法?

可能的解决办法是:

  • 仅删除和创建浮动IP。正如你所说,这是首选的方式。小型虚拟机可以定期从内部清理不再使用的浮动IP。但最好由API客户端从外部进行清理。因此,每个客户机都应该集成此功能,但是必须注意这是用户的意图,至少他们会丢失一些重要的东西。示例:用于删除VM的web UI可能会询问是否也应该删除关联的浮动VM。Openstack Heat(通过模板编排)会自动执行此操作。CLI客户端可以提供在删除VM后删除释放的资源
  • 使用支持同步的东西来协调。示例:etcd、具有事务支持的数据库(SQL或非SQL)、可确保交付只完成一次的队列(例如,具有声明功能的OpenStack Zaqar)
  • 使用时间段进行同步:读取、更改、等待特定时间,最后再次读取,以检查是否没有人过度编写更改。如果此更改花费的时间太长,请在特定等待时间之前中止。如果更改被覆盖,请使用其他浮动ip重试。这是很难正确的,因为有许多角落的情况,特别是正确的流产足够快,这可能会使这失败。例如,如果不是更改经过的每个地方都能确保不会发生这种情况,那么高负载可能会使更改在中止后很长时间内成功
其他OpenStack API也有同样的问题,例如。通常,可以通过向API添加修订计数器来避免这种情况,例如,v3中的mod_revision)就是这样做的


即使对于实现无种族更改选项的API,大多数人类用户界面也可能仅将其用于种族检测,而不用于避免,因为告诉他们存在种族以及重写内容的用户界面比要求他们在每次种族发生时重试其操作的用户界面更可取。

(现已弃用)计算服务的浮动IP扩展,它将浮动IP分配分为两个步骤:分配(
/os浮动IP
端点)和分配(
addFloatingIp
服务器操作)


目前支持的方式是通过中子服务操作浮动IP,该服务允许在一个请求中创建和关联浮动IP(
POST
/v2.0/floatingIP
)。至少在理论上,这消除了希望重用浮动IP的客户端同时将一个与其他客户端关联的客户端视为同一时间的可能性。如果所有客户端都同意使用这种浮动IP分配模式,则无关联的浮动IP可以安全地作为悬挂实体进行处理。

我现在遇到了一些困难在这种情况下也是如此。我正在考虑改变机制,比如不使用预先分配的浮动ip。我想创建一个浮动ip,并在设置时将其分配给服务器。那么什么时候删除服务器呢?为了避免分配的浮动ip停留在池中,我想也删除该浮动ip。您也可以考虑尝试这样做另一种方法。这非常脆弱,但据我所知,这是首选方法。问题是自动删除服务器可能无法清理IP(或其任何其他相关资源),而且地平线中的终止按钮也无法执行所需的清理,因此客户端需要。无需任何操作(清理搁浅的IP或重新使用它们)您迟早会用完配额/IP。更不用说,openstack实例的配置方式是租户无权分配IP,但需要使用预分配的IP集。