多节点时,网络控制器与计算节点分别在不同主机,普通部署方式下(不是multi_host),只有nova-network控制网络,而它仅仅在控制节点运行。因此,所有计算节点的实例都需要通过控制节点来与外网通信。
可以通过multi_host等高可用性部署方式改变这个单点故障问题。
收起这里分几个场景了,简单描述下(采用ovs-vlan模式):
场景一: 相同物理机上的虚拟机互相访问
vm1和vm2在同一个宿主机上同一个项目下同一个子网时,两个虚机之间的流量是不需要经过交换机的,直接通过ovs的br-int桥就可以做转发了。
场景二:不同物理机上的虚拟机互相访问
vm1和vm2在同一个宿主机上同一个项目下同一个子网时,两个虚拟机之间的流量是需要通过物理交换机进行转发的
vm的流量首先经过tap网卡到qbr桥上,qbr桥是linux-bridge桥,曾经的ovs不支持安全组的实现所以openstack只能加一个qbr桥在上面通过iptables来实现安全组,(mitaka版本中已经没有了因为ovs已经可以通过openflow来实现了),通过veth口将br-int和qbr桥连接起来,流量到br-int上,br-int上有对应的ovs规则转发到br-eth0上,,br-eth0 中的 flow rules。从 patch port 进入的数据帧,将内部 local_id 修改为vlan_id,再从 eth0 端口发出。通过交换机到达另外一个计算机节点
eth0收到包后通过ovs规则将流量转到br-int,br-int将vlan_id转换为对应的local_id,然后通过veth口发给qbr,通过qbr后转vm的tap的网卡经过内核转发到vm的网卡。
场景三:访问外部网络
需要经过网络节点,由网络节点的qroute做三层转发,也可以直接使用物理交换机。不同子网的通信,虚机会将流量丢给默认网关然后到达网络节点的qrouter通过qrouter的三层转发通讯。