Openstack为实例添加公网IP

Openstack为实例添加公网IP

我从 Hetzner 获得了一台新服务器。我在其上安装了 Ubuntu 18.04,然后安装了带有 Devstack 的 Openstack。

假设服务器 IP 地址为88.198.33.30。并且,ISP/Hetzner 为我提供了以下 IP 列表:

IP: 88.198.33..26
Gateway: 88.198.22.1
Netmask: 255.255.255.224

IP: 88.198.33.24
Gateway: 88.198.22.1
Netmask: 255.255.255.224

IP: 88.198.33.16
Gateway: 88.198.22.1
Netmask: 255.255.255.224

IP: 88.198.33.11
Gateway: 88.198.22.1
Netmask: 255.255.255.224

IP: 88.198.33.10
Gateway: 88.198.22.1
Netmask: 255.255.255.224

在这种情况下,我创建了两个网络和一个路由器,如下所示:
在此处输入图片描述

实例:测试 ub
专用网络:mrt-项目,10.0.0.0/26
路由器:mrt-路由器,私有= 10.0.0.11,公共=172.24.4.3
公共网络: public = 172.24.4.0/24br-ex主机 Ubuntu 服务器的接口)


如果我从主机向实例添加浮动 IP(172.24.4.0/24),我可以 ping 通实例(测试 ub)。
但问题是我不知道如何将其中一个公共 IP 设置为实例(测试 ub),然后可以通过其附加 IP 地址从外部/互联网访问它。

提前致谢。

答案1

通常,您可以通过配置非默认外部网络将 Devstack 连接到外界。请参阅指示在 Devstack 文档中。如果我正确计算了子网,您的 FLOATING_RANGE 将是 88.198.33.0/27。

问题在于 Q_FLOATING_ALLOCATION_POOL 参数。它配置了一个浮动 IP 地址范围,但 Hetzner 为您提供了四个不相连的地址,而不是一个范围。虽然 Neutron 可以配置多个范围,但 Devstack 似乎不支持这一点。

因此,我有三点建议。第一的设置好 Devstack 后,删除公共子网并创建一个新子网。您还必须删除连接到公共网络的路由器,并使用新子网创建新路由器。您可能可以在当前设置上立即尝试此操作:

openstack router delete ....
openstack subnet-delete public-subnet
openstack subnet-create \
   --subnet-range 88.198.33.0/27 \
   --allocation-pool start=88.198.33.10,end=88.198.33.11 \
   --allocation-pool start=88.198.33.16,end=88.198.33.16 \
   --allocation-pool start=88.198.33.24,end=88.198.33.24 \
   --allocation-pool start=88.198.33.26,end=88.198.33.26 \
   (other parameters identical to the original subnet)    

第二,按照说明将 FLOATING_RANGE 和 Q_FLOATING_ALLOCATION_POOL 都设置为 88.198.33.0/27。然后,在创建浮动 IP 时,指定 IP 地址:

openstack floating ip create --floating-ip-address 88.198.33.11 ...

默认情况下只有管理员用户可以这样做。如果你想允许非管理员用户指定 IP 地址,你需要更改 Neutron 的策略。我相信相应的策略规则是create_floatingip:floating_ip_address

第三,修改设置子网的函数。它被命名_neutron_create_public_subnet_v4并驻留在lib/neutron_plugins/services/l3(Ussuri 版本,但在后续版本中应该相同)。它需要一点 Bash 编程技能和一些勇气 :)

说实话,我还没试过这些。你的情况可能不一样。

相关内容