SDN控制器ODL环境下使用Vxlan流表下发

 本环境是在安装了ovs与ODL的基础上,由ODL控制器自动下发流表变为使用vxlan进行流表下发,以实现大二层互通

前文:
centos7.8基于源码包生成rpm包安装ovs-CSDN博客
SDN控制器部署(ODL)-CSDN博客

目录

vxlan技术介绍

Vxlan单租户流表下发

Vxlan多租户通过VNI实现隔离

vxlan技术介绍

vxlan是一种大二层的技术
大二层就是通过底层的三层物理⽹络承载⼆层数据
把需要进⾏交换的⼆层数据封装在路由⽹络的三层中来进⾏传递

VXLAN实现⽅法将原始⼆层数据进⾏打包后进⾏封装
让这个包的外层显示三层ip,但在本质上使用mac二层进行寻址
 

环境:
物理机 R9-7940H  
VMware Workstation 17
CentOS Linux release 7.8.2003

ODL安装包版本 karaf-0.7.3.zip

分为两个实验,分别是单租户与多租户隔离

Vxlan单租户流表下发

SDN控制器ODL环境下使用Vxlan流表下发_第1张图片

#在安装完成ovs与ODL后,不进行ODL流表的添加与端口创建
#添加OVS,两台都要添加
ovs-vsctl add-br ovs01

ovs-vsctl add-br ovs02

ovs-vsctl add-port ovs01 if01 -- set interface if01 type=internal

ovs-vsctl add-port ovs02 if02 -- set interface if02 type=internal

#创建云主机,并关联ovs的端口

#部署VXLAN端⼝

ovs-vsctl add-port ovs01 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.8.138 options:key=10001

ovs-vsctl add-port ovs02 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.8.139 options:key=10001

#主机ping包,在网卡上抓包测试

tcpdump -i ens33 | grep -i vxlan

#16:48:37.014248 IP ovs01.47733 > 192.168.8.138.4789: VXLAN, flags [I] (0x08), vni 10001

Vxlan多租户通过VNI实现隔离

使用VTEP接口代替vxlan接口,采用流表方式进行寻址,这种交换机就叫vtep交换机

SDN控制器ODL环境下使用Vxlan流表下发_第2张图片

#以下操作在两台ovs上都要做

#删除原有接⼝,重新添加VXLAN接⼝

#ofport_request=10 表示端⼝号码设置为10

ovs-vsctl del-port ovs01 vxlan0

ovs-vsctl add-port ovs01 vtep -- set interface vtep type=vxlan option:remote_ip=192.168.203.138 option:key=flow ofport_request=10

ovs-vsctl del-port ovs02 vxlan0

ovs-vsctl add-port ovs02 vtep -- set interface vtep type=vxlan option:remote_ip=192.168.203.137 option:key=flow ofport_request=10

#key=flow表示隧道的VNI是通过流表来指定
SDN控制器ODL环境下使用Vxlan流表下发_第3张图片

#加⼊控制器,切换流表转发

ovs-vsctl set-controller ovs01 tcp:192.168.8.139:6633

ovs-vsctl set-controller ovs02 tcp:192.168.8.139:6633

#默认情况使⽤VNI-0(默认流表)

#如果不去进⾏使⽤流表将不同的租户设置成不同VNI
#都默认使⽤VNI0. ⽆法做到在云环境中进⾏多租户隔离

#初始化流表

ovs-ofctl del-flows ovs01 -O Openflow13

ovs-ofctl del-flows ovs02 -O Openflow13

#查看流表

ovs-ofctl dump-flows ovs01 -O openflow13

ovs-ofctl dump-flows ovs02 -O openflow13

#因为添加流表是采用手动绑定mac的方式进行寻址

#为了添加流表时更加方便,要通过virsh工具将几个虚机的硬件信息xml文件进行修改

#修改⽹卡MAC地址

virsh edit cloud-server01

#添加流表

流表例子:

table0  分类标记

resubmit  继续根据表ID进⾏查找接下来的转发⽅式

table=0,in_port=1,actions=set_field:10001->tun_id,resubmit(,1)

table=0,in_port=2,actions=set_field:10002->tun_id,resubmit(,1)

table=0,actions=resubmit(,1)

#ovs01
ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=0,in_port=1,actions=set_field:10001->tun_id,resubmit(,1)"
ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=0,actions=resubmit(,1)"
ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,tun_id=10001,dl_dst=00:00:00:00:00:01,actions=output:1"
ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,tun_id=10001,dl_dst=00:00:00:00:00:02,actions=output:10"
ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,tun_id=10001,arp,nw_dst=192.168.20.1,actions=output:1"
ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,tun_id=10001,arp,nw_dst=192.168.20.2,actions=output:10"
ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,priority=100,actions=drop"

#ovs2
ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=0,in_port=1,actions=set_field:10001->tun_id,resubmit(,1)"
ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=0,actions=resubmit(,1)"
ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,tun_id=10001,dl_dst=00:00:00:00:00:02,actions=output:1"
ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,tun_id=10001,dl_dst=00:00:00:00:00:01,actions=output:10"
ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,tun_id=10001,arp,nw_dst=192.168.20.2,actions=output:1"
ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,tun_id=10001,arp,nw_dst=192.168.20.1,actions=output:10"
ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,priority=100,actions=drop"

此时ping包,会发现10 20同网段下能够互相通信,而同一ovs内俩主机无法通信

SDN控制器ODL环境下使用Vxlan流表下发_第4张图片

小结:vxlan与odl流表下发
VXLAN⽤于实现海量多租户与⼤⼆层隔离
SDN⽤来实现集中流表管理,⽹络业务⾃动化集中管控
VXLAN的流表可以通过SDN控制器下发到OVS-VTEP交换机

你可能感兴趣的:(linux,云计算,网络)