SDN控制器之OVN實驗二:使用OVN配置路由器
概覽
基於我上一篇文章中的實驗環境,我現在將第三層網路基礎功能新增到OVN中。最終呈現出來的將是由邏輯路由器連線的一對邏輯交換機。另外,路由器將被配置為通過OVN中內建的DHCP服務來提供IP地址。
重構邏輯元件
由於設定開始變得更加複雜,我們將重新構建網路架構。新的邏輯網路拓撲如下:
-
2臺邏輯交換機 switches: "dmz"和"inside"
-
邏輯路由器"tenant1",它連線著兩個邏輯交換機
-
IP網路"dmz" :172.16.255.128/26
-
IP網路"inside":172.16.255.192/26
-
每個邏輯交換機上各有一對"虛擬機器"
新的邏輯網路如下圖所示
理解路由
在本次實驗中,我們將建立一個OVN路由器,即"分散式邏輯路由器"(DLR)。 DLR不同於傳統路由器,因為它不是實際的裝置,而是邏輯結構(與邏輯交換機不同)。 DLR僅作為OVS中的一個功能而存在:換句話說,每個OVS例項能夠在overlay網路轉發流量之前先在本地模擬出一個三層路由器。
建立邏輯交換機和邏輯路由器
在ubuntu1上定義邏輯交換機:
-
ovn-nbctl ls-add inside
-
ovn-nbctl ls-add dmz
-
新增邏輯路由器及其關聯的路由器和交換機埠:
-
# 新增路由器tenant1
-
ovn-nbctl lr-add tenant1
-
# 為路由器tenant1建立一個連線到dmz交換機的埠
-
ovn-nbctl lrp-add tenant1 tenant1-dmz 02:ac:10:ff:01:29 172.16.255.129/26
-
# 為dmz交換機建立用於連線到路由器tenant1的埠dmz-tenant1
-
ovn-nbctl lsp-add dmz dmz-tenant1
-
ovn-nbctl lsp-set-type dmz-tenant1 router
-
ovn-nbctl lsp-set-addresses dmz-tenant1 02:ac:10:ff:01:29
-
ovn-nbctl lsp-set-options dmz-tenant1 router-port=tenant1-dmz
-
#為路由器tenant1建立一個連線到inside交換機的埠
-
ovn-nbctl lrp-add tenant1 tenant1-inside 02:ac:10:ff:01:93 172.16.255.193/26
-
#為inside交換機建立用於連線到路由器tenant1的埠inside-tenant1
-
ovn-nbctl lsp-add inside inside-tenant1
-
ovn-nbctl lsp-set-type inside-tenant1 router
-
ovn-nbctl lsp-set-addresses inside-tenant1 02:ac:10:ff:01:93
-
ovn-nbctl lsp-set-options inside-tenant1 router-port=tenant1-inside
-
ovn-nbctl show
新增 DHCP
OVN中的DHCP與大多數的解決方案有點不同。大多數人的想法是管理員將:
1.給定子網定義一組DHCP選項
2.建立邏輯交換機埠,給該埠定義MAC地址和IP地址
3.為該埠分配DHCP選項。
4.將埠安全設定為僅允許分配的地址
下面,我們將要給4臺虛擬機器配置邏輯埠。在ubuntu1上:
-
ovn-nbctl lsp-add dmz dmz-vm1
-
ovn-nbctl lsp-set-addresses dmz-vm1 "02:ac:10:ff:01:30 172.16.255.130"
-
ovn-nbctl lsp-set-port-security dmz-vm1 "02:ac:10:ff:01:30 172.16.255.130"
-
ovn-nbctl lsp-add dmz dmz-vm2
-
ovn-nbctl lsp-set-addresses dmz-vm2 "02:ac:10:ff:01:31 172.16.255.131"
-
ovn-nbctl lsp-set-port-security dmz-vm2 "02:ac:10:ff:01:31 172.16.255.131"
-
ovn-nbctl lsp-add inside inside-vm3
-
ovn-nbctl lsp-set-addresses inside-vm3 "02:ac:10:ff:01:94 172.16.255.194"
-
ovn-nbctl lsp-set-port-security inside-vm3 "02:ac:10:ff:01:94 172.16.255.194"
-
ovn-nbctl lsp-add inside inside-vm4
-
ovn-nbctl lsp-set-addresses inside-vm4 "02:ac:10:ff:01:95 172.16.255.195"
-
ovn-nbctl lsp-set-port-security inside-vm4 "02:ac:10:ff:01:95 172.16.255.195"
-
ovn-nbctl show
您可能已經注意到,與上一個實驗不同,現在通過一條命令就能定義mac和IP地址。 IP地址定義實現了我們的2個目的:
1.它通過允許OVN在本地應答其知道的IP / MAC的ARP請求來實現ARP抑制。
2.從哪個埠收到到DHCP請求,就會從哪個介面分配IP地址。通過這種方式來實現DHCP。
接下來,我們需要定義DHCP選項並將它們分配給邏輯埠。這裡的過程將與我們以前看到的有點不同,因為我們將直接與OVN NB資料庫進行互動。用這種方式的原因是需要捕獲我們建立的DHCP_Options條目的UUID,以便我們可以將UUID分配給交換機埠。為此,我們將把捕獲的ovn-nbctl命令的結果輸出到一對bash變數中。
-
dmzDhcp="$(ovn-nbctl create DHCP_Options cidr=172.16.255.128/26 \
-
options="\"server_id\"=\"172.16.255.129\" \"server_mac\"=\"02:ac:10:ff:01:29\" \
-
\"lease_time\"=\"3600\" \"router\"=\"172.16.255.129\"")"
-
echo $dmzDhcp
-
insideDhcp="$(ovn-nbctl create DHCP_Options cidr=172.16.255.192/26 \
-
options="\"server_id\"=\"172.16.255.193\" \"server_mac\"=\"02:ac:10:ff:01:93\" \
-
\"lease_time\"=\"3600\" \"router\"=\"172.16.255.193\"")"
-
echo $insideDhcp
-
ovn-nbctl dhcp-options-list
如果您想了解有關OVN NB資料庫的更多資訊,請參閱ovn-nb的手冊(譯者注:http://openvswitch.org/support/dist-docs/ovn-nb.5.pdf)。
現在,我們將使用儲存在變數中的UUID為我們的邏輯交換機埠分配DHCP_Options。
-
ovn-nbctl lsp-set-dhcpv4-options dmz-vm1 $dmzDhcp
-
ovn-nbctl lsp-get-dhcpv4-options dmz-vm1
-
ovn-nbctl lsp-set-dhcpv4-options dmz-vm2 $dmzDhcp
-
ovn-nbctl lsp-get-dhcpv4-options dmz-vm2
-
ovn-nbctl lsp-set-dhcpv4-options inside-vm3 $insideDhcp
-
ovn-nbctl lsp-get-dhcpv4-options inside-vm3
-
ovn-nbctl lsp-set-dhcpv4-options inside-vm4 $insideDhcp
-
ovn-nbctl lsp-get-dhcpv4-options inside-vm4
配置虛擬機器
與上一個實驗一樣,我們將使用OVS內部埠和網路名稱空間構建的"偽虛擬機器"。現在的區別是,我們將使用DHCP進行地址分配。
接下來我們將設定虛擬機器。
ubuntu2:
-
ip netns add vm1
-
ovs-vsctl add-port br-int vm1 -- set interface vm1 type=internal
-
ip link set vm1 address 02:ac:10:ff:01:30
-
ip link set vm1 netns vm1
-
ovs-vsctl set Interface vm1 external_ids:iface-id=dmz-vm1
-
ip netns exec vm1 dhclient vm1
-
ip netns exec vm1 ip addr show vm1
-
ip netns exec vm1 ip route show
-
ip netns add vm3
-
ovs-vsctl add-port br-int vm3 -- set interface vm3 type=internal
-
ip link set vm3 address 02:ac:10:ff:01:94
-
ip link set vm3 netns vm3
-
ovs-vsctl set Interface vm3 external_ids:iface-id=inside-vm3
-
ip netns exec vm3 dhclient vm3
-
ip netns exec vm3 ip addr show vm3
-
ip netns exec vm3 ip route show
-
On ubuntu3:
-
ip netns add vm2
-
ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal
-
ip link set vm2 address 02:ac:10:ff:01:31
-
ip link set vm2 netns vm2
-
ovs-vsctl set Interface vm2 external_ids:iface-id=dmz-vm2
-
ip netns exec vm2 dhclient vm2
-
ip netns exec vm2 ip addr show vm2
-
ip netns exec vm2 ip route show
-
ip netns add vm4
-
ovs-vsctl add-port br-int vm4 -- set interface vm4 type=internal
-
ip link set vm4 address 02:ac:10:ff:01:95
-
ip link set vm4 netns vm4
-
ovs-vsctl set Interface vm4 external_ids:iface-id=inside-vm4
-
ip netns exec vm4 dhclient vm4
-
ip netns exec vm4 ip addr show vm4
-
ip netns exec vm4 ip route show
測試網路連通性
在ubuntu2上,從vm1測試網路連通性:
-
# ping vm1的預設閘道器
-
[email protected]:~# ip netns exec vm1 ping 172.16.255.129
-
PING 172.16.255.129 (172.16.255.129) 56(84) bytes of data.
-
64 bytes from 172.16.255.129: icmp_seq=1 ttl=254 time=0.689 ms
-
64 bytes from 172.16.255.129: icmp_seq=2 ttl=254 time=0.393 ms
-
64 bytes from 172.16.255.129: icmp_seq=3 ttl=254 time=0.483 ms
-
# 從 overlay網路ping vm2(跨越整個 tenant1)
-
[email protected]:~# ip netns exec vm1 ping 172.16.255.131
-
PING 172.16.255.131 (172.16.255.131) 56(84) bytes of data.
-
64 bytes from 172.16.255.131: icmp_seq=1 ttl=64 time=2.16 ms
-
64 bytes from 172.16.255.131: icmp_seq=2 ttl=64 time=0.573 ms
-
64 bytes from 172.16.255.131: icmp_seq=3 ttl=64 time=0.446 ms
-
# 經過 router ping通 vm3(跨越整個 overlay網路)
-
[email protected]:~# ip netns exec vm1 ping 172.16.255.194
-
PING 172.16.255.194 (172.16.255.194) 56(84) bytes of data.
-
64 bytes from 172.16.255.194: icmp_seq=1 ttl=63 time=1.37 ms
-
64 bytes from 172.16.255.194: icmp_seq=2 ttl=63 time=0.077 ms
-
64 bytes from 172.16.255.194: icmp_seq=3 ttl=63 time=0.076 ms
-
#經過 router ping 通vm4(跨越整個 overlay網路)
-
[email protected]:~# ip netns exec vm1 ping 172.16.255.195
-
PING 172.16.255.195 (172.16.255.195) 56(84) bytes of data.
-
64 bytes from 172.16.255.195: icmp_seq=1 ttl=63 time=1.79 ms
-
64 bytes from 172.16.255.195: icmp_seq=2 ttl=63 time=0.605 ms
-
64 bytes from 172.16.255.195: icmp_seq=3 ttl=63 time=0.503 ms
結語
OVN使得第三層overlay網路易於部署和管理。 另外像DHCP的服務直接構建到系統中的方式,有助於減少構建有效的SDN解決方案所需的外部元件的數量。 在下一篇文章中,將討論如何將我們(當前隔離的)overlay網路連線到外部世界。
原文:https://blog.csdn.net/zhengmx100/article/details/58137383?utm_source=blogxgwz0