某在线的Openstack环境,突发虚拟机不能上网的情况。由于是一个小型的环境,虚拟网络和控制网络并没有分开,整个网络的DHCP由Openstack的DHCP Agent提供。控制网络的操作一切正常。虚拟网络使用Linux系统内置的网桥。
- 在虚拟机的宿主机上使用tcpdump命令能够监测到DHCP消息发出,但是没有DHCP请求的回应消息。
- 在网络节点DHCP Agent上对应的物理网卡上能检测到虚拟机的DHCP请求和回应消息。
基于以上两点,问题应该是交换机没有转发DHCP的回应消息。登陆到交换机后,通过事件命令(system event),发现虚拟网络的接口上有报警事件,显示该端口处于安全保护状态,端口允许的MAC地址的数量的上限为1。至此,问题基本确认。将端口安全保护关掉后,虚拟机能够正常上网。也可以将端口允许的MAC地址数量上限提高,来解决该问题。
在云系统中,将控制网络和存储网络与虚拟网络物理隔离。虚拟网络可以使用功能较少,傻瓜式的两层交换机,能有效避免不必要的网络故障。至于安全方面,Openstack Neutron组件已经做了很好的防护,至于更高级的病毒检测、IPS等则需要通过专门的防火墙完成。