专栏名称: 云技术实践
关注云计算,云技术,云运维,云存储,存储,分布式,OpenStack,SDN,Ceph,虚拟化,运维,分享在云计算/虚拟化/运维项目实施中的资讯、经验、技术,坚持干货。
目录
相关文章推荐
架构师之路  ·  拜年 ·  2 天前  
51好读  ›  专栏  ›  云技术实践

OpenDaylight:虚拟核心和聚合

云技术实践  · 公众号  · 架构  · 2017-08-31 20:20

正文

第六章 虚拟核心和聚合


本章主要内容列表:


配置和获取BGP信息

通过BGP-LS管理和可视化网络拓扑

添加和删除BGP网络路由

配置和获取PCEP信息

通过PCEP管理LSP通道

通过PCEP进行网络编程

使用Java管理扩展获取BGP和PCEP统计信息

通过TCP MD5认证增强BGP和PCEP的安全连接

使用OpenConfig实现BGP组件配置

实现BGP和PCEP协议的新扩展


简介


在OpenDaylight的BGP-PCEP项目中,实现两个南向插件:Border Gateway Protocol(BGP) Linkstate分布管理三层拓扑信息,Path Computation Element Protocol(PCEP)作为路径实例方法实例化底层网络。两种协议都提供了可扩展功能。


BGP让互联网的网络正常工作的路由协议。根据RFC,BGP主要功能就是通过BGP交换网络可达信息。


PCEP是由IETF定义的基于TCP协议,它使得网络组件比如路由器可以把路径计算功能拿到外部路由实体中,即路径计算引擎(PCE)。PCE能够计算出网络的网络路径或者是网络路由。使用PCEP协议,客户端PCC可以向PCE请求路径计算。PCEP协议设计用于PCC和PCE之间通信。使用PCEP,可以将路径计算集中到OpenDaylight控制节点上,这也就是软件定义网络的好处。


本章中配置主要集中在使用OpenDaylight SDN控制器做BGP和PCEP的基本用户案例。


配置和查看BGP信息



在本章中,我们将指导您通过手动配置OpenDaylight控制器的XML文件,用PCEP将路由器连接起来。路由器和OpenDaylight都需要配置。一量建立连接,控制器可以从路由器中接收路由信息,这可以用RESTCONF来完成。


预备条件


本章这个配置方案需要路由器和OpenDaylight控制器通过BGC-PCEP来实现。你也可以使用Quagga路由器。为了使用BGP-PCEP,Opendaylight控制器可以通过手动配置或者使用RESTCONF完成配置。


操作指南


按照指定说明使用Opendaylight BGP XML配置BGP配置文件


1 使用karaf脚本启动OpenDaylight,使用此客户端访问karaf 命令行:


$ ./bin/karaf



2 安装面向用户的功能,需要获取使用BGP-LS连接到路由器所有的依赖项:


opendaylight-user@root>feature:install odl-bgpcep-

bgp-all


odl-bgpcep-pcep-all odl-restconf-all odl-netconf-

all


完成安装过程可能需要几分钟时间。为了确保安装正常,可以使用以下命令检查日志,他会列出已经安装的BGP服务。


opendaylight-user@root>feature:list -i | grep

bgp

可以使用如下的命令查看karaf日志检查相关错误:


opendaylight-user@root>log:tail


3 配置由Opendaylight发起的BGP连接:OpenDaylight karaf版本有一个预配置的BGP基线配置。这个XML配置文件可以通过karaf的根目录进入etc/opendaylight/karaf访问到。对于BGP配置有两个有用的文件分别是:31-bgp.xml和41-bgp-example.xml



更新41-bgp-example.xml指定部分,创建BGP-LS到对端IP地址连接即路由器的连接。


1 BGP对端配置:XML文件默认主机IP地址为192.0.2.1。更新以下BGP speaker的 IP地址以便Opendaylight与其连接。在这个例子中,我们用192.168.1.119作为BGP对端地址,或者说是路由器IP地址:



可以增加更多的BGP peer,这可以通过新增一个不同实例名称和IP地址的module来达到:


标签代表唯一的BGP对应名称


2 RIB配置:更新XML文件,在以下部分创建BGP消息段:



Local-as字段提供Opendaylight控制器配置的本地自治系统编号,该值与路由器的BGP自治系统配置应该相同。bgp-rib-id默认为192.0.0.2.2,这个应该用新建Opendaylight控制器实例的管理IP地址更新,在我们例子中为192.68.1.102。


3 在您的路由器上使用适当命令验证BGP peer配置是跟前面的配置相匹配的。


4 注意BGP对端基线配置是被注释掉的以防止客户端以默认配置启动。一旦所需配置完成,取消BGP对等配置模块的注释。在我们的例子中,是example-bgp-peer。此外,定时器可以配置为所需值。例如更新BGP客户端之间的间隔和BGP peer模块的重新尝试连接时间(以秒为单位)。可以启用TRACE模块在Karaf日志中查看调试结果,这可以通过编辑文件etc/org.ops4j.paxloging.cfg添加下行文件到文件结尾来完成:



一旦对这个文件修改完成,并重启karaf让新配置生效。在karaf控制台上键入log:tail应该能够看到下面trace日志来判断运行是否正常。



注意,上述日志中BGP的绑定端口是179,这是RFC定义的默认端口号。karaf日志也可以通过从karaf根目录下访问data/log/karaf.log获得。


4 BGP数据可以通过RESTCONF访问如下URL访问获得网络拓扑信息,使用GET请求,URL:  http://:8181/restconf/operational/ network-topology:network-topology/ Method:  GET


