【问题标题】:How to Create a Floating IP and then assign it to a server using Openstack API如何创建浮动 IP,然后使用 Openstack API 将其分配给服务器
【发布时间】:2020-11-11 10:32:35
【问题描述】:

我目前正在使用 OpenStack API 以编程方式创建 OpenStack 虚拟机。我需要将浮动 IP 与创建的服务器相关联。我不清楚这方面的 API 文档。计算 API 说它已被弃用,尽管我尝试使用它,但我不确定如何正确使用它。没有 API 可以首先创建浮动 IP - 使用浮动 IP 的计算 API。我也尝试过使用 Neutron 网络 API 进行浮动 IP,这也没有显示如何将浮动 IP 关联到新服务器。它要求一个端口号,而创建服务器 API 的响应没有返回端口号,也没有返回 IP 地址。

有人可以指导我吗?

【问题讨论】:

    标签: api openstack floating-ip


    【解决方案1】:

    您应该将 neutron-API 用于浮动 IP。 nova 版本确实被贬低了,它是从 nova 和 neutron 是一个单一的组件直到它们将大部分网络内容移到中子的时候的遗留物。

    创建服务器是一个异步过程,几秒钟后获取它的 IP 地址。因此,您应该创建一个循环,针对新的服务器 ID 运行 get-requests 并检查服务器的状态,直到他变得活跃并拥有 IP(https://docs.openstack.org/api-ref/compute/?expanded=show-server-details-detail#show-server-details 并检查 OS-EXT-STS:vm_state 的活跃状态)。在此之后,您可以请求所有端口并检查结果,哪个端口 ID 属于新创建的服务器的 ip(https://docs.openstack.org/api-ref/network/v2/?expanded=list-ports-detail#list-ports 并检查 fixed_ips 以获得服务器的 ip)。使用此端口 ID,您应该能够创建浮动 IP。

    也许有一个更简单的方法,但这是我第一次尝试,当我必须解决这个任务时。

    【讨论】:

    • 非常感谢您的详细解答。我现在正在努力。
    • 我现在遇到了这个实现的问题。每当我调用创建浮动 IP API 时,它都会返回错误请求 (400) 错误。调查此错误后,API 文档说它是由以下原因之一引起的: - 网络不是外部的,例如 router:external=False。 - 内部 OpenStack 网络端口与浮动 IP 地址无关。 - 请求的浮动 IP 地址不在外部网络的子网范围内。 - 固定IP地址无效。
    • hmmmm,在不知道您的网络设置的情况下很难回答。您是否在子网中创建了您的虚拟机,该子网通过虚拟路由器连接到部署的外部网络,这对于浮动 ip 是必需的?
    • 是的,我相信是的。你认为这可能是个问题吗?
    • 如果是这样,那么是的。当您想将 floatin-ip 连接到 VM 时,您必须将 VM 绑定到通过虚拟中子路由器连接的子网。到您的 floatin-ip-pool 所属的外部网络。当您将 VM 直接绑定到外部网络时,您的 VM 会从外部网络的子网中获取 IP,因此该 VM 应该已经可以从 Internet 访问。这就是为什么您不应该将虚拟机直接连接到外部网络的原因。不应允许普通用户执行此类操作。
    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 2016-08-21
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多