![Openstack为实例添加公网IP](https://linux22.com/image/762369/Openstack%E4%B8%BA%E5%AE%9E%E4%BE%8B%E6%B7%BB%E5%8A%A0%E5%85%AC%E7%BD%91IP.png)
我从 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/24
(br-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 编程技能和一些勇气 :)
说实话,我还没试过这些。你的情况可能不一样。