JSON格式示范可以通过GitHub链接获得,以下为链接地址h t t p s : / / g i t h u b . c o m / j g o o d y e a r / O p e n D a y l i g h t C o o k b o o k / b l o b / m a s t e r / c ha p t e r 6 / c h a p t e r 6 - r e c i p e 1 / s a m p l e s / n e t w o r k _ t o p o l o g y . t x t 。


检索BGP路由信息库(RIB)数据使用以下GET请求:


URL: http://:8181/restconf/operational/ bgp- rib:bgp-rib/rib/example-bgp-rib/



方法:  GET


想GET操作的响应示例通过github获得:  h t t p s : / / g i t h u b . c o m / j g o o d y e a r / O p e n D a y l i g h t C o o k b o o k / b l o b / m a s t er / c h a p t e r 6 / c h a p t e r 6 - r e c i p e 1 / s a m p l e s / r i b _ d a t a . t x t



对于BGP RIB数据的进一步细粒度地访问可以通过下面方法做到,不同的路由器支持的类型可能不同:


1 对于检索IPv4路由信息,访问GET如下URI:



对于检索IPv6的路由信息,GET的URI如下:


http://:8181/restconf/operational/bgp-rib: bgp-rib/rib/example-bgp-rib/loc-rib/tables/ bgp-types:ipv6-address-family/ bgp-types:unicast-subsequent-address-family/ipv6-routes


2 对于检索IPv4 flowspec信息,使用如下的URI的GET操作:


http://:8181/restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/tables/bgp-types:ipv4-address-family/bgp-flowspec:flowspec-subsequent-address-family/bgp-flowspec:flowspec-routes


对于检索IPv6流信息,使用如下的URI的GET操作:


http://:8181/restconf/operational/bgp-rib:b

gp-rib/rib/example-bgp-rib/loc-rib/tables/bgp-

types:ipv6-address-family/bgp-flowspec:flowspec-

subsequent-address-family/bgp-flowspec:flowspec-

ipv6-routes


3 对于检索IPv4 BGP标记的单播路由,使用如下的URI的GET操作:


http://localhost:8181/restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/tables/bgp-types:ipv4-

address-family/bgp-labeled-unicast:labeled-unicast-

subsequent-address-family/bgp-labeled-unicast:labeled-

unicast-routes


4 对于检索IPv4 BGP链路状态,使用如下的URI的GET操作:


http://localhost:8181/restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/tables/bgp-

linkstate:linkstate-address-family/bgp-

linkstate:linkstate-subsequent-address-family/linkstate-

routes


工作原理


安装odl-bgpcep-bgp-all 所有特性,启用BGP应用所有依赖都会被安装。以下是主要依赖:


BGP项目中定义了 用于BGP建模的Yang模型。它依赖于Opendayligh Yangtools项目通过Yang模型成生 Java APIs。Opendaylight控制器驱动服务抽象层(MD-SAL)用于存储和管理BGP信息。


需要安装Odl-restconf-al,然后才能过通公开的API接口查看BGP项目特性。


BGP项目协议框架需要下面的netty库支持。


配置BGP-PCEP需要Opendaylight config-subsystem支持。


因为BGP和PCEP支持MD5 认证,因此也需要tcpmd5项目。


安装以上功能之后,基线XML配置文件将被创建。通过安装配置BGP路由器和Opendaylight XML配置文件来建立BGP连接。


Opendaylight提供了两个主要配置文件用于BGP实现,以下为BGP中RIB配置。


31-bgp.xml :该文件定义了基础解析器和RIB的设置,除非需要变更Address Family Identifier (AFI) 和 Subsequent Address Family Identifier (SAFI),否则该文件保持不变。


41-bgp-example.xml :该文件包含配置示例编辑,应该修改该文件以适应自己的部署。


一旦配置完成并重启karaf实例后,这些参数会被Opendaylight拿到。使用Restful API 可以管理BGP路由和相关参数,我们将在下面进行讨论。


对于本节及后续章节,你可以试用Quagga路由器做为BGP对端,你也可以选择其他任何的路由器。Quagga是一个方便、开源的解决方案,可以用它做为尝试。配置Quagga路由器与BGP的Opendaylight集成实现说明参考如下:h t t p s : / / g i t h u b . c o m / j g o o d y e a r / O p e n D a y l ig h t C o o k b o o k / t r e e / m a s t e r / c h a p t e r 6 / c h a p t e r 6 - r e c i p e 1 / q u a g g a


用BGP-LS管理和生成可视化拓扑



在本章中,我们将回顾第一节的配置拓扑和存储的信息类型的详细信息。


预备条件


第一节的配置是本节的先决条件。假设BGP peer和RIB配置如前已经配置完毕。使用karaf脚本启动OpenDaylight发行版本,安装前面所提到的功能。我们将使用BGP RestfulAPI查看 BGP-LS实现管理的不同拓扑。


操作指南


我们之前配置三个主要拓扑如下。为了能够对着每一个拓扑进行管理,有必要好好的理解这些拓扑。


example-linkstate-topology:当通过LinkState消息发布网络拓扑信息,此拓扑用于管理节点和链路。请清意,拓扑名称应该与41-bgp-example.xml.中定义的模块匹配。可以访问以下URL获取Opendaylight实现的网络状态拓扑结构。


URI: http://:8181/restconf/operational/network-topology:network-topology/topology/example-linkstate-topology


