1. 程式人生 > >SDN控制器之OVN實驗二:使用OVN配置路由器

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上定義邏輯交換機:

  1. ovn-nbctl ls-add inside

  2. ovn-nbctl ls-add dmz

  3. 新增邏輯路由器及其關聯的路由器和交換機埠:

  4. # 新增路由器tenant1

  5. ovn-nbctl lr-add tenant1

  6.  
  7. # 為路由器tenant1建立一個連線到dmz交換機的埠

  8. ovn-nbctl lrp-add tenant1 tenant1-dmz 02:ac:10:ff:01:29 172.16.255.129/26

  9.  
  10. # 為dmz交換機建立用於連線到路由器tenant1的埠dmz-tenant1

  11. ovn-nbctl lsp-add dmz dmz-tenant1

  12. ovn-nbctl lsp-set-type dmz-tenant1 router

  13. ovn-nbctl lsp-set-addresses dmz-tenant1 02:ac:10:ff:01:29

  14. ovn-nbctl lsp-set-options dmz-tenant1 router-port=tenant1-dmz

  15.  
  16. #為路由器tenant1建立一個連線到inside交換機的埠

  17. ovn-nbctl lrp-add tenant1 tenant1-inside 02:ac:10:ff:01:93 172.16.255.193/26

  18.  
  19. #為inside交換機建立用於連線到路由器tenant1的埠inside-tenant1

  20. ovn-nbctl lsp-add inside inside-tenant1

  21. ovn-nbctl lsp-set-type inside-tenant1 router

  22. ovn-nbctl lsp-set-addresses inside-tenant1 02:ac:10:ff:01:93

  23. ovn-nbctl lsp-set-options inside-tenant1 router-port=tenant1-inside

  24.  
  25. ovn-nbctl show

新增 DHCP

OVN中的DHCP與大多數的解決方案有點不同。大多數人的想法是管理員將:

1.給定子網定義一組DHCP選項

2.建立邏輯交換機埠,給該埠定義MAC地址和IP地址

3.為該埠分配DHCP選項。

4.將埠安全設定為僅允許分配的地址

下面,我們將要給4臺虛擬機器配置邏輯埠。在ubuntu1上:

  1. ovn-nbctl lsp-add dmz dmz-vm1

  2. ovn-nbctl lsp-set-addresses dmz-vm1 "02:ac:10:ff:01:30 172.16.255.130"

  3. ovn-nbctl lsp-set-port-security dmz-vm1 "02:ac:10:ff:01:30 172.16.255.130"

  4.  
  5. ovn-nbctl lsp-add dmz dmz-vm2

  6. ovn-nbctl lsp-set-addresses dmz-vm2 "02:ac:10:ff:01:31 172.16.255.131"

  7. ovn-nbctl lsp-set-port-security dmz-vm2 "02:ac:10:ff:01:31 172.16.255.131"

  8.  
  9. ovn-nbctl lsp-add inside inside-vm3

  10. ovn-nbctl lsp-set-addresses inside-vm3 "02:ac:10:ff:01:94 172.16.255.194"

  11. ovn-nbctl lsp-set-port-security inside-vm3 "02:ac:10:ff:01:94 172.16.255.194"

  12.  
  13. ovn-nbctl lsp-add inside inside-vm4

  14. ovn-nbctl lsp-set-addresses inside-vm4 "02:ac:10:ff:01:95 172.16.255.195"

  15. ovn-nbctl lsp-set-port-security inside-vm4 "02:ac:10:ff:01:95 172.16.255.195"

  16.  
  17. 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變數中。

  1. dmzDhcp="$(ovn-nbctl create DHCP_Options cidr=172.16.255.128/26 \

  2. options="\"server_id\"=\"172.16.255.129\" \"server_mac\"=\"02:ac:10:ff:01:29\" \

  3. \"lease_time\"=\"3600\" \"router\"=\"172.16.255.129\"")"

  4. echo $dmzDhcp

  5.  
  6. insideDhcp="$(ovn-nbctl create DHCP_Options cidr=172.16.255.192/26 \

  7. options="\"server_id\"=\"172.16.255.193\" \"server_mac\"=\"02:ac:10:ff:01:93\" \

  8. \"lease_time\"=\"3600\" \"router\"=\"172.16.255.193\"")"

  9. echo $insideDhcp

  10.  
  11. ovn-nbctl dhcp-options-list

