微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法从外部网络 ping OpenStack 机器的实例

如何解决无法从外部网络 ping OpenStack 机器的实例

我使用 Devstack(victoria branch) 在我的 Ubuntu-20.04 系统上快速部署 OpenStack 一体机。这台机器在接口eno1上有一个公网ip地址222.XXX.XXX.XXX,Devstack脚本已经在这台机器上自动添加br-exvirbr0接口。这是我的配置。
#ifconfig
br-ex: inet 172.24.4.1 netmask 255.255.255.0 broadcast 0.0.0.0
eno1: inet 222.XXX.XXX.XXX netmask 255.255.255.128 broadcast 222.XXX.XXX.XXX
virbr0: inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
现在我在映像 cirros 上创建了一个 VM 实例。在我的 OpenStack 仪表板上,我创建了一个 vxlan 类型的私有网络 demo-net,它有一个子网“demo-subnet”,具有 CIDR 10.56.1.0/24 和网关 10.56.1.1。 DHCP 选项已打开。
同时,Devstack 已经创建了一个公共网络,其中包含 CIDR 172.24.4.0/24(绑定到 br-ex)和网关 172.24.4.1。
一个路由器连接演示网公共网。
我在公共网络池中为这个实例分配了一个浮动IP 172.24.4.124。我可以在这台机器上ping这个IP,反之亦然。但问题是,当我在另一台机器上 ping 172.24.4.124 时,它失败了。我希望访问宿主机外的虚拟机实例,应该怎么解决
任何帮助将不胜感激!谢谢。

解决方法

默认情况下,Devstack 创建一个隔离的“外部”网络,它称为 public。您只能从 Devstack 主机连接到此网络以及连接到它的所有虚拟网络。您可以尝试在 Devstack 主机上配置端口转发(iptables 命令),但真正的解决方案如下。

您需要配置 Devstack 使其使用您的外部网络 222.XXX.XXX.XXX。这样做的方式记录在 https://docs.openstack.org/devstack/latest/networking.html#shared-guest-interface(假设您的 Devstack 主机有一个 NIC eno1)。在您的情况下,您需要将其放在 local.conf 中:

PUBLIC_INTERFACE=eno1
HOST_IP=222.x.x.x
FLOATING_RANGE=222.x.y.z/PREFIX
PUBLIC_NETWORK_GATEWAY=your router,probably 222.something
Q_FLOATING_ALLOCATION_POOL=start=222.a.b.c,end=222.d.e.f

FLOATING_RANGE 是 eno1 连接到的子网的 CIDR,而 PREFIX 是 eno1 使用的前缀。 Q_FLOATING_ALLOCATION_POOL 是 222.x.x.x 网络中要用于浮动 IP 的 IP 地址范围。

您将不得不重新创建一个 Devstack(虽然可以更改当前云的配置,但我不知道如何更改)。在您执行此操作之前,我还强烈建议您重新安装 Ubuntu,以确保不会保留当前设置中不需要的配置。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。