example-ipv4-topology :该拓扑用于管理网络拓扑节点的IPv4地址。同样,请注意拓扑名称应该跟41-bgp-example.xml中为其定义模块的名称匹配。opendaylight实现的IPv4网络拓扑可以通过下面的RUI访问获取。我们已经配置BGP对端 和本地BGP(Opendaylight实例属性),IPv4网络拓扑会对应列出其IP地址,如下面示例响应中所示:URI:  http://:8181/restconf/operational/network-topology:

network-topology/topology/example-ipv4-topology


example-ipv6-topology :该拓扑用于管理网络拓扑节点的IPv6地址。注意拓扑名称应该跟41-bgp-example.xml中为其定义模块的名称匹配。链接状态网络拓扑的Opendaylight实现可以访问下面URL获取:


URI: http://:8181/restconf/operational/network-topology:network-topology/topology/example-ipv6-topology


对于上述GET REST操作示例响应可以在以下位置的Github链接访问获取:h t t p s : / / g i t h u b . c o m / j g o o d y e a r / O p e n D a y l i g h t C o o k b o o k / t r e e / m a s t e r / c h a

p t e r 6 / c h a p t e r 6 - r e c i p e 2 / s a m p l e s


工作原理


Opendaylight实现中,每个BGP提供者实例应该配置唯一的RIB Id。例如在我们示例中:rid-id是example-bgp-rig。对于每一个BGP提供者实例,ODL定义了唯一拓扑。在我们的例子中,我们共定义了三种拓扑,分别是,type-ipv4-topology对应bgp-reachability-ipv4类型,example-linkstate-topology对应bgp-linkstate-topology类型,示例-ipv6-topology对应bgp-reachability-ipv6类型。每个拓扑类型对应Opendaylight中BGP实现定义的yang模型。对于每一个配置的rib-id,就配置了拥有唯一应用rib-id的BGP对端。同时生成了访问他们的REST API。


添加和删除BGP路由网络



本章介绍如何使用BGP REST API添加IPv4路由。作为先决条件,本部分将指导您手动完成配置,使得OpenDaylight控制器并接受入站BGC链接,这本质上它行为更像BGP speaker。


预备条件


作为本部分配置先决条件,假设已经按照第一节配置了RIB和常规BGP。为了扩展BGP peer的RIB应用功能比如IPv4路由等,我们需要配置BGP peer,并配置应用程序对端。


通过配置41-bgp-example.xml XML文件启用BGP speaker功能。更新配置将默认绑定地址从0.0.0.0更新为localhost,即127.0.0.1,并将默认绑定端口从179变更为1790。



在第一节中,我们配置了BGP peer到它自己的模块中,让我们看看peer-registry的标签。每一个BGP peer都要注册到peer registry,这样进来的BGP连接才被允许并被BGP spearker处理。下面就是我们配置示例:



BGP应用peer配置:由于BGP speaker需要所有的对端进行注册才能跟它们通信。我们将自己的模块上添加BGP peer。下面部分,如何用适当的信息替换相关代码:


Bgp-peer-id: 指的是opendaylight实例的IP地址,它是本地BGP标识符。


target-rib:指将存储数据的RIB标识符


application-rib-id:指RIB本地应用标识,用于存储路由信息。



可以配置更多的BGP peer来广播路由。



重新启动OpenDaylight分发版本,并且使用karaf脚本安装必要的功能,如前面要求的配置所述。


操作指南


接下来我们通过BGP REST API添加和删除路由,通过对端路由器做路由的验证。


1 添加IPv4单播路由,请使用以下Restful API:


URI:

http://:8181/restconf/config/bgp-rib:application-rib/ex

ample-app-rib/tables/bgp-types:ipv4-address-family/bgp-

types:unicast-subsequent-address-family


方法:  PUT


PUT方法操作的示例JSON主体可以在以下位置的github位置获取: h t t p s : / / g i t h u b . c o m / j g o o d y e a r / O p e n D a y l i g h t C o o k b o o k / b l o b/ m a s t e r / c h a p t e r 6 / c h a p t e r 6 - r e c i p e 3 / s a m p l e s / a d d - i p v 4 - u n i c a s t - r o u t e . t x t


删除IPv4路由:使用相同的URI发起一个DELETE请求,删除所有添加路由。要删除特定路由,使用URL附加网络prefix-id.举例如果prefix是2.1.1.1、32前缀Id,我们将用:2.1.1.1%2F32


2 要添加IPv6单播路由,请使用以下Restful API


URI: http://:8181/restconf/config/bgp-rib:application-rib

/example-app-rib/tables/bgp-types:ipv6-address-family/bgp-

类型:unicast-subsequent-address-family


方法:  PUT


在github访问示例JSON请求:  h t t p s : / / g i t h u b . c o m / j g o o d y e a r

/ O p e n D a y l i g h t C o o k b o o k / b l o b / m a s t e r / c h a p t e r 6 / c h a p t e r 6 - r e c i p e 3 / s a m p l e s /

a d d - i p v 6 - u n i c a s t - r o u t e . t x t


删除IPv6路由:对上述操作执行DELETE操作Rest URI应删除所有IPv6路由。 前缀URI与IPv6前缀只删除上述前缀的路由。 例如:要删除2001:db8:60 :: 5/128,URI应该追加2001:db8:60 :: 5%2F128


3 添加IPv4标记的单播路由,请使用以下Restful API:


URI:http://:8181/restconf/config/bgp-rib:application-rib/example-app-rib/tables/bgp-types:ipv4-address-family/bgp-labeled-unicast:labeled-unicast-subsequent-address-family