如果您想了解有關OVN NB資料庫的更多資訊,請參閱ovn-nb的手冊(譯者注:http://openvswitch.org/support/dist-docs/ovn-nb.5.pdf)。

現在,我們將使用儲存在變數中的UUID為我們的邏輯交換機埠分配DHCP_Options。

  1. ovn-nbctl lsp-set-dhcpv4-options dmz-vm1 $dmzDhcp

  2. ovn-nbctl lsp-get-dhcpv4-options dmz-vm1

  3.  
  4. ovn-nbctl lsp-set-dhcpv4-options dmz-vm2 $dmzDhcp

  5. ovn-nbctl lsp-get-dhcpv4-options dmz-vm2

  6.  
  7. ovn-nbctl lsp-set-dhcpv4-options inside-vm3 $insideDhcp

  8. ovn-nbctl lsp-get-dhcpv4-options inside-vm3

  9.  
  10. ovn-nbctl lsp-set-dhcpv4-options inside-vm4 $insideDhcp

  11. ovn-nbctl lsp-get-dhcpv4-options inside-vm4

配置虛擬機器

與上一個實驗一樣,我們將使用OVS內部埠和網路名稱空間構建的"偽虛擬機器"。現在的區別是,我們將使用DHCP進行地址分配。

接下來我們將設定虛擬機器。

ubuntu2:

  1. ip netns add vm1

  2. ovs-vsctl add-port br-int vm1 -- set interface vm1 type=internal

  3. ip link set vm1 address 02:ac:10:ff:01:30

  4. ip link set vm1 netns vm1

  5. ovs-vsctl set Interface vm1 external_ids:iface-id=dmz-vm1

  6. ip netns exec vm1 dhclient vm1

  7. ip netns exec vm1 ip addr show vm1

  8. ip netns exec vm1 ip route show

  9.  
  10. ip netns add vm3

  11. ovs-vsctl add-port br-int vm3 -- set interface vm3 type=internal

  12. ip link set vm3 address 02:ac:10:ff:01:94

  13. ip link set vm3 netns vm3

  14. ovs-vsctl set Interface vm3 external_ids:iface-id=inside-vm3

  15. ip netns exec vm3 dhclient vm3

  16. ip netns exec vm3 ip addr show vm3

  17. ip netns exec vm3 ip route show

  18. On ubuntu3:

  19. ip netns add vm2

  20. ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal

  21. ip link set vm2 address 02:ac:10:ff:01:31

  22. ip link set vm2 netns vm2

  23. ovs-vsctl set Interface vm2 external_ids:iface-id=dmz-vm2

  24. ip netns exec vm2 dhclient vm2

  25. ip netns exec vm2 ip addr show vm2

  26. ip netns exec vm2 ip route show

  27.  
  28. ip netns add vm4

  29. ovs-vsctl add-port br-int vm4 -- set interface vm4 type=internal

  30. ip link set vm4 address 02:ac:10:ff:01:95

  31. ip link set vm4 netns vm4

  32. ovs-vsctl set Interface vm4 external_ids:iface-id=inside-vm4

  33. ip netns exec vm4 dhclient vm4

  34. ip netns exec vm4 ip addr show vm4

  35. ip netns exec vm4 ip route show

測試網路連通性

在ubuntu2上,從vm1測試網路連通性:

  1. # ping vm1的預設閘道器

  2. [email protected]:~# ip netns exec vm1 ping 172.16.255.129

  3. PING 172.16.255.129 (172.16.255.129) 56(84) bytes of data.

  4. 64 bytes from 172.16.255.129: icmp_seq=1 ttl=254 time=0.689 ms

  5. 64 bytes from 172.16.255.129: icmp_seq=2 ttl=254 time=0.393 ms

  6. 64 bytes from 172.16.255.129: icmp_seq=3 ttl=254 time=0.483 ms

  7.  
  8. # 從 overlay網路ping vm2(跨越整個 tenant1)

  9. [email protected]:~# ip netns exec vm1 ping 172.16.255.131

  10. PING 172.16.255.131 (172.16.255.131) 56(84) bytes of data.

  11. 64 bytes from 172.16.255.131: icmp_seq=1 ttl=64 time=2.16 ms

  12. 64 bytes from 172.16.255.131: icmp_seq=2 ttl=64 time=0.573 ms

  13. 64 bytes from 172.16.255.131: icmp_seq=3 ttl=64 time=0.446 ms

  14.  
  15. # 經過 router ping通 vm3(跨越整個 overlay網路)

  16. [email protected]:~# ip netns exec vm1 ping 172.16.255.194

  17. PING 172.16.255.194 (172.16.255.194) 56(84) bytes of data.

  18. 64 bytes from 172.16.255.194: icmp_seq=1 ttl=63 time=1.37 ms

  19. 64 bytes from 172.16.255.194: icmp_seq=2 ttl=63 time=0.077 ms

  20. 64 bytes from 172.16.255.194: icmp_seq=3 ttl=63 time=0.076 ms

  21.  
  22. #經過 router ping 通vm4(跨越整個 overlay網路)

  23. [email protected]:~# ip netns exec vm1 ping 172.16.255.195

  24. PING 172.16.255.195 (172.16.255.195) 56(84) bytes of data.

  25. 64 bytes from 172.16.255.195: icmp_seq=1 ttl=63 time=1.79 ms

  26. 64 bytes from 172.16.255.195: icmp_seq=2 ttl=63 time=0.605 ms

  27. 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