按照官方文档,我正在尝试在虚拟机Devstack
上的操作系统上部署一个。Ubuntu 18.04 Server
devstack 节点只有一个网卡 (ens160) 连接到具有以下 CIDR 的网络10.20.30.40/24
。我需要在这个网络上公开访问我的实例(从 10.20.30.240 到 10.20.30.250)。因此,再次遵循官方浮动 IP文档,我设法形成了这个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
这将导致br-ex
与全局IP地址10.20.30.40
和辅助IP地址形成一个10.20.30.1
(网关已经存在于网络上;参数不是PUBLIC_NETWORK_GATEWAY
在谈论网络上的真实网关吗?)
现在,在成功部署后,禁用ufw
(根据this),创建一个具有适当安全组的 cirros 实例,用于 ping 和 ssh 并附加一个浮动 IP,我只能在我的 devstack 节点上访问我的实例,而不是在整个网络上!同样从 cirros 实例中,我无法访问外部世界(即使我可以从 devstack 节点访问外部世界)
之后,观看此视频,我将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 实例中访问外部世界。
任何帮助,将不胜感激!
更新
在第二个配置中,tcpdump
在 ping 实例浮动 IP 时检查数据包,我观察到实例浮动 IP 的who-has
广播数据包从网络路由器到达 devstack 节点;但是没有is-at
生成回复,因此 ICMP 数据包不会路由到 devstack 节点和实例。
因此,通过一些技巧,我创建了响应,之后一切正常;但当然这不是解决方案,我认为 devstack 应该开箱即用,无需任何调整,这可能是因为 devstack 配置错误。