方法:  PUT


示例JSON请求可以在git的github上访问:  h t t p s : // g i t h u b . c o m / j g o o d y e a r / O p e n D a y l i g h t C o o k b o o k / b l o b / m a s t e r / c h a p t e r 6 / c h a pt e r 6 - r e c i p e 3 / s a m p l e s / a d d - i p v 4 - l a b e l l e d - u n i c a s t - r o u t e . t x t


4删除IPv4标记的单播路由:对URI使用DELETE操作删除所有标记的路由。 删除特定的IPv4标签单播路由附加带有bgp-labeled-unicast的URI:labeled-unicast- route /


添加IPv4流量(BGP-FS):更改目标和4属性值,源前缀,协议和端口值。另外,其它属性可以用于设置流量速率和标记或者重定向。


URI:

http://:8181/restconf/config/bgp-rib:application-rib/ex

ample-app-rib/tables/bgp-types:ipv4-address-family/bgp-

flowspec:flowspec-subsequent-address-family/bgp-

flowspec:flowspec-routes


方法:  PUT


PUT请求的示例JSON位于github链接:  h t t p s : / / g it h u b . c o m / j g o o d y e a r / O p e n D a y l i g h t C o o k b o o k / b l o b / m a s t e r / c h a p t e r 6 / c h a p t e r6 - r e c i p e 3 / s a m p l e s / a d d - i p v 4 - f l o w s p e c . t x t


删除IPv4 flowspec:对DELETE操作使用相同的URI删除所有BGP-FS路由。 为了删除一个特定的路由附加URI与bgp-flowspec:flowspec-route / route-key_value。


5 添加IPv6流量规范(BGP-FS),使用给指定的Restful API:


URI:

http://:8181/restconf/config/bgp-rib:application-rib/ex

ample-app-rib/tables/bgp-types:ipv6-address-family/bgp-

flowspec:flowspec-subsequent-address-family/bgp-

flowspec:flowspec-ipv6-routes

Method:  PUT


上述PUT请求的示例JSON可以在github链接访问: h t t p

s : / / g i t h u b . c o m / j g o o d y e a r / O p e n D a y l i g h t C o o k b o o k / b l o b / m a s t e r / c h a p t e r 6 / c

h a p t e r 6 - r e c i p e 3 / s a m p l e s / a d d - i p v 6 - u n i c a s t - r o u t e . t x t


删除IPv6 flowspec:在上面的链接上使用DELETE操作删除所有BGP-FS路由。 要删除特定路由前缀的URI与bgp-flowspec:flowspec-route/ .


工作原理


RIB实现中,路由信息存放在opendaylight模型驱动服务抽象层(MD-SAL)数据存储。该实现支持四种类型的路由,即:IPv4Routes, IPv6Routes, LinkstateRoutes, FlowspecRoutes.这些路由可以通过REST API进行管理。


参见


为了方便postman通过Rest API管理路由,我们可以通过Github下载链接h t t p s : / / g i t h u b . c o m / j g o o d y e a r / O p e n Da y l i g h t C o o k b o o k / t r e e / m a s t e r / c h a p t e r 6 / c h a p t e r 6 - r e c i p e 3 / p o s t m a n 。记得变更Opendaylight IP地址和JSON请求内容参数值,以符合您要求的配置。此外,我们可以通过Java捆绑的方式,用编程方式管理路由。


配置和检索PCEP信息



本部分将指导您手动配置完成OpenDaylight控制器XML文件,通过使用PCEP与路由器连接。路由器和OpenDaylight都需配置。一旦建立连接,控制器将可以用来查看标签交换路径和路径计算客户端信息。PCEP REST API 可用于执行CRUD类型的隧道管理操作。


预备条件


下面的配置需要通过BGP-PCEP实现,它将实现路由器到OpenDaylight控制器的链接。Opendaylight预配置了基本PCEP配置,此配置应查看属性描述。


操作指南


按照以下说明编辑Opendaylight XML文件以配置PCEP。


1 使用karaf脚本启动OpenDaylight,该脚本将为您提供访问karaf CLI的权限。


2 安装面向用户的功能下载使用PCEP连接到路由器所需的所有依赖



3 配置PCEP文件:一旦OpenDaylight karaf成功安装,在karaf根目录下加“etc / opendaylight / karaf”下面就创建了XML配置文件。与PCEP配置相关的XML配置文件如下:32-pcep.xml, 39-pcep-provider.xml, 和 33-pcep-segment- routing.xml。更新39-pcep-provider.xml指定部分配置,设置PCE的初始化地址以及侦听端口。添加“listen-address”和“listen-port”的标签如下:



重新启动opendaylight 并重新安装相关feature,使新配置生效。


4 使用Opendaylight检索PCEP 拓扑数据:Opendaylight定义了“PCEP拓扑”用于存储PCEP操作状态。拓扑显示PCC,并且显示发起每一个PCC隧道。如果没有配置PCC,则PCEP拓扑将没有条目显示。


使用以下URI访问PCEP拓扑:http://:8181/restconf/operational/network-topology:network- topology/topology/pcep-topology


工作原理


通过安装功能odl-bgpcep-pcep-all,启用PCEP实现的所有必要的依赖都会被下载。需要安装odl-restconf-all插件,通过应用 PCEP访问 Restful API。安装功能后,将创建基线XML配置文件。 Opendaylight中的PCEP实现提供了三个主要的配置文件,如下所示:


32-pcep.xml : 该文件定义了PCEP基础配置,如会话参数,不需要修改。


