很久之前曾经翻来覆去对nova的官方文档看了很多次,但是很明显因为太抽象而导致看得不是特别明白。今天重新回去看了一次,整理成下面的理解:
Flat:When you choose Flat networking, Nova does not manage networking at all. Instead, IP addresses are injected into the instance via the file system (or passed in via a guest agent).
这里的话意思是Nova对网络不做任何的管理..很明显这句话对我来说是相当疑惑.我一直都觉得Nova还是有干活的..
Flat模式明显是在虚拟机启动的时候就把ip地址从--fixed_range里面找一个fixed_ip通过文件系统的形式注入(需要把--flat_injected项设置为True)。除此之外,还需要用户手动配置网桥(默认为:br100),/etc/network/interface中配置。当然,最后的公网地址的分配以及路由还是得走nova-network。公网地址分配就是做了一个Nat转换。
FlatDHCP:这个模式比Flat多了个DHCP,也就是虚拟机启动的时候不直接注入内网IP,而是让虚拟机启动后自己向dhcp服务器(dnsmasq)发dhcp包,dhcp就给虚拟机ip地址。其实感觉作用是跟Flat差不多了,好处就是可以在instance终结的时候可以回收ip地址。另外比较好的一点是可以帮用户做网桥(使用--flat_interface)。其他的特点例如公网分配的话和Flat都是一样的。
问题:
1.计算节点能够和Internet通信。结果我发现使用了FlatDHCP模式之后虚拟机(只有私有IP地址10.0.0.0/8)可以借着计算节点和Internet通信。
这个原因是因为Nova做了snat的缘故(设置了--routing_source_ip项)。SNAT all -- 10.0.0.0/8 0.0.0.0/0 to:X.X.X.X,虚拟机就把计算节点当做网关了。
2.其他计算节点怎么ping其他节点上的虚拟机?只有controller节点的才可以ping其他计算节点的虚拟机?这个问题我将会求证。
3.只有单网卡(eth0)的时候怎么配多节点?
FlatDHCP模式下:
--flat_interface=eth0
--flat_network_bridge=br100
--public_interface=br100
这个是我从Devstack脚本安装的时候看到的,需要验证。
因为只有一张网卡的缘故,在eth0上做了网桥br100。那么这样的话eth0就不能再有ip地址了。那样CC有br100的10.0.0.1的ip地址,又怎么能有另外的ip地址192.168.1.1(假设内网网段是192.168.1.0/24)?--public_interface=br100是怎么实现的?这个需要验证。因为我开始以为是网桥上多IP地址...br100=10.0.0.1 br100:0=192.168.1.1。看来应该没有那么简单的实现..