1. 整体架构概述
- Neutron组件支持OVS、Linux bridge等多种mechanism driver驱动方式,本文主要描述了采用Linux bridge的实现方式。
- Neutron组件支持vxlan、vlan、flat等多种网络模型,本文主要描述了网络模型为vlan时的租户网络。
- Br-int网桥为集成网桥,该网桥主要负责打通虚机之间的网络,即用于东西向访问。
- Br-ext网桥为外部网桥,该网桥主要负责打通虚机和外部网络,即用于南北向访问。
- 网络命名空间Net namespace,主要是为了隔离网络设备和协议栈的。
2. 详细的实现方式
租户网络172.16.1.0/24, 虚机ip地址172.16.1.5; 模拟外网网络10.1.1.0/24, 浮动ip地址为10.1.1.8
(1) eth1网卡为计算内网网卡,该物理网卡主要是打通不同宿主机上虚机之间通信,eth1网卡可以被划分为多个vlan子接口,每一个租户网络占用一个vlan子接口,例如100子接口。
(2) 创建br-int网桥。在br-int网桥上添加100子接口。
(3) 创建虚机。创建虚机时会在br-int网桥上添加一个tap虚拟网卡,此时虚机的流量可以到达br-int网桥上。
(4) 创建vrouter。此时会创建一个网络命令空间。
(5) 把vrouter和虚机所在的子网进行绑定。该操作会创建一对veth pair,该对虚拟网卡是用来连接网络命名空间和br-int网桥,其中veth1会被添加到br-int网桥上,veth2添加到网络命名空间中,并设置内网网关16.1.1。此时虚机的流量可以到达网络命名空间中。
(6) 创建br-ext网桥,并把eth2物理网卡添加到br-ext网桥上。
(7) vrouter和br-ext关联。该操作会创建一对veth pair,该对虚拟网卡是用来连接网络命名空间和br-ext网桥,其中veth3会被添加到网络命名空间中,veth4会被添加到br-ext网桥上。
(8) 虚机和浮动IP地址绑定。该操作会在网络命名空间中的veth3的虚拟网卡上设置浮动IP地址,并在网络命名空间中nat表中下发iptables规则。
-d 10.1.1.8/32 –j dnat --to-destination 172.16.1.5
-s 172.16.1.5/32 –j snat --to-source 10.1.1.8
当vrouter接收到从外网发出的包,如果目的地址是浮动IP 10.1.1.8,会将目的地址修改为虚机的IP地址172.16.1.5。当虚机发送的数据包到达vrouter时,虚机的源地址172.16.1.5会被修改为10.1.1.8。