39-pcep-provider.xml : 此文件包含PCEP的示例配置文件。 PCEP默认设置适用于有状态(stateful07)PCEP扩展。 它需要更新服务器配置以适合您的部署。


33-pcep-segment-routing.xml : 该文件包含PCEP提供segment-routing的配置,无需修改。


配置完成并重新启动karaf实例后,Opendaylight会使用这些参数。 每个PCC客户端作为节点添加到实现提供的PCEP拓扑。


使用PCEP管理LSP隧道



本部分将指导您完成创建,更新和删除draft-ietf-pce-stateful-pce-07和draft-ietf-pce-pce-initiated-lsp-00的LSP。PCC需要配置并运行起来。PCE是Opendaylight PCEP实现。建立了PCC到PCE连接,就可以使用PCEP远程过程调用实现来管理LSP。


预备条件


配置需要PCC客户端完成安装,Opendaylight控制器完成BGP-PCEP使用。在这里我们使用pcc-mock测试工具和PCEP绑定,完成对隧道创建,更新和删除。在本部分还可以看到如何一步一步配置pcc-mock工具。


操作指南


PCEP实现提供以下远程过程调用以便能够管理LSP。


1 要创建LSP,请按名称使用RPC:add-lsp在以下URI访问,并且使用指定JSON输入。


http://:8181/restconf/operations/network-topology-pcep:

add-lsp方法:  POST 内容类型:  application/xml输入示范:



2 为了更新上面的步骤中创建的LSP使用RPC  update-lsp和下面给出的JSON请求。


URL http://:8181/restconf/operations/network-topology-pcep:update-lsp方法:  POST内容类别: application/xml


输入示范:



3 删除LSP,请使用RPC remove-lsp和JSON请求,如下所示.URI:http://:8181/restconf/operations/network-topology-pcep:

remove-lsp方法:  POST类别:  application/xml


输入示范:



方便使用postman收集功能,我们将REST操作管理LSP应用如下:


h t t p s : / / g i t h u b . c o m / j g o o d y e a r / O p e n D a y l i g h t C o o k b oo k / t r e e / m a s t e r / c h a p t e r 6 / c h a p t e r 6 - r e c i p e 5 / p o s t m a n


参见


PCC客户端工具pcep-mock可以从链接下载为可执行jar:h t t p s : / / g

i t h u b . c o m / j g o o d y e a r / O p e n D a y l i g h t C o o k b o o k / t r e e / m a s t e r / c h a p t e r 7 / c h a p t e r 7 - r e c i pe 5 / p c c - m o c k / r e s o u r c e s


有关参数的详细信息,请参阅PCEP的RFC:draft-ietf-pce-stateful-pce-07和draft-ietf-pce-pce-initiated-lsp-00有关参数详细信息,请参阅pcc-mock的README。 假设Opendaylight控制器正在运行,并且安装了BGP-PCEP的必要功能。对于以下部分,我们运行pcc-mock如下例:



注意:本地地址是PCC IP地址,PCE地址应该是Opendaylight IP地址。 您现在应该能够看到以下输出到您的控制台:



PCEP网络编程



本部分将指导您完成创建,更新和删除draft-ietf-pce-segment-routing-01 LSP路径。draft-ietf-pce-segment-routing-01是PCEP的segment routing的实现,并且扩展了上面一节提到的2个draft,draft-ietfpce-stateful-pce-07和draft-ietf-pce-pce-initiated-lsp-00。


预备条件


本部分需要运行实例“pcc-mock”测试工具,正如前面描述的。


操作指南


PCEP实现提供以下远程过程调用以能够管理segment routing LSP。


1. 创建segment routing LSP,使用“add-lsp”RPC。样例JSON ,输入如下:


URI: http://:8181/restconf/operations/network-topolo

gy-pcep:add-lsp方法: POST 类别: application/xml


主体部分:



2 更新,使用RPC “update-lsp”,示例JSON如下。URI: http://:8181/restconf/operations/network-topolo

gy-pcep:update-lsp方法: POST 主体实例:



3 要删除segment routing LSP,请使用RPC“remove-lsp”。 使用相同的URI 和输入,如上一个配置所述。


4 trigger-sync:此操作由PCE使用以触发LSP-DB发起同步。URI: http://:8181/restconf/operations/network-topology-pcep:trigger-sync 方法:POST


主体实例:



触发重新同步操作,使用相同RPC,以及下面的输入。PCE触发LSP数据库通重新同步跟初始同步的方式一样。主体输入如下:



使用Java管理扩展获取BGP和PCEP统计信息



BGP统计存储了BGP在网络拓扑中对端状态,作为Runtime Bean暴露给Java管理控制台。对于每个BGP对端,当BGP会话成功建立时, 一个runtime mbean就注册运行了。这些统计信息可以通过JMX使用JConsole, Jolokia做为runtime beans获取。它们也可以通过RESTCONF做为bgp-peer模块的操作数据获取。BGP Peer会话状态和BGP对端状态各种列表是通过Opendyalight在 BGP-PCEP实施中应用odl-bgp-rib-impl-cfg.yang建模得出来的。


BGP统计还提供两个复位操作resetSession 和resetStats , 下面部分通过截图进行展示。


PCEP为每个PCC到PCE连接提供统计数据。对于每个这次连接,runtme bean是用生成的PCC的ip地址命名的。PCEP还提供了两个RPC操作:resetStats和tearDownSession,将在下面描述。


预备条件


为了查看BGP统计信息,假设Opendaylight配置BGP对端和RIB配置。路由像我们前面配置的那个样子。


