OPNFV SFC简介

2018-03-30 17:57:03 浏览数 (1)

今天主要让大家了解下下ODL 中SFC的实现,以下如有描述不准确的地方请指正。

1 基本概念

本架构参考ODL SFC项目,其已经合并到OPNFV的Brahmaputra平台

1.1 Service Functions

SF提供特定的网络服务,例如Firewall,NAT,QoS,DPI等。在OPNFV中,SF指提供虚拟网络功能的设备。

1.2 Service Function Forwarders

SFF是Service Chaining的核心组件,在OPNFV中,他是一个OVS bridge,在每个compute节点上都有一个br-int桥作为SFF。SFF的职责是引导Traffic到SF或是下一个compute节点,可以通过SDN控制器例如ODL对SFF进行编程。

1.3 Service Chains

在ODL的SFC项目中,Service Chains由如下组件构成:

SFC:Service Chain Function由多个有顺序的SF组成

SFP:Service ChainPath一个SFC的实例。

RSP:Rendered Service Path是实际Service Chain的实现。通过SFP和SFC来创建一个Service Chain。如果SFP没有提供SF的实例,那么根据SFs算法选择一个,当创建完RSP后,ODL将OpenFlow流表下发到SF上。

1.4 Classifiers

Classifier是进入Service Chain的第一个点,Classifier映射Traffic进入Service Chain,并将Traffic封装到VXLAN-GPE-NSH tunnel中。可以通过Matching来实现Classifier,例如简单的如ACL,复杂的如PCRF,DPI等。

2 Service Chaining Encapsulation

SFC的实现依赖于VXLAN-GPE-NSH协议的支持,下边我们分别讲解下NSH和VXLAN-GPE

2.1 为什么需要NSH

如果没有NSH,Service Chain会遇到如下问题:

  1. 当前的Chian的实现,都是基于VLAN或是Routing的静态配置的。

2.在Service chain形成之后,数据业务的路径和网络的拓扑都不能动态的修改

3.不能动态的插入新的业务到Chian中

4.不能提供端到端的可视化,OAM,trouble shooting和性能管理

5.SF之间彼此独立,不能共享Path和Metadata信息

通过NSH,Traffic可以很容易的穿过Service Chain。如果没有NSH封装,那么在Traffic经过的每个SF上都需要对流量进行分类识别,不仅影响性能,而且不利于扩展。在NSH header中值得关注两个字段:

1)NSP(NSH Path):业务Path ID,可以给每个业务分配一个NSP,SF根据NSP对Traffic进行处理。

2)NSI(NSH Index):NSI指报文在Service Chain中的跳数,初始值为255,每经过一个SF,减一,如果NSI减到0,则丢弃此包,避免产生环路,类似IP报文中的TTL。

2.2 VXLAN-GPE

在ODL SFC中NSH被封装在VXLAN-GPE(VXLAN Generic Protocol Extension)报文中,VXLAN-GPE-NSH报文封装格式如下:

VXLAN-GPE特点:

1.支持对多种协议的封装,包括IPv4,IPv6,NSH,Ethernet,标准VxLAN仅支持Ethernet报文

2.协议类型字段(P-bit)

3.In-Band OAM flag(O-bit)

4.新增Version字段

5.低8bit用于协议类型,高8bit预留

6.为VXLAN-GPE分配新的UDP端口

其头部如下所示:

VXLAN-GPE Header

VxLAN-GPE与VxLAN的区别:

1. VXLAN-GPE可以转发VXLAN的包,因为VXLAN承载的是Ethernet报文,其VxLAN-GPE的UDP端口号与VxLAN相同

2. VXLAN不能转发VXLAN-GPE的包

3. 在VxLAN与VxLAN-GPE共存的环境中,VxLAN-GPE需要使用新的UDP端口

4. VxLAN-GPE通过NSH携带Metadata信息,而VxLAN不支持NSH

3 VNF Manager

在OPNFV SFC项目中,需要VNF Manager对SF的VM进行生命周期的管理,这里选择Openstack的Tacker对VNF进行管理。Tacker接收ODL SFC的配置,管理SF VMs,并且转发此配置到ODL SFC中,时序图如下:

3.1 Tacker

Tacker是Openstack的官方项目,提供 ETSI MANO架构中的 VNF Manager和NFVO功能。Tacker架构如下:

VNFM功能:

1.VNF基本生命周期管理,包括创建,删除,更新

2.VNF的健康检查,提供ping,http等各种方法监控VM,业务是否正常

3.提供VNF的auto scaling功能

4.实现VNF初始化配置

NFVO功能:

1.通过模板(TOSCA&HEAT)提供VNF端到端的部署

2.支持SFC,Tacker负责提供SFC Driver,ODL SFC或是Neutron负责功能实现。

3.VIM资源的调度,检查和分配。

4.可以管理多个VIM和Sites。

5.支持物理NF(Network Function)和虚拟NF

3.2 Tacker-ODL SFC实现架构

此图为ODL实现SFC功能的架构,除了控制器方案,还可以通过Neutron来实现SFC。

4 OPNFV SFC Network Topology

下图为OPNFV Brahmaputra平台的SFC的网络拓扑:

5 OVS NSH patch workaround

ODL使用NSH-VXLAN-GPE封装实现SFC,VXLAN在SF VM中终结,这点是很重要的,这样SF可以看到NSH Header,处理NSI和NSH Metadata。而在Openstack中,VXLAN终结在OVS Bridge上,不是在VM里。当前OVS的版本(2.5)还不支持NSH头,但是社区通过一个私有分支提供了NSH初始版本。当前VXLAN的封装/解封装通过VTEP实现的,而OVS希望通过FLOW实现。

下图为报文发送到SF的流程:

1.通过GBP(Group Based Policy)将Client报文redirect到Ingress Classifier

2.Classifier对报文进行识别分类,分配NS,进行VXLAN-NSH封装,然后发送的SFF

3.SFF解封装VXLAN报文,如果需要发送到SF,则通过VTEP发送到Linux Kernel

4.VTEP对报文进行第二次的VXLAN-NSH的封装.

5.封装完成之后,查询Linux Kernel Route表,从TAP口发送回SFF。

6.在SFF中,报文根据VXLAN匹配要去的SF,然后将报文上送给SF

7.从TAP口将VXLAN-NSH报文上送给SF。

下图为从SF发送到SFF的流程:

1.SF将封装好的VXLAN-NSH报文发给SFF

2.SFF根据入端口和VXLAN匹配此报文,交给Linux Kernel处理

3.报文查询路由通过VTEP口返回SFF

4.VTEP解封装VXLAN-NSH

5.SFF继续下一步处理,将报文交给下一个SF,或是从Egress Classfier出去。

6 参考资料

https://wiki.openstack.org/wiki/Tacker

http://artifacts.opnfv.org/sfc/brahmaputra/docs/design/architecture.html#Service -chains

https://docs.google.com/presentation/d/18AGaiysVgHOd_fIHVpObMO7zUkMjJGOQ98CUwkxU1xo/edit#slide=id.p20

0 人点赞