无法在 devstack 节点之外访问 DevStack 实例

DevStack instances can't be reached outside devstack node

关注官方 documentation, I'm trying to deploy a Devstack on an Ubuntu 18.04 Server OS on a virtual machine. The devstack node has only one network card (ens160) connected to a network with the following CIDR 10.20.30.40/24. I need my instances accessible publicly on this network (from 10.20.30.240 to 10.20.30.250). So again the following the official floating-IP documentation 我设法形成了这个 local.conf 文件:

[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

PUBLIC_INTERFACE=ens160
HOST_IP=10.20.30.40
FLOATING_RANGE=10.20.30.40/24
PUBLIC_NETWORK_GATEWAY=10.20.30.1
Q_FLOATING_ALLOCATION_POOL=start=10.20.30.240,end=10.20.30.250

这将导致使用全局 IP 地址 10.20.30.40 和辅助 IP 地址 10.20.30.1 形成 br-ex(网关已存在于网络上;不是 PUBLIC_NETWORK_GATEWAY 参数谈论网络上的真实网关?)

现在,在成功部署后,禁用 ufw(根据 this),创建一个带有适当安全组的 cirros 实例,用于 ping 和 ssh 并附加一个浮动 IP,我只能在我的devstack节点上访问我的实例,不能在整个网络上访问!同样在 cirros 实例中,我无法访问外部世界(即使我可以从 devstack 节点访问外部世界)

后来看了this视频,我把local.conf文件修改成这样:

[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

FLAT_INTERFACE=ens160
HOST_IP=10.20.30.40
FLOATING_RANGE=10.20.30.240/28

成功部署和实例设置后,我仍然只能在 devstack 节点上访问我的实例,而不能从外部访问!但好消息是我可以从cirros实例内部访问外部世界.

如有任何帮助,我们将不胜感激!


更新

在第二个配置中,在 ping 实例浮动 IP 时检查 tcpdump 上的数据包,我观察到实例浮动 IP 的 who-has 广播数据包到达 devstack 节点网络路由器;然而,没有生成 is-at 回复,因此 ICMP 数据包不会路由到 devstack 节点和实例。

所以,通过一些技巧,我创建了响应,之后一切正常;但这当然不是解决方案,我认为 devstack 应该开箱即用,无需任何调整,这可能是因为 devstack 配置错误。

经过 5 天的测试、研究和讲座,我发现了这个:Openstack VM is not accessible on LAN

devstack 节点上输入以下命令:

echo 1 > /proc/sys/net/ipv4/conf/ens160/proxy_arp
iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE

那就行了!

干杯!