操作指南


1 OpenDaylight控制器使用karaf脚本,指定“- jmx”标志。使用“-jmx”标志在OpenDaylight控制器中启动JMX服务器。


2 使用karaf脚本启动OpenDaylight.使用这个客户端您可以访问karaf,使用命令行$ ./bin/karaf -jmx 重新安装BGP-PCEP相关功能及组件如前面提到的。

这时可以用JConsole连接到上面控制器启动的JMX服务器来访问runtime beans. JConsole工具箱是默认随JDK一起发布的。可以通过Java主目录启动,如下所示:


$JAVA_HOME/bin/jconsole


通过它来连接到正在运行的karaf进程。 下面是JConsole工具连接到karaf容器截图:



如果出现提示,请选择选择不安全连接选项。 这将引导您到JMX控制台:



3 对于每个BGP对端来说,都可以可以用BGP peer的名称来得到runtime bean。根据我们前部分“配置和检索BGP”所述的配置,我们将可以看到一个名为“example-bgp-peer”的MBean。下面屏幕截图将显示可用的BGP统计信息。下面的截屏将显示可用的BGP统计信息。


BgpPeerState的属性可以通过访问“example-bgp-peer”下面的MBean获得:



同样,BgpSessionState也可以通过Attributes选项来访问。每个统计信息列表通过key-value方式对应相关属性,如截屏所示:



4 通过复位RPC操作,可以访问相同的MBean,如截图所示。使用resetSession RPC可以重新启动客户机会话。执行此操作之后,客户端可以使用重新连接策略。



使用resetStats RPC来重置对端统计数。重置之后将清空消息计数器和时间戳的值。



5 通过添加到pcep-topology中的ip地址获取PCC节点的属性信息



PCEP的resetStats RPC实现可以通过Operation下面的PCC IP address的runtime bean访问,此操作可用于将消息计数器和时间戳的统计信息重置为0.



可以使用类似方式访问用tearDown会话操作。从而实现关闭PCC和PCE之间的连接:



   启用TCP MD5验证方式,增强BGP与PCEP连接安全



在默认情况下,在opendaylight中 BGP和PCEP连接没有使用TCP MD5认证。该配置对于BGP的安全连接非常有用的。它可以手动的方式通过RESTCONF启用。在下面,我们将描述手动配置这些属性。


预备条件


作为先决条件,我们要确认BGP和PCEP在前面的配置中已经配置完成。此外,为了允许BGP peer之间进行TCP MD5认证,还需要对路由器做相应配置。关于路由的配置在这里就不再说明了。


操作指南


在下面的部分中,我们将介绍如何手动配置BGP-PCEP的TCP MD5认证。每部分我们将对应重要文件,并重点介绍其中的详细参数。


Opendaylight BGP配置TCP MD5认证:


1 确认你已经使用karaf脚本启动Opendaylight,并按照先前章节中说明配置BGP。


2 除了在前面文章中描述的31-bgp.xml和41-bgp-example.xml XML文件之外,我们还需要另一个名为20-tcpmd5.xml的文件,该文件才能启用TCP MD5。默认20-tcpmd5.xml里面的内容是被注释的,为了启用TCP MD5需要放开注释。再说一下,所有的这些XML文件都可以从karaf根目录下,etc / opendaylight / karaf文件夹下找到。当karaf启动并且如前面配置所述安装BGP和PCEP的功能时,才会生成上述的配置文件。


3 配置31-bgp.xml XML文件中的TCP MD5部分:取消对TCP MD5部分的注释,配置“md5-channel-factory”服务属性:



4 配置41-bgp-example.xml XML文件TCP MD5部分:在XML文件中创建BGP对端配置的password标签,并配置password属性添加到标记中。为了建立连接,需要配置对BGP对端以相同的密码。该配置需要为每个BGP对端配置,并执行启用TCP MD5验证。最后,重新启动karaf实例并重新安装新的设置的BGP功能。



Opendaylight PCEP配置TCP MD5认证:


1 确保您已使用karaf脚本启动OpenDaylight,并按照先前配置说明中的配置PCEP。


2 确保20-tcpmd5.xml的内容未注释。


3 在32-pcep.xml的XML文件中配置TCP MD5部分:就像在BGP配置中一样,取消TCP MD5部分的注释并设置“md5-channel-factory”服务属性:



4 在39-pcep-provider.xml XML文件中配置TCP MD5部分:添加PCC客户端条目包括IP地址及其密码。请注意,PCC客户端还需要配置对应密码,以便成功进行TCP MD5身份验证。重新启动karaf并重新安装PCEP功能,配置才能生效。



使用OpenConfig实现的BGP组件配置



除了用手动配置的方式和RESTCONF来配置,Opendaylight还提供用OpenConfig进行配置BGP的方法。Openconfig是一个对于供应商中立的数据模型,它可以对网络进行无缝管理和配置。在一份RFC草案(h t t p s : / / t o o l s . i e t f . o r g / h t m l / d r a ft - i e t f - i d r - b g p - m o d e l - 0 0)中定义了BGP的Yang数据模型,在opendaylight BGP项目中实现了对它的支持。


预备条件


为了顺利的使用OpenConfig,需要安装两个配件:odl-restconf,odl-netconf-connector-ssh。Restful API将用于配置BGP组件属性,而Opendaylight通过NETCONF协议来管理网络设备配置。


操作指南


以下说明将指导通过使用OpenConfig配置BGP的步骤。


1 使用先前配置中所述的karaf脚本启动OpenDaylight。


