OVS實現VXLAN隔離


一、實驗環境

1.准備3個CentOS7 mini版本的虛擬機,每個主機3個網卡。如圖:

 

  圖中OVS-1、OVS-2、OVS-3分別為三台CentOS7 mini版虛擬機,分別配備3個虛擬網卡。如圖中編號所示:

  網卡1(eno16777736):作為管理網,橋接到辦公網絡。

  網卡2(eno33554960):VXLAN VTEP互聯的L3網絡。IP段為10.10.10.0/24

  網卡3(eno50332184):用於連接測試用虛擬機,也使用Windows網橋連接。

2.准備好虛擬機后,更新每台虛擬機yum源。

yum install -y wget

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all;yum makecache;yum -y update;

yum install net-tools -y

3.按照安裝過程安裝OVS。

4.三台OVS主機上分別創建br

  

#添加一個br

ovs-vsctl add-br br0

#分別給br0添加一個IP地址,用於VXLAN的測試

ifconfig br0 192.168.100.11 up  #OVS-2和OVS-3上分別設置22和33

 

二、實驗過程

1.添加VTEP

  OVS-1:ovs-vsctl add-port br0 vx12 -- set interface vx12 type=vxlan options:remote_ip=10.10.10.22

  OVS-1:ovs-vsctl add-port br0 vx13 -- set interface vx13 type=vxlan options:remote_ip=10.10.10.33

  OVS-2:ovs-vsctl add-port br0 vx21 -- set interface vx21 type=vxlan options:remote_ip=10.10.10.11

  OVS-3:ovs-vsctl add-port br0 vx31 -- set interface vx31 type=vxlan options:remote_ip=10.10.10.11

  形成下面拓撲:

  

  圖中,OVS-1中的Br0上創建了兩個VTEP,這兩個VTEP的remote_ip分別是10.10.10.22和10.10.10.33。

  同樣的,OVS-2中創建一個Remote_IP為10.10.10.11。OVS-3中也創建一個Remote_IP為10.10.10.11。

  這樣就創建了兩條VXLAN隧道,默認VNI為0。

  此時,測試VXLAN是否能夠ping通:

[root@OVS-1 ~]# ping 192.168.100.22
PING 192.168.100.22 (192.168.100.22) 56(84) bytes of data.
64 bytes from 192.168.100.22: icmp_seq=1 ttl=64 time=1.16 ms
64 bytes from 192.168.100.22: icmp_seq=2 ttl=64 time=1.30 ms
[root@OVS-1 ~]# ping 192.168.100.33
PING 192.168.100.33 (192.168.100.33) 56(84) bytes of data.
64 bytes from 192.168.100.33: icmp_seq=1 ttl=64 time=1.43 ms
64 bytes from 192.168.100.33: icmp_seq=2 ttl=64 time=1.51 ms
[root@OVS-3 ~]# ping 192.168.100.11
PING 192.168.100.11 (192.168.100.11) 56(84) bytes of data.
64 bytes from 192.168.100.11: icmp_seq=1 ttl=64 time=1.28 ms
64 bytes from 192.168.100.11: icmp_seq=2 ttl=64 time=1.32 ms
[root@OVS-2 ~]# ping 192.168.100.11
PING 192.168.100.11 (192.168.100.11) 56(84) bytes of data.
64 bytes from 192.168.100.11: icmp_seq=1 ttl=64 time=1.28 ms
64 bytes from 192.168.100.11: icmp_seq=2 ttl=64 time=1.59 ms

  說明,上述拓撲圖中VXLAN是成功的。

 

3.使用option:key=5000可以指定每個隧道的VNI:

  例如:

  OVS-1:ovs-vsctl add-port br0 vx12 -- set interface vx12 type=vxlan options:remote_ip=10.10.10.22 option:key=5000

  OVS-1:ovs-vsctl add-port br0 vx13 -- set interface vx13 type=vxlan options:remote_ip=10.10.10.33 option:key=5001

  OVS-2:ovs-vsctl add-port br0 vx21 -- set interface vx21 type=vxlan options:remote_ip=10.10.10.11 option:key=5000

  OVS-3:ovs-vsctl add-port br0 vx31 -- set interface vx31 type=vxlan options:remote_ip=10.10.10.11 option:key=5001

  這樣,拓撲中的兩條隧道的VNI就不同了:

  此時,再次測試VXLAN是否能夠ping通:

[root@OVS-1 ~]# ping 192.168.100.22
PING 192.168.100.22 (192.168.100.22) 56(84) bytes of data.
64 bytes from 192.168.100.22: icmp_seq=1 ttl=64 time=1.36 ms
64 bytes from 192.168.100.22: icmp_seq=2 ttl=64 time=0.986 ms

  同樣,在這種情況下(VNI不同),通訊也是OK的。

  從這里,得出結論,每個VXLAN隧道是獨立工作的。由於三台虛擬機上的Br0未划分VLAN網段,所以相當於三個Br0通過VXLAN隧道組成了一個L2網絡。

 

4.雲平台中使用VXLAN隔離租戶原理

  在雲平台中如何使用VXLAN來隔離租戶:

  當在雲平台中,例如Openstack中選擇使用VXLAN作為網絡模式。那么意味着,每個租戶使用一個VNI來進行隔離,一共可以支持成百上千萬個租戶。

  

  上圖中:

  G、H為兩個VTEP,形成VXLAN隧道,兩端IP為10.0.100.88和10.0.100.77。

  br-tun和br-int一般載體是OVS,供多租戶共享,每個租戶的數據包在G和H處進行封裝,使用不同的VNI隔離。

  qbr-xxx是虛擬機獨享的,載體是linux bridge。因為OVS無法支持基於iptables規則的安全組功能,所以只能使用Linux bridge來實現安全組功能。

 報文出的過程:

  1.報文從VM1-1的A端口發出,是Untag報文。

  2.報文從B口進入qbr-xxx,再從C端口離開qbr-xxx,也是Untag報文。

  3.報文從D端口進入br-int,在D端口,報文被打上標簽,VLAN ID=10。

  4.報文從E端口離開br-int,此時報文VID=10。

  5.報文從F端口進入br-tun,此時報文VID=10。

  6.報文從G端口離開Host,在G端口,報文被再次封裝為VXLAN報文,外層VID=5000。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM