OpenDaylight VTN 简单介绍及部署


一、VTN简单介绍

VTN是SDN控制器中用于提供多租户虚拟网络的一项应用。通常,为每个部门的系统配置网络需要耗费大量的人力、物力,同样,需要为每个租户安装各种网络应用,并且很难共享这些资源,因此,设计、部署、管理整个复杂的网络是一项繁重的任务。为了解决这一难题,OpenDaylight提出在控制器中使用VTN,VTN的独特之处在于逻辑抽象平台。VTN将逻辑层面与物理层面完全分离,用户可以设计、利用任何所需网络,并且无需了解物理网络的拓扑结构和带宽限制。

VTN允许用户根据对L2/L3层网络的感知来定义网络。由此可知,基于VTN设计的网络会自动被映射到底层物理设备,并配置到支持SDN控制协议的独立的交换机上。这样不仅屏蔽了底层网络的复杂性而且可以更好的管理网络资源,减少了网络服务的配置时间和配置错误。
VTN网络设计
VTN代码的核心部分开源,通过C++开发实现,配置虚拟网络模型,是SDN控制器的一项重要API。OpenDaylight VTN功能主要包括:
(1)网络虚拟化功能。虚拟网络架构、物理网络资源的映射、vBridge功能、vRouter功能、流过滤功能;
(2)多种控制器协调控制网络;
(3)OpenFlow网络和L2/3层网络间的协调合作;
(4)VTN API。

1.1 网络虚拟化功能

用户定义一个VTN,用户映射VTN到物理网络,此物理网络能根据VTN定义来启用网络通信。且随着VTN的定义,L2/3层传输功能和基于流的流量控制功能(过滤和重定向)将被实现。
下表显示了VTN的构成元件。在VTN中,虚拟网络通过虚拟节点(包括vBridge、虚拟路由器等)、虚拟接口、链路构成。它可以配置具有L2/3层传递函数的网络,连接由虚拟链路取得虚拟节点上的虚拟端口。
VTN组件
虚拟网络结构的例子:图中VRT是指虚拟路由vRouter,BR1和BR2是作为虚拟桥vBridge。vRouter和vBridge的端口被用来连接vLinks。
vRouter和vBridge的端口被用来连接vLinks

1.1.1 映射物理网络资源

映射物理网络资源到虚拟网络结构。映射被OpenFlow交换机传输或者接收的每个包定义的具体虚拟网络,或者在OpenFlow交换机里传输或接收包的具体端口。主要有两种映射方法,当一个包从OpenFlow交换机被接收到时,端口映射 搜索相应的映射的定义,然后VLAN映射被查找,根据第一个匹配映射,这个包被相关的vBridge映射。
映射物理网络资源
VTN可以学习从连接到一个被映射到VTN交换机的终端信息。

(1)学习终端信息。VTN学习所属VTN的终端信息,存储相关交换机端口所连接终端的MAC地址和VLAN ID。

(2)终端信息衰老化。在VTN中,被VTN学习的终端信息,将一直维持到从终端一直发送数据流。如果终端断开与VTN的连接,衰退时间将开始计时,且终端信息将维持到时间超时。

有关映射配置的例子如下图所示。BR1的端口映射到OFS1的端口GBE0/1,是通过用端口映射,接受自OFS1的端口GBE0/1的包被视为BR1端口相应的包。BR2映射到VLAN200通过用VLAN映射,接收自任何交换机任何端口的带有VALN标签200的包被视为BR2端口相应的包。
有关映射配置的例子

1.1.2 vBridge功能

根据目的MAC地址,vBridge提供桥bridge功能,传输数据包到预期端口。当目的MAC地址已经学习到时,vBridge查找MAC地址表并传输数据包到相应的虚拟端口;当目的MAC地址没有学习到时,它传输数据包到所有的虚拟端口除了正在接收的端口(就是指泛洪)。

MAC地址被学习如下:
(1)MAC学习。vBridge学习到已连接主机的MAC地址,每个接收帧的源MAC地址被映射到正在接收的虚拟端口,且这个MAC地址被存储在MAC地址表中,这个MAC地址表被创建在per-vBridge基础上。
(2)MAC地址老化。只要主机返回ARP消息,存储在MAC地址表中的MAC地址就会被保留;否则当主机断开连接后,MAC仍存在知道老化时间超时。

为了可以有vBridge学习MAC地址静态,可以手动注册MAC地址。

1.1.3 vRouter功能

在vBridges之间,vRouter传输IPv4的包,vRouter支持路由、ARP学习、ARP老化功能。简单介绍一下支持的功能:
(1)路由功能。当一个IP地址被注册到一个vRouter的虚拟端口时,这个端口的路由信息默认被注册;也可以为一个虚拟端口静态注册路由信息。
(2)ARP学习功能。vRouter 连接一个目的IP地址、MAC地址和一个虚拟端口,基于到主机的ARP请求或者基于为一个ARP请求的回复相应包,并保留信息到为每个路由domain准备的ARP表中。已注册的ARP表项被保留,除非老化时间,描述延迟,超时。如果没有返回的应答,在一个老化时间的基础上,该vRouter发送ARP请求,并删除ARP表中的相关表项。对于静态ARP学习,可以手动注册ARP表项的信息。
(3)DHCP中继代理功能。vRouter也提供DHCP中继代理功能。

1.1.4 流过滤功能
流过滤功能与ACL(访问控制列表Access Control List)相似。它可以允许或禁止只有某一种满足特定条件的数据包的通信。此外,它可以执行重定向处理程序——站点路由,不同于存在的ACL。流过滤也能应用在VTN中vNode的任何一个端口,控制传递接口的数据包。
在流过滤器中被指定的匹配条件如下(注:可以指定多个条件的组合):
  1. 源MAC地址(Source MAC address);
  2. 目的MAC地址(Destination MAC address);
  3. MAC ether 类型(MAC ether type);
  4. VLAN优先级(VLAN Priority);
  5. 源IP地址(Source IP address);
  6. 目的IP地址(Destination IP address);
  7. DSCP;
  8. IP 协议(IP Protocol);
  9. TCP/UDP 源端口(TCP/UDP source port);
  10. TCP/UDP 目的端口(TCP/UDP destination port);
  11. ICMP类型(ICMP type);
  12. ICMP代码(ICMP code)。
    动作的类型,可以在匹配的流过滤条件的数据包中应用到下表中。能够仅使这些匹配特定条件的数据包,通过在动作中指定重定向穿过一个特定的服务器。例如,流的路径可以为一个特定终端发送的每个数据包被改变,这取决于目的IP地址。VLAN优先级控制和DSCP标记也被支持。
    动作的类型
    下面的例子显示流过滤功能怎样工作:
    1.当一个在虚拟网络被传送的数据包通过一个虚拟接口时,如果有任何被流过滤器匹配的条件,功能将估算这个匹配条件看传输的数据包是否匹配它。
    2.如果数据包匹配这个条件,功能将应用被流过滤器指定的匹配动作。下面的例子显示配置,功能估算匹配条件在BR1,且如果它匹配这个条件,将丢弃这个数据包。
    流过滤功能
    ###1.2 多SDN控制器结合
    随着网络的抽象化,VTN能够通过多个SDN控制器配置虚拟网络,提供很高的弹性网络系统。VTN能在每个SDN控制器中被创建。如果用户想在一个策略里管理多个VTNs,这些VTNs能被集成到一个单一的VTN中。作为一个案列,此功能将被部署到多数据中心环境,即使这些数据中心在地理上是分开的,并被不同的控制器控制,单一策略虚拟网络仍可以通过VTN实现。


很容易将一个新的SDN控制器添加到已存在的VTN中,或者从VTN中删除一个特定的SDN控制器。除此之外,可以定义一个同时涵盖OpenFlow网络和Overlay网络的VTN。流过滤器,被设置在VTN中,在新添加的SDN控制器中将自动应用。

1.3 OpenFlow网络和L2/3层网络结合

在一个混合L2/3层交换机的环境里配置VTN也是可行的,L2/3层交换机在VTN中用vBypass显示。流过滤器或者策略不能配置vBypass。但是不管怎么样,vBypass可以作为VTN内部的一个虚拟节点。

1.4 VTN API

VTN提供WEB API,被应用在REST架构中,且提供入口到被URI定义VTN的源。用户可在XML或JSON格式中通过HTTPS通信发送消息到VTN对虚拟网络资源(例如vBridge或虚拟路由器)进行操作,如 GET/PUT/POST/DELETE。
VTN提供WEB API
功能概述
VTN为各种网络资源提供如下操作:
VTN为各种网络资源提供操作
示例:连接终端到虚拟网络
1.创建VTN

curl -X POST -H 'content-type: application/json' -H 'username: admin' -H 'password: PASSWORD' -H 'ipaddr: 127.0.0.1' -d '{"vtn":{"vtn_name":"VTN1"}}' http://172.1.0.1:8080/vtn-webapi/vtns.json


2.创建控制器信息

curl -X POST -H 'content-type: application/json' -H 'username: admin' -H 'password: PASSWORD' -H 'ipaddr: 127.0.0.1' -d '{"controller":{"controller_id":"CONTROLLER1","ipaddr":"172.1.0.1","type":"pfc","username":"root","password":"PASSWORD","version":"5.0"}}' http://172.1.0.1:8080/vtn-webapi/controllers.json


3.在VTN中创建vBridge

curl -X POST -H 'content-type: application/json' -H 'username: admin' -H 'password: PASSOWRD' -H 'ipaddr: 127.0.0.1' -d '{"vbridge":{"vbr_name":"VBR1","controller_id": "CONTROLLER1","domain_id": "(DEFAULT)"}}' http://172.1.0.1:8080/vtn-weba ... .json


4.在vBridge下创建端口连接终端

curl -X POST -H 'content-type: application/json' -H 'username: admin' -H 'password: PASSWORD' -H 'ipaddr: 127.0.0.1' -d '{"interface":{"if_name":"IF1"}}' http://172.1.0.1:8080/vtn-weba ... .json


二、源码安装VTN coordinator

使用Ubuntu12.04支持64位操作系统。

安装依赖包:
apt-get install pkg-config gcc make ant g++ maven git libboost-dev libcurl4-openssl-dev libssl-dev openjdk-7-jdk unixodbc-dev
安装Postgresql数据库:
apt-get install postgresql-9.1 postgresql-client-9.1 postgresql-client-common postgresql-contrib-9.1 odbc-postgresql
编译gtest:
apt-get install cmake libgtest-dev
cp -R /usr/src/gtest gtest-work
cd gtest-work
cmake CMakeLists.txt

编译结果如下:
编译gtest结果
make #通过make进行编译安装
通过make进行编译安装
sudo cp *.a /usr/lib
cd ..
rm -rf gtest-work

用户不需要强制使用root账户,但用户必须拥有目录/ usr /local/ vtn,待解压下面文件时,会自动生成vtn目录。

2.1下载VTN代码

下载vtn源码:
git clone https://git.opendaylight.org/gerrit/p/vtn.git
有时下载可能会需验证,获取验证通行执行此命令就可:git config --global http.sslverify false。

2.2 编译安装VTN

编译安装VTN协调器(Coordinator):
cd vtn/coordinator
mvn -f dist/pom.xml install

但是安装编译VTN时出现问题:
安装编译VTN时出现问题
具体原因是json-c未安装成功,下载json-c源码手动安装:
wget https://github.com/json-c/json-c/archive/master.zip
unzip json-c-master.zip
cd json-c-master/
sh autogen.sh
./configure --prefix=/usr
make
make install
pkg-config --cflags json-c
mvn -f dist/pom.xml install –DskipTests

出现以下错误,已通过修改文件解决,如下:
出现以下错误,已通过修改文件解决
打开json.h 文件,添加关于bits.h的头文件:
vi /usr/include/json-c/json.h
打开json.h 文件,添加关于bits.h的头文件
查看bits.h文件是否含有关于error的判断:
vi /usr/include/json-c/bits.h
查看bits.h文件是否含有关于error的判断
重新编译安装执行,执行时间可能会久一点,请耐心等待:
mvn -f dist/pom.xml install -DskipTests
重新编译安装执行
自此VTN安装成功!

2.3 启动VTN

安装编译成功后,进入以下目录,解压文件:
cd /root/odl/vtn/coordinator/dist/target
tar -C / -xvjf distribution.vtn-coordinator-6.1.0.0-SNAPSHOT-bin.tar.bz2

运行:

1.默认协调器的端口是8083,在文件/usr/local/vtn/tomcat/conf/tomcat-env.sh中改变监听端口,以防冲突;

2.建立数据库:
/usr/local/vtn/sbin/db_setup
3.启动
/usr/local/vtn/bin/vtn_start
/usr/local/vtn/bin/unc_dmctl status #查看三个进程状态

4.停止VTN命令:
/usr/local/vtn/bin/vtn_stop
WEB API显示,当VTN启动成功后执行下面命令将显示VTN coordinator的版本信息:
curl --user admin:adminpass -H 'content-type: application/json' -H 'ipaddr:127.0.0.1' -X GET \
'http://127.0.0.1:8083/vtn-webapi/api_version.json'

预期结果是:
{"api_version":{"version":"V1.1"}}

三、总结

只是将VTN的学习过程记录下来,在看官网的过程中,小编觉得英文实在是太麻烦,带来诸多不便,所以将官网中关于VTN的知识给翻译总结了一下,以便后续的使用。且在安装VTN的过程中遇到了一系列的问题,在其中一次安装过程中遇到启动数据库失败的问题,还没得到解决,查看了下具体原因,显示unc_dmctl错误,“/usr/local/vtn/etc/uncd.conf:File is unsafe.: /usr/local/vtn/etc/uncd.conf:Operation not permitted”。已将整个vtn文件夹赋权限,但是还是会提示失败,或者可能是VTN coordinator对Ubuntu系统不完全兼容(说明书上并没有说明支持ubuntu系统),小编对这个问题有点茫然了,期待大神们指教,且在Centos中是可以正常运行使用的。也要谢谢crzbin,在与他交流过程中学到很多。

如有理解不到位或有不正确的地方,敬请谅解多指正!谢谢!

2 个评论

实用,谢谢分享
值得一看谢谢分享

要回复文章请先登录注册