2 安装面向用户的功能,安装 OpenConfig及所需的所有依赖包:opendaylight-user @ root> feature:install odl-restconf odl-netconf-connector-ssh


3 配置BGP RIB的一个实例:使用以下PUT请求设置RIB属性。 设置router-id和属性以适合您的环境。 “router-id”对应于BGP标识符“bgp-rib-id”和“as”映射到自动系统编号“local-as”,如前文所述。


URL: http://:8181/restconf/config/openconfig-bgp:bgp/glo

bal/config

Method: PUT

Content-Type: application/xml

Body:



4 BGP对端配置:使用以下PUT请求添加新的BGP对端实例信息。


注意:是指可以访问Opendaylight控制器的IP地址。


URL:

http://:8181/restconf/config/openconfig-bgp:

bgp/openconfig-bgp:neighbors

Method: POST

Content-Type: application/xml

Body:



5 BGP应用对端配置:如果Opendaylight配置为作为BGP speaker,举例允许任何BGP连接,则应用对端配置也需要应用。以下用PUT请求,它来配置Opendaylight应用对端。注意,OpenConfig API认为application-peer在neighbor属于peer-group application-peers。


URL: http://:8181/restconf/config/openconfig-bgp:bgp/

openconfig-bgp:neighbors

Method: POST

Content-Type: application/xml

Body:

172.16.17.31

application-peers


实现BGP和PCEP协议的新扩展



BGP和PCEP协议提供可扩展性的功能。很多RFC和相关草案用于对这两个协议的扩展。Opendaylight BGP-PCEP实现提供一些方式来支持这些扩展功能。在本部分,我们将看看实施指南,BGP和PCEP协议新扩展。


BGP解析器模块实现目前支持以下RFC:


RFC3107 – Carrying Label Information in BGP-4


RFC4271 – A Border Gateway Protocol 4 (BGP-4)


RFC4724 – Graceful Restart Mechanism for BGP


RFC4760 – Multiprotocol Extensions for BGP-4


RFC1997 – BGP Communities Attribute


RFC4360 – BGP Extended Communities Attribute


RFC6793 – BGP Support for Four-Octet Autonomo

us System (AS) Number Space


RFC4486 – Subcodes for BGP Cease Notification Message


RFC5492 – Capabilities Advertisement with BGP-4


RFC5668 – 4-Octet AS Specific BGP Extended Community


RFC6286 – Autonomous-System-Wide Unique BGP Identifier for BGP-4


RFC5575 – Dissemination of Flow Specification Rules


RFC7311 – The Accumulated IGP Metric Attribute for BGP


RFC7674 – Clarification of the Flowspec Redirect Extended Community


PCEP基本解析器支持以下RFC:


RFC5440 – Path Computation Element (PCE) Communication Protocol (PCEP)


RFC5541 – Encoding of Objective Functions in the Path Computation Element


Communication Protocol (PCEP)


RFC5455 – Diffserv-Aware Class-Type Object for the Path Computation Element


Communication Protocol


RFC5521 – Extensions to the Path Computation Element Communication Protocol


(PCEP) for Route Exclusions


RFC5557 – Path Computation Element Communication Protocol (PCEP)


Requirements and Protocol Extensions in Support of Global Concurrent


Optimization


RFC5886 – A Set of Monitoring Tools for Path Computation Element (PCE)-Based


Architecture


预备条件


作为先决条件,请确保已使用“git clone”命令从Opendaylight github下载到 BGP-PCEP项目:


git clone https://git.opendaylight.org/gerrit/bgpcep


要实现对BGP和PCEP的扩展,您需要创建开发环境,为 Opendaylight开发做准备。 必要的工具和实用程序包括:Java JDK 8,Maven v3.3.1或更高版本,Git客户端,您自己选择的代码编辑器。


操作指南


以下各章节将重点介绍使用RFC或草案扩展BGP和PCEP协议的一些实施指南。


编写BGP扩展的准则:


为要实现的扩展,创建单独的maven包,在新的bundler pom文件中添加base-parser bundles 依赖关系:


${project.groupId}

bgp-parser-api

${project.groupId}

bgp-parser-spi


Yang建模的扩展:你可以写新的Yang模型或在现有模型基础上扩展新的元素,这取决于你的需求。 一旦Yang模型创建,使用Maven命令mvn clean install构建新包。 这将为定义的Yang模型生成JAVA类。


实现解析器和序列化:bgp-parser-spi包提供了* Parser.java和Serializer.java JAVA接口来做解析和序列化。这些接口名称以协议元素的名称为前缀,例如BGPKeepAliveMessageParser.java实现了MessageParser.java和MessageSerializer.java。 需要添加的扩展的任何新元素都应该实现他们的* Parser和* Serializer接口。


注册解析器和序列化器:添加一个继承自AbstractBGPExtensionProviderActivator类的新Activator类。解析器和序列化程序将被注册在这个新的Activator类里。 要注册新的地址和后续地址系列,您将要添加地址系列标识符/后续地址系列标识符(AFI / SAFI)。 如果要这样做创建另一个继承自AbstractRIBExtensionProviderActivator类的新Activator类。


更新BGP XML配置文件:在31-bgp.xml文件注册新解析作为新模块,如下所示:



将模块作为bgp-parser-base的新扩展,如下所示:



将新扩展的实例添加到服务部分,如下所示:



如果添加新的AFI / SAFI,请务必将它们注册到RIB,如下所示:



对于新的扩展将生成扩展的数据存储配置,如下所示,并将以下参数添加到Yang模型中,创建新的配置文件。它将生成* Module和* ModuleFactory类:



