本节摘要:VNF 不是装好就完事的静态软件,它有一套完整的生命周期管理(实例化、配置、扩缩容、愈合、终止)。而单个 VNF 往往不够用,多个 VNF 要通过服务链(SFC)串联起来,才能形成端到端的网络服务——比如流量依次经过分类器、防火墙、NAT、负载均衡。本节讲清这两块。
阅读完本节,你应当能够:
传统网络设备是"买来、上架、配置、一直跑"的静态模式,生命周期管理很简单(坏了就修或换)。但 VNF 是软件实例,它的生命周期复杂得多——可以随时创建、销毁、扩容、缩容、迁移。这种动态性是 NFV 灵活性的来源,也是管理上的挑战。
想象一个企业 VPN 服务:包含一个 vFirewall(防火墙)、一个 vRouter(路由器)、一个 vLB(负载均衡)。这三个 VNF 要按正确顺序串联起来,流量才能正确处理:进来的流量先过防火墙过滤,再走路由器转发,最后到负载均衡分发到后端。这种"按顺序串联多个网络功能"的机制叫服务链(SFC,Service Function Chaining)。
服务链的灵活性是 NFV 的核心价值之一。传统网络里,流量要经过哪些设备是由物理拓扑决定的(设备怎么连线流量就怎么走);NFV 里,流量经过哪些 VNF 是由服务链逻辑决定的,可以随时编程调整——需要加一个深度包检测?在服务链里插入一个 vDPI 就行,不用改物理连线。
一个 VNF 从被创建到被销毁,经历五个阶段:
实例化(Instantiate):VNFM 根据 VNFD 创建 VNF 实例。向 VIM 申请资源(CPU、内存、网络),启动虚拟机或容器,加载 VNF 软件。这是"从无到有"的过程。
配置(Configure):VNF 起来后,注入初始配置——防火墙规则、路由表、NAT 策略等。配置可以来自 VNFD 的模板,也可以来自外部管理系统。
运行(Operate):VNF 正常处理流量,同时被监控。运行期间可能有配置变更、版本升级等操作。
扩缩容(Scale):
愈合(Heal):VNF 故障时,自动重启或替换。第 2 章讲过愈合的细节。
终止(Terminate):业务结束时,按顺序关闭 VNF,释放资源。终止前要处理好状态(比如把连接优雅断开,不要中断用户业务)。
| 阶段 | 谁执行 | 关键操作 |
|---|---|---|
| 实例化 | VNFM + VIM | 申请资源、启动实例 |
| 配置 | VNFM / EM | 注入初始配置 |
| 运行 | VNF 自身 | 处理流量 |
| 扩缩容 | VNFM | 增减实例 |
| 愈合 | VNFM | 重启或替换 |
| 终止 | VNFM + VIM | 关闭、释放资源 |
VNF 的生命周期管理依赖 VNFD(VNF Descriptor)。它是一个模板文件,告诉 VNFM"这个 VNF 长什么样、怎么部署、怎么配置"。VNFD 里包含:
VNFD 让 VNF 的部署变成"声明式"的——你描述"我想要什么样的 VNF",VNFM 按描述去实现,而不是手动一步步操作。这是"网络即代码"的体现。
单个 VNF 通常只做一个功能(防火墙只过滤、路由器只转发)。但实际业务需要多个功能协作:进来的流量要先过防火墙过滤恶意流量,再经 NAT 转换地址,最后由负载均衡分发到后端服务器。这种"按顺序串联多个网络功能"的机制就是服务链(SFC,Service Function Chaining)。
一条典型的服务链:
服务链的关键特征:
| 传统物理服务链 | NFV 虚拟服务链 |
|---|---|
| 由物理拓扑决定 | 由逻辑定义决定 |
| 增减功能要改物理连线 | 增减功能改软件配置即可 |
| 所有流量走同一条路 | 不同流量走不同链 |
| 部署周期长 | 部署周期短 |
服务链怎么实现流量的有序转发?几种主流方式:
基于 SDN 的服务链:SDN 控制器集中管理流量路径,在每个 VNF 节点上配置转发规则,引导流量按顺序经过各 VNF。这是最灵活的方式,因为 SDN 控制器可以动态调整路径。
基于 VLAN/VXLAN 的服务链:给经过服务链的流量打上特定的 VLAN 标签或 VXLAN 封装,每个 VNF 根据标签决定下一跳。实现简单但灵活性有限。
基于 SRv6 的服务链:用 IPv6 扩展头(Segment Routing)编码流量要经过的 VNF 节点列表,每个节点处理后更新指针指向下一个。这是新一代的服务链技术,灵活性和可扩展性都好。
💡 关键直觉:服务链是 NFV 和 SDN 协同的最佳体现。NFV 提供虚拟化的功能节点,SDN 提供灵活的流量调度。没有 SDN,服务链的流量路径还是僵化的;有了 SDN,服务链可以随业务需求动态调整。这也是为什么 NFV 和 SDN 经常一起部署。
设计 VNF 时,一个重要原则是控制平面和数据平面解耦:
解耦的好处是各司其职——控制平面可以用通用软件框架(甚至微服务),数据平面用高性能实现(DPDK 加速)。5G 核心网的 CUPS(Control and User Plane Separation)就是这种思路的典型应用。
VNF 扩缩容时要处理状态问题。如果一个 vFirewall 有 2 个实例,各自维护着已建立的连接状态表,扩容到 3 个实例时新实例没有状态,可能导致已有连接的处理中断。几种应对:
服务链里某个 VNF 故障了,整条链可能断掉。要设计容错:
⚠️ 常见坑:服务链越长,延迟和故障点越多。每多一个 VNF 节点,流量就多一跳处理延迟,也多一个可能故障的点。设计服务链时要在"功能完整"和"路径简短"之间平衡,不要为了堆功能把链做得太长。
下一节看 VNF 向 CNF 的云原生演进——从虚拟机到容器,从单体到微服务,带来了什么改变和挑战。

