一般搭建成功了opentack後,都會按照文檔的這樣建立網絡
Scenario 1: one tenant, two networks, one router
Scenario 2: two tenants, two networks, two routers
然而neutron号稱軟體定義網絡,可否建立更複雜的拓撲圖

我建立了上面的三個網絡,每個網絡都運作一個主機,網絡1和網絡2,并不直接相連,但是通過網絡2相連。
對于主機net1,由于網絡隻有一個路由器,是以gateway隻能是它
root@net1:/home/ubuntu# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether fa:16:3e:f2:68:34 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.2/24 brd 10.0.0.255 scope global eth0
inet6 fe80::f816:3eff:fef2:6834/64 scope link
root@net1:/home/ubuntu# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
對于主機net3,所在的網絡業隻有一個路由器,是以gateway也隻能是它
root@net3:/home/ubuntu# ip addr
link/ether fa:16:3e:73:2b:1f brd ff:ff:ff:ff:ff:ff
inet 10.0.2.2/24 brd 10.0.2.255 scope global eth0
inet6 fe80::f816:3eff:fe73:2b1f/64 scope link
root@net3:/home/ubuntu# route -n
0.0.0.0 10.0.2.1 0.0.0.0 UG 100 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
比較糾結的是主機net2,它的網絡上有兩個路由器,預設gateway隻能是一個,那它如何才能ping通兩面的主機呢,必須手動添加路由器。
root@net2:/home/ubuntu# ip addr
link/ether fa:16:3e:3c:65:ad brd ff:ff:ff:ff:ff:ff
inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0
inet6 fe80::f816:3eff:fe3c:65ad/64 scope link
root@net2:/home/ubuntu# route -n
0.0.0.0 10.0.1.1 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 10.0.1.1 255.255.255.0 UG 0 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.2.0 10.0.1.2 255.255.255.0 UG 0 0 0 eth0
到不同的網絡,gateway不一樣。
最後的問題是,net1和net3之間怎麼通信,如果neutron建立的路由器支援動态路由就好了,一般通過routed或者gated,相鄰的路由器router1和router2可以互相同步路由表,這樣router1才可能知道,在router2的另一端,還有一個網絡,反之亦然。
https://blueprints.launchpad.net/neutron/+spec/bgp-dynamic-routing
然而這個好像還沒實作,是以要想net1和net3之間通信,需要手動添加路由表到路由器
我們修改router1的路由表
root@escto-bj-hp-z620:~# ip netns exec qrouter-8fd947fc-2b5b-40a3-b16e-72aabb001f2d route -n
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-bbbc67c3-81
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-10b0d153-4c
10.0.2.0 10.0.1.2 255.255.255.0 UG 0 0 0 qr-10b0d153-4c
再來修改router2的路由表
root@escto-bj-hp-z620:~# ip netns exec qrouter-d2c831c9-44ff-43dd-8c9d-2dc42370c2fd route -n
10.0.0.0 10.0.1.1 255.255.255.0 UG 0 0 0 qr-ad73f294-6d
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-ad73f294-6d
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-866838bd-d7
這樣互相就ping通了
通過API建立路由表
https://blueprints.launchpad.net/neutron/+spec/quantum-l3-routes