经过无数次的尝试,终于搭建好了完整的Openstack,本来VM可以获取到IP地址,但是等到我大功告成的时候,突然发现外部网络却不能ping进VM,我可是整整折腾了我几个通宵,这是哭啊。然而,皇天不负有心人,终于找到了一点头绪,我在此记下这一点,以免以后在遇到不知道怎么办。
首先我Openstack环境并没有问题,但是为什么ping不同VM呢,是因为我发现如下:
在网络节点上,执行ip netns
# ip netns
qdhcp-6e056e41-e48d-4119-b970-55ff7bae6f2d
qrouter-5670bd67-c4ae-45d1-b77c-deb21a33500b
然后我这样呢执行:
#ip netns exec qdhcp-6e056e41-e48d-4119-b970-55ff7bae6f2d ping 192.168.100.2 #这里的192.168.100.2是VM的IP地址
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
64 bytes from 192.168.100.2: icmp_req=1 ttl=64 time=13.5 ms
64 bytes from 192.168.100.2: icmp_req=2 ttl=64 time=0.682 ms
64 bytes from 192.168.100.2: icmp_req=3 ttl=64 time=0.662 ms
64 bytes from 192.168.100.2: icmp_req=4 ttl=64 time=0.515 ms
或者
# ip netns qrouter-5670bd67-c4ae-45d1-b77c-deb21a33500b ping 192.168.100.2
Command "qrouter-5670bd67-c4ae-45d1-b77c-deb21a33500b" is unknown, try "ip netns help".
root@network3:/home/ubuntu# ip netns exec qrouter-5670bd67-c4ae-45d1-b77c-deb21a33500b ping 192.168.100.3
PING 192.168.100.3 (192.168.100.3) 56(84) bytes of data.
64 bytes from 192.168.100.3: icmp_req=1 ttl=64 time=0.270 ms
64 bytes from 192.168.100.3: icmp_req=2 ttl=64 time=0.043 ms
^C
--- 192.168.100.3 ping statistics ---
这样看来,并不是外部网络ping不进虚拟机,而是缺少了外部网络进入虚拟机内部网络的路由,我估计是这部分路由没有设置这一路由规则,你也可以用route -n 查看一下有没有内部网络的路由。
为了方便起见,我在我使用的网关上添加了这一路由规则:
route add 192.168.100.0 255.255.255.0 192.168.0.201
linux系统添加:
ip route add 192.168.100.0/24 via 192.168.0.201
192.168.100.0/24是内部网络的地址,192.168.0.201是进入内部网络的跳转地址。这样我就可以畅通无阻的ping进虚拟机里面啦,bingo~!!!