服务链(SFC)是 VNF 组合能力的集中体现:分类器给流量贴链标签,流量按处方依次穿过功能节点。实战中最容易栽的两个坑都在图里标注了——瓶颈转移:链上单点扩容后瓶颈会转移到下一环,扩容决策必须链级联动而不是节点级独立;有状态节点的亲和:会话创建在哪个 DPI 实例上,后续包就必须回到那个实例(否则会话表未命中、业务中断),这要求分流算法与实例扩缩容严格协同。这两个坑的本质是同一个教训:服务链是一个整体系统,任何"只优化自己这一环"的局部理性,都会被链级的全局约束惩罚。
| 阶段 | 自动化目标 | 高频坑 | 检查手段 |
|---|---|---|---|
| 实例化 | 模板一键拉起 | 配置注入顺序错误 | 干净环境重复部署演练 |
| 配置 | 声明式收敛 | 配置漂移无察觉 | 定期比对期望态与实际态 |
| 伸缩 | 按指标自动加减实例 | 伸缩风暴来回震荡 | 引入冷却期与步长限制 |
| 自愈 | 探针失败自动重启 | 假活探针放行僵死 | 业务级探针而非进程级 |
| 升级 | 滚动替换无感 | 会话型网元中断 | 双轨并行加会话迁移 |
| 终止 | 资源与配置全量回收 | 残留路由与漏洞 | 终止后资源对账 |
这张表的六行覆盖了 VNF 的一生,每行的"高频坑"一列是从故障复盘里反复出现的模式。特别值得展开的是配置漂移:运维人员在紧急情况下手工改了配置救火,事后没有回流到模板,下次重新部署时模板与线上的差异就成了隐蔽炸弹——解药是把"配置只改模板、模板再下发"定为铁律,紧急手工改动必须登记并在四十八小时内模板化。生命周期管理的成熟度,最终体现为这张表里每一行都有剧本、都有演练记录、都有复盘归档。
再强调一次链级思维的价值:服务链上任一节点的容量、时延、可靠性变化都是全链事件——把"链"而不是"节点"作为容量规划和变更管理的原子单位,是 VNF 组合时代与单设备时代运维思维的最大分野。所有链级工具(链路追踪、链级容量表、链级变更日历)都值得投入,因为它们对应的正是这个分野。