在开始实践之前我们首先需要了解一些NFV概念和术语。

NFV 和NFV MANO架构的概念

NFV(Network Function Virtualization)
引用维基百科的定义:Network functions virtualization (NFV) is a network architecture concept that uses the technologies of IT virtualization to virtualize entire classes of network node functions into building blocks that may connect, or chain together, to create communication services.

网络功能虚拟化(NFV)是一种网络架构概念,其使用IT虚拟化技术将整个类别的网络节点功能虚拟化为可连接或链接在一起以创建通信服务的构建块。

NFV MANO(NFV Management and Orchestration)
NFV MANO是ETSI(European Telecommunications Standards Institute)定义的一个NFV架构。

NFV MANO架构主要包括三个部分:
•NFV Orchestrator(NFV编排器)
•VNF Manager(VNF管理器)
•Virtualized Infrastructure Manager (虚拟基础设施管理器)
下面是NFV MANO架构图
OpenStack环境中的NFV实践-LMLPHP
NFV MANO 是图上天蓝色框内的部分,其中三个主要功能块NFVO,VNFM,VIM互相连接,因为这是一个设计架构图,把连接称为reference point,在具体实现中这些连接就是功能块之间的API接口。
图上左边的部分从下往上看,最下面是NFVI,往上是VNF实例,再往上连接着网络运营商传统的EMS(Element Management System)网元管理系统和OSS/BSS(Operations support system/business support system)运营支撑系统/业务支撑系统,可以看到MANO架构中的VNFM和NFVO也分别和这两个系统有接口。

下面是图上一些模块的解释
NFVI(NFV Infrastructure)
NFVI包括NFV底层物理的服务器,存储,网络设备,以及虚拟化后的虚拟机,虚拟存储,虚拟网络资源。

VNFD(VNF Descriptor)
VNFD就是一个VNF的部署模板,包含了一个VNF自身的所有信息。图上的VNF Catalog,就是所有VNFD的目录。

VIM(Virtualized Infrastructure Manager)
VIM通常是一个云平台,管理一个域下的NFVI,在一个NFV架构下可能有多个NFVI,每个NFVI都有一个对应的VIM来管理。在我们的环境中,VIM的实现就是OpenStack。

VNFM(VNF Manager)
VNFM主要管理VNF的生命周期,负责包括调用VIM,根据VNFD(VNF Descriptor)创建,维护,终结VNF,VNF监控,VNF的self-healing,扩容缩容。VNFM可能有多个。

NFVO(NFV Orchestrator)
我们知道可能有多个VIM管理多个域的NFVI,也可能有多个NFVM分别管理它们的VNF。所以在上层还需要一个能协调管理这些资源和服务的东西,就是NFVO。

对于NFVI的资源,NFVO需要与多个VIM的接口交互,协调,认证,分配,释放这些资源。对于VNF的服务,NFVO需要:
1、与多个VNFM的接口交互,分别创建这些VNF。
2、创建完VNF后,还要管理VNF的拓扑,对这些VNF进行编排,也就是实现VNFFG(VNF Forwarding Graph),也就是SFC(Service Function Chain)。

OpenStack环境中的NFV实践

看过了上面这些概念,应该会对NFV的架构有一些了解,接下来就通过在OpenStack环境中的一个实验来体验一下NFV的这些概念和设计应该如何实现。

后文会有一个演示视频,用OpenStack作为VIM,用Heat作为VNFM,Heat的template作为VNFD,用shell脚本调用Heat,创建一个租户内的防火墙。

演示的防火墙的镜像使用了Hillstone云界虚拟防火墙,云界是Hillstone在OpenStack云环境下的网络安全解决方案,可以给租户网络提供高可用的路由,VPN,QoS,端口映射,入侵检测,病毒防护等功能。

Heat是什么
Heat是OpenStack的编排项目,目标是在OpenStack云上编排应用,管理应用和基础设施的整个生命周期。
Heat用模板文件来描述应用的基础设施(比如虚拟机,网络,云硬盘等)。

网络拓扑
虚拟防火墙在OpenStack中的网络拓扑图:
OpenStack环境中的NFV实践-LMLPHP
手动在租户中部署虚拟防火墙,需要做:
1、上传镜像
2、创建网络:防火墙的管理网络,HA网络,外部网络,内部网络
3、启动两个防火墙实例
4、关闭各个端口的安全组
5、用防火墙的管理接口配置HA,接口地址,安全规则,SNAT,DNAT等业务

可以看到手动部署这样一个环境的工作量其实不小,所以需要Heat。

用Heat编排虚拟防火墙
有了Heat,我们只需要写好VNF的模板,用模板创建Heat stack,就可以一键创建防火墙的整个拓扑。
这次演示会创建两个stack:
1、hillstone stack,负责创建防火墙的网络,端口,虚拟机。
2、rest_client stack,会首先创建一个centos7虚拟机作为客户端向防火墙发送restful请求配置防火墙,然后在内部网络上创建一个cirros虚拟机在最后用来验证防火墙功能。

详细的流程可以参考下图:
OpenStack环境中的NFV实践-LMLPHP
1、创建hillstone stack,包括网络,端口,两个防火墙虚拟机
2、hillstone stack创建完成后,输出两个hillstone虚拟机的ip地址
3、通过shell脚本的方式,读取第一个stack的output,并以此为参数创建rest_client stack,这个stack会在防火墙管理网络上创建一个centos7虚拟机并传入userdata脚本,同时在内网创建一个cirros虚拟机(cirros的网关设在防火墙上)
4、rest_client启动后会运行userdata脚本,向两个防火墙发送请求,进行初始化配置
5、最后,手动登录cirros虚拟机ping外网,进行HA切换,验证防火墙功能

演示视频
下面是演示的视频:

和MANO架构的距离

要实现MANO架构还需要做:
•开放的API接口
•多VIM支持
•VNFM:兼容不同类型的VNF,VNF监控,self-healing,auto-scaling,标准化的VNF模板
•NFVO:多VIM资源的协调,VNF的编排,VNFFG/SFC
•……………

可以看到要做好这个不是一个小工程,在NFV/SDN被OpenStack开发者和用户密切关注的背景下, OpenStack社区项目tacker应运而生。
OpenStack环境中的NFV实践-LMLPHP

Tacker是OpenStack的NFV编排项目,主要目标是实现MANO架构,可以说是未来NFV的一个方向,很有潜力的一个项目,我们公司的大师兄龚永生也在tacker上有一定投入,是tacker项目的core。

总结
上文描述了NFV MANO架构的一些概念和一个简单的演示,后续我会探索tacker,尝试把hillstone云界作为VNF放到tacker中,希望读者看完本文能有所收获。

05-07 15:56