本环境是在安装了ovs与ODL的基础上,由ODL控制器自动下发流表变为使用vxlan进行流表下发,以实现大二层互通
前文:
centos7.8基于源码包生成rpm包安装ovs-CSDN博客
SDN控制器部署(ODL)-CSDN博客
目录
vxlan技术介绍
Vxlan单租户流表下发
Vxlan多租户通过VNI实现隔离
vxlan是一种大二层的技术
大二层就是通过底层的三层物理⽹络承载⼆层数据
把需要进⾏交换的⼆层数据封装在路由⽹络的三层中来进⾏传递
VXLAN实现⽅法将原始⼆层数据进⾏打包后进⾏封装
让这个包的外层显示三层ip,但在本质上使用mac二层进行寻址
环境:
物理机 R9-7940H
VMware Workstation 17
CentOS Linux release 7.8.2003ODL安装包版本 karaf-0.7.3.zip
分为两个实验,分别是单租户与多租户隔离
#在安装完成ovs与ODL后,不进行ODL流表的添加与端口创建
#添加OVS,两台都要添加
ovs-vsctl add-br ovs01ovs-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
使用VTEP接口代替vxlan接口,采用流表方式进行寻址,这种交换机就叫vtep交换机
#以下操作在两台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
#加⼊控制器,切换流表转发
ovs-vsctl set-controller ovs01 tcp:192.168.8.139:6633
ovs-vsctl set-controller ovs02 tcp:192.168.8.139:6633
#如果不去进⾏使⽤流表将不同的租户设置成不同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内俩主机无法通信
小结:vxlan与odl流表下发
VXLAN⽤于实现海量多租户与⼤⼆层隔离
SDN⽤来实现集中流表管理,⽹络业务⾃动化集中管控
VXLAN的流表可以通过SDN控制器下发到OVS-VTEP交换机