使用mvn clean install maven命令构建新工件, 这应该生成Module和ModuleFactory类。在* Module类的createInstance方法中,生成一个之前创建的Activator解析类的实例。



编写新PCEP扩展的指南:


为您想实现的扩展创建单独的maven bundle/artifact:把base-parser做为新的扩展包的依赖包。



为新元素创建新的Yang模型或根据要求更新现有元素。使用mvn clean install Maven命令创建新的包,生成定义的Yang模型的Java类。


实现解析和序列化程序:pcep-spi软件包提供了名为* Parser.java和* Serializer.java的Java解析和序列化接口。 需要添加的扩展的任何新元素都应该实现他们的* Parser和* Serializer接口。


注册解析器和序列化器:添加一个继承自AbstractPCEPExtensionProviderActivator类的新的Activator类,解析器和序列化器将被注册到该类中。


更新PCEP XML配置文件:在32-pcep.xml文件中注册新解析器做为一个新的模块,如下所示。



将模块作为新扩展添加到pcep-parser-base中,如下所示:



将新扩展的实例添加到服务,如下所示:



对于新的扩展解析器扩充odl-pcep-impl-cfg.yang中的配置数据存储,如下所示。 这将生成* Module和* ModuleFactory类:



使用maven命令mvn clean install构建新应用,生成Module和ModuleFactory类。在*Module类的createInstance方法中,生成之前创建的解析器Activator类的新实例,如下图所示:



参见


在当前实现中,BGP项目支持两个扩展如下,一起列出相关实现的Opendaylight Github仓库。


Linkstate  Opendaylight github repository: h t t p s : / / g i t h u b . c o m / o p e n d a y l ig h t / b g p c e p / t r e e / s t a b l e / b e r y l l i u m / b g p / l i n k s t a t e

Flowspec  Opendaylight github repository: h t t p s : / / g i t h u b . c o m / o p e n d a y l ig h t / b g p c e p / t r e e / s t a b l e / b e r y l l i u m / b g p / f l o w s p e c


PCEP实现支持两个扩展:


Stateful RFCs:  h t t p s : / / t o o l s . i e t f . o r g / h t m l / d r a f t - i e t f - p c e - s t a t e f u l - p c e- 1 4 and h t t p s : / / t o o l s . i e t f . o r g / h t m l / d r a f t - i e t f - p c e - p c e - i n i t i a t e d - l s p- 0 5 O p e n d a y l i g h t g i t h u b r e p o s i t o r y : h t t p s : / / g i t h u b . c o m / o p e n d a y l i g h t / b g p ce p / t r e e / s t a b l e / b e r y l l i u m / p c e p / i e t f - s t a t e f u l 0 7

Segment routing RFCs:  h t t p s : / / t o o l s . i e t f . o r g / h t m l / d r a f t - i e t f - p c e - s e g m en t - r o u t i n g - 0 1

Opendaylight github repository : h t t p s : / / g i t h u b . c o m / o p e n d a y l i g h t / b g p c e p / tr e e / s t a b l e / b e r y l l i u m / p c e p / s e g m e n t - r o u t i n g


扩展实现也可以查看参考。


编者按


《OpenDaylight Coolbook》这本书由云技术社区志愿者翻译组翻译,因为没有出版纸质书的计划,本书的翻译只会翻译重点章节。


翻译的过程是译者和作者思想沟通的过程,也是一个学习的过程,中间充满艰辛,也充满快乐,欢迎大家加入云技术社区翻译小组,一起交流、学习、提高,加入请联系群主(群主微信:xiaolikvm,云技术社区联合创始人:北极熊微信:hadxiaer),也欢迎大家推荐好的英文技术资料到云技术社区,由社区会组织翻译,一起共同学习。


云技术越来越成熟,但是云计算网络技术目前有好几个流派,OpenDaylight就是其中之一,《OpenDaylight Coolbook》侧重概念及实战,阅读本书可以快读了解OpenDaylight。


以下社区优秀翻译参加了本书的翻译:

云技术社区 金牌翻译 韩卫    第一章

云技术社区 金牌翻译 邓嘉浩  第三章

云技术社区 金牌翻译 路君    第四章

云技术社区 金牌翻译 刘志红  第五章

云技术社区 金牌翻译 罗晶    第六章

云技术社区 金牌翻译 罗莹    第九章

云技术社区 金牌翻译 孟驰    第十章

云技术社区 金牌翻译 文杰    第十一章


校对

云技术社区 金牌翻译 陈海  第一,三,四章

云技术社区 金牌翻译 陈建永 第五,六,九章

云技术社区 金牌翻译 黄继敏 第十,十一章  


在此感谢他们辛苦而卓越的付出!


已经发布章节链接:

《OpenDaylight Cookbook》第一章:OpenDaylight原理(上)

《OpenDaylight》第一章:OpenDaylight原理(中)

《OpenDaylight》第一章:OpenDaylight原理(下)

《OpenDaylight》第三章:虚拟客户边界

《OpenDaylight》第四章:动态互联(1)

《OpenDaylight》第四章:动态互联(2)

《OpenDaylight》第四章:动态互联(3)

第五章:虚拟网络:OpenFlow,与OpenStack集成,边缘虚拟网络



相关阅读:

高端私有云项目交流群,欢迎加入!

附PDF下载:《迁移到原生云应用架构》第二部分

加入云技术社区OpenStack技术讨论QQ群,群共享有N多资料,加群主QQ:502207183,并注明城市、行业、技术方向。