Open vSwitch 入門實踐(3)使用OVS構建分散式隔離網路

語言: CN / TW / HK

使用OVS構建分散式隔離網路

前言

上一節我們使用OVS構建了單機隔離網路,但是隨著網路規模的擴張,單節點已經不再能滿足業務的需要,分散式網路成了必不可少的環節。分散式網路與單節點網路在細節實現上基本一致,只有物理環境網路連線上的一點區別。

實驗1:分散式無隔離網路

網路拓撲如下圖所示,我們每一臺節點都有兩張網絡卡,一張用於管理,一張用於業務。之所以使用兩張網絡卡有兩個原因:

  1. 管理網絡卡用於日常的維護登入,業務網絡卡用於傳輸虛擬節點的資料報文,避免相互之間影響。
  2. 我們要將業務網絡卡繫結到OVS網橋上,也就是 Normal 型別的 Port 。這種方式新增的 Port 不支援分配IP地址,如果之前網絡卡上配置的有IP,掛載到OVS上面之後將不可訪問。

需要注意的是,如果是使用物理環境搭建網路拓撲,需要把業務網絡卡對應的交換機埠配置為 trunk 模式。如果是使用VmWare搭建網路拓撲,業務網絡卡需要配置網路型別為 僅主機模式

配置

  • 配置環境 主機A
ovs-vsctl add-br br-int
# 請修改eth1為當前實驗環境的業務網絡卡名稱
ovs-vsctl add-port br-int eth1

# 新增兩個內部埠
ovs-vsctl add-port br-int vnet0 -- set Interface vnet0 type=internal
ovs-vsctl add-port br-int vnet1 -- set Interface vnet1 type=internal
# 新增兩個netns
ip netns add ns0
ip netns add ns1
# 將內部埠分別移動到netns中
ip link set vnet0 netns ns0
ip link set vnet1 netns ns1

# 啟動埠並配置IP
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set vnet0 up
ip netns exec ns0 ip addr add 10.0.0.1/24 dev vnet0

ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set vnet1 up
ip netns exec ns1 ip addr add 10.0.0.2/24 dev vnet1
  • 配置環境 主機B
ovs-vsctl add-br br-int
# 請修改eth1為當前實驗環境的業務網絡卡名稱
ovs-vsctl add-port br-int eth1

# 新增兩個內部埠
ovs-vsctl add-port br-int vnet0 -- set Interface vnet0 type=internal
ovs-vsctl add-port br-int vnet1 -- set Interface vnet1 type=internal
# 新增兩個netns
ip netns add ns0
ip netns add ns1
# 將內部埠分別移動到netns中
ip link set vnet0 netns ns0
ip link set vnet1 netns ns1

# 啟動埠並配置IP
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set vnet0 up
ip netns exec ns0 ip addr add 10.0.0.3/24 dev vnet0

ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set vnet1 up
ip netns exec ns1 ip addr add 10.0.0.4/24 dev vnet1

測試

  • 測試 主機A
ip netns exec ns0 ping 10.0.0.3
ip netns exec ns0 ping 10.0.0.4
ip netns exec ns1 ping 10.0.0.3
ip netns exec ns1 ping 10.0.0.4
  • 測試 主機B
ip netns exec ns0 ping 10.0.0.1
ip netns exec ns0 ping 10.0.0.2
ip netns exec ns1 ping 10.0.0.1
ip netns exec ns1 ping 10.0.0.2
  • 測試結果
主機A 主機B ping 結果
ns0 ns0 可通訊 :white_check_mark:
ns0 ns1 可通訊 :white_check_mark:
ns1 ns0 可通訊 :white_check_mark:
ns1 ns1 可通訊 :white_check_mark:

根據測試結果可以看到我們使用OVS成功的聯通了分佈在不同主機上的虛擬網路裝置。

實驗2:分散式隔離網路

構建分散式隔離網路和單節點的操作方法一致,即給對應的埠配置VLAN tag。如下圖所示,我們分別給主機A、B上的埠配置VLAN tag為100和200。

配置

  • 配置環境 主機A
ovs-vsctl set Port vnet0 tag=100
ovs-vsctl set Port vnet1 tag=200
  • 配置環境 主機B
ovs-vsctl set Port vnet0 tag=100
ovs-vsctl set Port vnet1 tag=200

測試

  • 測試 主機A
ip netns exec ns0 ping 10.0.0.3
ip netns exec ns0 ping 10.0.0.4
ip netns exec ns1 ping 10.0.0.3
ip netns exec ns1 ping 10.0.0.4
  • 測試 主機B
ip netns exec ns0 ping 10.0.0.1
ip netns exec ns0 ping 10.0.0.2
ip netns exec ns1 ping 10.0.0.1
ip netns exec ns1 ping 10.0.0.2
  • 測試結果
主機A 主機B ping 結果
ns0 ns0 可通訊 :white_check_mark:
ns0 ns1 不通訊 :x:
ns1 ns0 不通訊 :x:
ns1 ns1 可通訊 :white_check_mark:

根據測試結果可以看到我們使用OVS成功的隔離了分佈在不同主機上的虛擬網路裝置。

本文首發我的微信公眾號:我在對面的角落

歡迎關注,接收第一時間更新通知。