本文繼續(xù)介紹在將Openstack多網(wǎng)絡(luò)節(jié)點(diǎn)部署時的網(wǎng)絡(luò)拓?fù)洹?/p>
上一篇文章中在Opentack環(huán)境中創(chuàng)建了以下內(nèi)容:
- 租戶網(wǎng)絡(luò)test-net念搬,包含子網(wǎng):test-net-subnet乙埃,并啟用了dhcp。
- 外部網(wǎng)絡(luò)external-net虑灰,包含子網(wǎng):external-net-subnet。
- 虛機(jī)實(shí)例test-vm1和test-vm2痹兜,并接入網(wǎng)絡(luò)test-net穆咐。
- 路由器router01, 接入了兩個子網(wǎng)test-net-subnet和external-net-subnet。
1. 增加網(wǎng)絡(luò)節(jié)點(diǎn)
參考《使用vagrant和virtualbox搭建openstack集群》添加一個網(wǎng)絡(luò)節(jié)點(diǎn)。
增加網(wǎng)絡(luò)節(jié)點(diǎn)后对湃,3個節(jié)點(diǎn)的br-tun網(wǎng)橋拓?fù)淙缦拢?/p>
# ovs-vsctl show
...
Bridge br-tun
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
Port "vxlan-c0a83810"
Interface "vxlan-c0a83810"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="192.168.56.15", out_key=flow, remote_ip="192.168.56.16"}
Port "vxlan-c0a83811"
Interface "vxlan-c0a83811"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="192.168.56.15", out_key=flow, remote_ip="192.168.56.17"}
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
...
# ovs-vsctl show
...
Bridge br-tun
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
Port "vxlan-c0a83811"
Interface "vxlan-c0a83811"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="192.168.56.16", out_key=flow, remote_ip="192.168.56.17"}
Port "vxlan-c0a8380f"
Interface "vxlan-c0a8380f"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="192.168.56.16", out_key=flow, remote_ip="192.168.56.15"}
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
...
# ovs-vsctl show
...
Bridge br-tun
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
Port "vxlan-c0a8380f"
Interface "vxlan-c0a8380f"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="192.168.56.17", out_key=flow, remote_ip="192.168.56.15"}
Port "vxlan-c0a83810"
Interface "vxlan-c0a83810"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="192.168.56.17", out_key=flow, remote_ip="192.168.56.16"}
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
...
上述結(jié)果顯示崖叫,3個節(jié)點(diǎn)的VTEP兩兩間建立了vxlan隧道。
2. 增加租戶網(wǎng)絡(luò)
Step 1 按照之前的方法添加一個租戶網(wǎng)絡(luò)
參數(shù)如下:
- Network Name:test-net2
- Subnet Name:test-net2-subnet
- Network Address:172.16.3.0/24
- Gateway IP:172.16.3.1
- Enable DHCP: true
可以預(yù)期拍柒,添加了這個租戶網(wǎng)絡(luò)后心傀,系統(tǒng)會創(chuàng)建一個dhcp agent,分布在兩個網(wǎng)絡(luò)節(jié)點(diǎn)上檢查一下拆讯,發(fā)現(xiàn)這個dhcp aent被創(chuàng)建在了新創(chuàng)建的網(wǎng)絡(luò)節(jié)點(diǎn)os-net1上脂男,并被分配了IP 172.16.3.2
[root@os-net1 ~]# ovs-vsctl show
...
Bridge br-int
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
Port "tapc03e248f-c4"
tag: 1
Interface "tapc03e248f-c4"
type: internal
Port patch-tun
Interface patch-tun
type: patch
options: {peer=patch-int}
Port int-br-ex
Interface int-br-ex
type: patch
options: {peer=phy-br-ex}
...
[root@os-net1 ~]# ip netns
qdhcp-641294ba-9d48-4181-85a4-6a86d4c8cb0d
[root@os-net1 ~]# ip netns exec qdhcp-641294ba-9d48-4181-85a4-6a86d4c8cb0d ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
9: tapc03e248f-c4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN qlen 1000
link/ether fa:16:3e:76:86:13 brd ff:ff:ff:ff:ff:ff
inet 172.16.3.2/24 brd 172.16.3.255 scope global tapc03e248f-c4
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe76:8613/64 scope link
valid_lft forever preferred_lft forever
Step 2:將test-vm2移到新網(wǎng)絡(luò)test-net2上來
在test-vm2實(shí)例上先detach原有網(wǎng)絡(luò)的interface,再attach新網(wǎng)絡(luò)的Interface往果,然后重啟實(shí)例使之生效疆液。
菜單路徑:Project -> Compute -> Instances -> "test-vm2" -> Detach/Attach Interface
接入新網(wǎng)絡(luò)后,test-vm2可以訪問同一網(wǎng)絡(luò)內(nèi)的dhcp服務(wù)172.16.3.2并獲取到IP陕贮,但是無法訪問test-net中的實(shí)例test-vm1堕油,也無法訪問外網(wǎng),這是因為test-net肮之,test-net2和external-net在二層網(wǎng)絡(luò)上都是隔離的掉缺,必須接入router才能將其連通。
Step 3:將新創(chuàng)建的網(wǎng)絡(luò)加入router01
菜單路徑:Project -> Network -> Routers -> "router01" -> Interfaces -> Add Interface
加入后戈擒,test-vm2就可以訪問test-vm1和外網(wǎng)了眶明。
$ ping 172.16.2.11
PING 172.16.2.11 (172.16.2.11): 56 data bytes
64 bytes from 172.16.2.11: seq=0 ttl=63 time=34.903 ms
?
--- 172.16.2.11 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 34.903/34.903/34.903 ms
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=2 ttl=36 time=126.277 ms
?
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 1 packets received, 66% packet loss
round-trip min/avg/max = 126.277/126.277/126.277 ms
可以看到,在Underlay網(wǎng)絡(luò)之上筐高,建立了兩個Overlay的租戶網(wǎng)絡(luò)搜囱,連通了3臺宿主機(jī)上的5個通信實(shí)體。
- test-vm1柑土,宿主機(jī):os-ctl1蜀肘。
- test-vm2,宿主機(jī):os-cpu1稽屏。
- test-net DHCP Agent扮宠,宿主機(jī):os-ctl1。
- test-net2 DHCP Agent狐榔,宿主機(jī):os-net1坛增。
- router01,宿主機(jī):os-ctl1薄腻。
- 外部網(wǎng)關(guān) 10.0.2.2
兩個租戶網(wǎng)絡(luò)在二層通過VXLAN ID隔離收捣,VXLAN ID在創(chuàng)建網(wǎng)絡(luò)的時候自動分配,VXLAN ID在openstack中被抽象為Segment ID庵楷,因為除了VXLAN這種網(wǎng)絡(luò)隔離技術(shù)坏晦,openstack還支持VLAN和GRE等其他技術(shù)
我們創(chuàng)建的兩個網(wǎng)絡(luò)詳細(xì)信息如下:
網(wǎng)絡(luò)拓?fù)淙缦拢?/p>
可以看到,因為上圖中包括了物理和虛擬的所有實(shí)體,變得非常復(fù)雜昆婿。幸運(yùn)的是球碉,到了現(xiàn)在我們已經(jīng)對虛擬網(wǎng)絡(luò)的底層物理實(shí)現(xiàn)機(jī)制非常了解了,如果把上圖簡化一下仓蛆,只將對普通租戶可見的虛擬網(wǎng)絡(luò)畫出來睁冬,其實(shí)是一個非常簡單的拓?fù)洹?/p>
3. 增加新的外部網(wǎng)絡(luò)
實(shí)際上,os-net1和os-ctl一樣看疙,也有用于訪問外部網(wǎng)絡(luò)的網(wǎng)口eth0和網(wǎng)橋br-ex豆拨,因此os-ctl1同樣可以為openstack提供外網(wǎng)訪問。但是由于extnet這個物理網(wǎng)絡(luò)的標(biāo)識已經(jīng)被os-ctl1使用能庆,我們可以另外定義一個物理網(wǎng)絡(luò)標(biāo)識施禾,如extnet2。
Step 1:修改neutron配置文件
# vi /etc/neutron/plugins/ml2/openvswitch_agent.ini
將
bridge_mappings=extnet:br-ex
改為:
bridge_mappings=extnet2:br-ex
重啟os-net1使配置生效搁胆。
Step 2:創(chuàng)建新的外部網(wǎng)絡(luò)external-net2
參數(shù)為:
- Name:external-net2
- Subnet Name: external-net2-subnet
其余參數(shù)和external-net一樣弥搞,因為VirtualBox為兩臺宿主機(jī)os-ctl1和os-net1提供的外網(wǎng)環(huán)境時一樣的。
Step 3:創(chuàng)建新的路由器router02
創(chuàng)建router02后渠旁,將external-net2設(shè)為其的網(wǎng)關(guān)攀例,將test-net2網(wǎng)絡(luò)接入router02。
這樣在整個集群內(nèi)就建起了兩個完全獨(dú)立的網(wǎng)絡(luò):
- test-vm1, test-net, router01, external-net(extnet)
- test-vm2, test-net2, router02, external-net2(extnet2)
兩個網(wǎng)絡(luò)互不相通顾腊,但是均可以訪問外網(wǎng)粤铭。
可以在兩個網(wǎng)絡(luò)節(jié)點(diǎn)上使用tcpdump命令監(jiān)控網(wǎng)絡(luò)流量,然后分別在test-vm1和test-vm2中運(yùn)行ping 8.8.8.8指令杂靶,可以看到test-vm1的數(shù)據(jù)包經(jīng)過了os-ctl1梆惯,而test-vm2的數(shù)據(jù)包經(jīng)過了os-net1。
虛擬網(wǎng)絡(luò)拓?fù)鋱D如下:
4. 網(wǎng)絡(luò)Agent的調(diào)度
網(wǎng)絡(luò)節(jié)點(diǎn)上運(yùn)行著提供各種網(wǎng)絡(luò)服務(wù)的Agent吗垮,目前涉及到的Agent包括:
- DHCP agent垛吗,用于提供DHCP服務(wù)。
- l3 agent(即router)抱既,用于提供三層的路由服務(wù)职烧。
這些agent在網(wǎng)絡(luò)節(jié)點(diǎn)上體現(xiàn)為一個專有命名空間中的進(jìn)程扁誓,當(dāng)集群中有多個網(wǎng)絡(luò)節(jié)點(diǎn)時防泵,openstack同樣會根據(jù)節(jié)點(diǎn)的負(fù)荷對這些進(jìn)程進(jìn)行調(diào)度,因此蝗敢,這些agent啟動在哪個節(jié)點(diǎn)上取決于他們被創(chuàng)建的時候所有網(wǎng)絡(luò)節(jié)點(diǎn)的狀態(tài)捷泞。
由于這些agent在每次集群啟動的時候都會重新創(chuàng)建,而在Vagrant實(shí)驗環(huán)境每臺宿主機(jī)將按Vagrantfile定義順序啟動寿谴,因此可以觀察到以下現(xiàn)象:
- 集群啟動后所有agent都在os-ctl1運(yùn)行(因為此時os-net1還未啟動)锁右,
- 啟動后新建的網(wǎng)絡(luò)(啟用dhcp就會創(chuàng)建新的dhcp agent)或者router,對應(yīng)的agent就很大可能會運(yùn)行在os-net1上(因為此時os-net1沒有運(yùn)行任何agent,負(fù)荷會比較低)咏瑟。
- 調(diào)度結(jié)果還取決于宿主機(jī)的配置拂到,實(shí)驗中也觀察到了新創(chuàng)建的agent仍然運(yùn)行在os-ctl1上的情景(因為os-ctl1的配置比os-net1要高)。