ODL之VTN详解-如何提供虚拟2层网络-port-map

之前提到,VTN的作用是提供虚拟租户网络,准确的说是通过创建逻辑层面的网络实现虚拟网络功能,那么我们实实在在的的主机如何通过逻辑网络进行联通呢?一个物理网络,一个逻辑网络(VTN网络),两个网络之间本不存在任何关联。VTN基于映射map的方式,将逻辑网络就和物理网络关联在一起,而这个逻辑网络我们可以人为编排,相比而言,灵活很多。map有三种方式实现,分别是port map 、mac map以及vlan map,这里我们先进行port map的功能研究,其他方式后面文章会有讲述。

         二层虚拟网络功能主要是通过VTN管理器下发API方式实现。下面通过一个简单的openflow交换网络利用port map来测试该功能并介绍一些api的使用。

Virtual L2 network for host1 and host3

上图一个由openflow交换机组成的物理网络,一个逻辑网络,物理网络中各主机间互不相通。但是,将host1、host3映射到同一个逻辑网络中,就可以实现host1与host3之前的互通。后面会简述下作业原理。

下面我们进行功能验证:

1.通过mininet 搭建如上的物理网络:

执行如下命令创建两个三个交换机以及四个host:

sudo mn --controller=remote,ip=192.168.0.100 --topo tree,2 
 #ip为odl控制器的ip,使当前创建的网络被odl管理,方便后期odl通过vtn manager下发api进行配置

在mininet终端中通过net命令检查网络拓扑,如下:

可以发现h1(host1)与h3是不互通的。

在odl中的拓扑图如下:三个被odl纳管的交换机

openflow:2节点的端口详情如下:

重点关注s2-eth1端口,该交换机端口连接host1主机。

openflow:3节点的端口详情如下:

重点关注s3-eth1端口,该交换机端口连接host3主机。

2.创建VTN网络vtn1:

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://192.168.26.124:8181/restconf/operations/vtn:update-vtn -d '{"input":{"tenant-name":"vtn1"}}'

#tenant-name:vtn网络名; input中还可以携带其他参数,详见创建vtn网络参数解析

3.创建虚拟桥vbr1

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://192.168.26.124:8181/restconf/operations/vtn-vbridge:update-vbridge -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1"}}'

# bridge-name:虚拟桥名,这里需要注意一点,一个vtn网络可以创建多个虚拟桥;input中还可以携带其他参数,详见创建虚拟网桥参数解析

4.创建虚拟接口

在虚拟桥上创建两个虚拟接口if1和if2
curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://192.168.26.124:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1"}}'
curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://192.168.26.124:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1"}}'

#interface-name:虚拟接口名,input中还可以携带其他参数,详见创建虚拟接口参数解析

5.进行map映射

将创建的虚拟接口和交换机端口(与host主机相连的端口)进行映射

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://192.168.26.124:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1", "node":"openflow:2", "port-name":"s2-eth1"}}'
curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://192.168.26.124:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1", "node":"openflow:2", "port-name":"s2-eth1"}}'

#node 和port-name 定位了一个交换机端口,input中还可以携带其他参数,详见:set_port_map参数解析

验证结果: h1可以ping通s3

 

该功能部分api 总结:

创建vtn:

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:update-vtn -d '{"input":{"tenant-name":"vtn1"}}'

删除vtn: 

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:remove-vtn -d '{"input":{"tenant-name":"vtn1"}}'

创建虚拟桥:

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vbridge:update-vbridge -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1"}}

删除虚拟桥:

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vbridge:remove-vbridge -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1"}}

创建虚拟接口:

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1"}}'

删除虚拟接口:

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:remove-vinterface -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1"}}'

创建port map:

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1", "node":"openflow:2", "port-name":"s2-eth1"}}'

删除port map:

curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:remove-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1"}}'

注意:该功能在硼版本实现,并未在其他版本测试。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值