一、引言:NFV 与云的天然契合
在深入探讨 NFV 的云环境部署之前,我们必须理解一个核心问题:为什么 NFV 需要云?
1.1 NFV 的本质需求
NFV 将网络功能从专有硬件解耦,以软件形式运行。这意味着:
传统网络设备 = 专有硬件 + 专有软件
↓ NFV化
虚拟网络功能(VNF) = 通用硬件 + 虚拟化平台 + 网络功能软件
这个转变带来了对基础设施的新需求:
| 需求维度 | 具体要求 | 云能力的匹配 |
|---|---|---|
| 资源池化 | 计算、存储、网络资源统一管理 | ✅ 云平台核心能力 |
| 弹性伸缩 | VNF 实例动态扩缩容 | ✅ 云原生特性 |
| 自动化部署 | VNF 快速上线、迁移 | ✅ 云编排能力 |
| 多租户隔离 | 不同业务、用户隔离 | ✅ 云租户模型 |
| 按需计费 | 资源使用精确计量 | ✅ 云计费系统 |
1.2 云为 NFV 提供的核心价值
┌─────────────────────────────────────────────────────┐
│ 云平台赋能NFV │
├─────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────┐│
│ │ 资源管理价值 ││
│ │ • 统一资源池,消除孤岛 ││
│ │ • 动态分配,提高利用率 ││
│ │ • 自动回收,避免浪费 ││
│ └─────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────┐│
│ │ 运维效率价值 ││
│ │ • 自动化部署,缩短上线周期 ││
│ │ • 自助服务,降低运维门槛 ││
│ │ • 统一监控,简化故障定位 ││
│ └─────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────┐│
│ │ 业务创新价值 ││
│ │ • 快速试错,降低创新成本 ││
│ │ • 灵活组合,支持业务创新 ││
│ │ • 开放生态,促进技术演进 ││
│ └─────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────┘
二、理解云:NFV 的运行基础
在部署 NFV 之前,我们必须深入理解云的本质特征。
2.1 云的核心特性(云特性)
根据 NIST(美国国家标准与技术研究院)的定义,云计算具备五大核心特性:
2.1.1 按需自助服务(On-Demand Self-Service)
用户可以随时随地、自助式地获取计算资源,无需人工干预。
NFV 场景应用:
运维人员 → Horizon控制台 → 申请创建vFW实例
↓
自动分配资源 → 部署VNF → 业务上线
(全程无需硬件采购、安装、配置)
2.1.2 广泛的网络访问(Broad Network Access)
通过网络随时随地访问云服务,支持各种终端设备。
NFV 场景应用:
- 运维人员通过 Web 控制台管理 VNF
- API 接口支持自动化运维工具集成
- 移动端监控告警推送
2.1.3 资源池化(Resource Pooling)
计算、存储、网络资源池化,按需分配,多租户共享。
NFV 场景应用:
┌─────────────────────────────────────────────────────┐
│ 资源池化示意 │
├─────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Tenant A │ │ Tenant B │ │ Tenant C │ │
│ │ vEPC集群 │ │ vCDN集群 │ │ vFW集群 │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └────────────┼────────────┘ │
│ │ │
│ ┌─────┴─────┐ │
│ │ 资源池 │ │
│ │ CPU/MEM │ │
│ │ 存储/网络 │ │
│ └───────────┘ │
└─────────────────────────────────────────────────────┘
2.1.4 快速弹性(Rapid Elasticity)
资源可以快速、弹性地供应和释放,实现自动伸缩。
NFV 场景应用:
| 场景 | 弹性需求 | 实现方式 |
|---|---|---|
| 突发流量 | vLB 实例从 3 个扩展到 50 个 | 自动伸缩策略 |
| 业务低谷 | vCDN 节点从 20 个收缩到 5 个 | 资源释放回收 |
| 故障恢复 | VNF 实例自动迁移 | 实时迁移技术 |
2.1.5 可计量服务(Measured Service)
资源使用可以被监控、计量、报告,实现按需计费。
NFV 场景应用:
- 精确计量每个 VNF 的资源消耗
- 支持内部成本分摊或对外计费
- 资源利用率分析和优化
2.2 云服务模型
云服务分为三种主要模型:
┌─────────────────────────────────────────────────────┐
│ 云服务模型对比 │
├─────────────────────────────────────────────────────┤
│ │
│ IaaS (基础设施即服务) │
│ ┌─────────────────────────────────────────────────┐│
│ │ 用户管理:应用、数据、运行时、中间件、OS ││
│ │ 提供商管理:虚拟化、服务器、存储、网络 ││
│ │ 代表:OpenStack、AWS EC2、阿里云ECS ││
│ │ NFV相关性:★★★★★ (主要部署模型) ││
│ └─────────────────────────────────────────────────┘│
│ │
│ PaaS (平台即服务) │
│ ┌─────────────────────────────────────────────────┐│
│ │ 用户管理:应用、数据 ││
│ │ 提供商管理:运行时、中间件、OS、基础设施 ││
│ │ 代表:Cloud Foundry、Heroku、Google App Engine ││
│ │ NFV相关性:★★★ (部分MANO功能) ││
│ └─────────────────────────────────────────────────┘│
│ │
│ SaaS (软件即服务) │
│ ┌─────────────────────────────────────────────────┐│
│ │ 用户管理:无(直接使用应用) ││
│ │ 提供商管理:全部 ││
│ │ 代表:Salesforce、Office 365、Gmail ││
│ │ NFV相关性:★★ (VNF即服务场景) ││
│ └─────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────┘
NFV 主要采用 IaaS 模型:运营商管理 VNF 软件,云平台提供基础设施。
2.3 云部署模型
根据部署位置和所有权,云分为三种部署模型:
| 部署模型 | 描述 | NFV 适用场景 | 优势 | 挑战 |
|---|---|---|---|---|
| 私有云 | 企业自建,独享资源 | 核心网、敏感业务 | 安全可控、定制化 | 成本高、运维复杂 |
| 公有云 | 第三方提供,多租户共享 | 边缘计算、临时业务 | 成本低、弹性好 | 安全性、合规性 |
| 混合云 | 私有云 + 公有云 | 灵活部署、灾难恢复 | 兼顾安全与弹性 | 架构复杂、集成难度 |
NFV 混合云部署架构:
┌─────────────────────────────────────────────────────┐
│ NFV混合云架构 │
├─────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────┐│
│ │ 私有云(数据中心) ││
│ │ ┌─────────────────────────────────────────────┐ ││
│ │ │ vEPC核心网、vIMS、vHSS │ ││
│ │ │ 安全敏感、稳定要求高的业务 │ ││
│ │ └─────────────────────────────────────────────┘ ││
│ └─────────────────────────────────────────────────┘│
│ ↕ 安全连接 │
│ ┌─────────────────────────────────────────────────┐│
│ │ 公有云 ││
│ │ ┌─────────────────────────────────────────────┐ ││
│ │ │ vCDN边缘节点、临时业务测试 │ ││
│ │ │ 弹性需求大、成本敏感的业务 │ ││
│ │ └─────────────────────────────────────────────┘ ││
│ └─────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────┘
三、ETSI MANO 管理与编排体系
在云环境中部署 NFV,核心挑战是如何高效管理 VNF 的生命周期和网络服务。ETSI 定义的 MANO 架构正是解决这一问题的关键。
3.1 MANO 架构全景
MANO(Management and Orchestration)包含三个核心组件:
┌─────────────────────────────────────────────────────┐
│ MANO架构详解 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ NFVO (NFV Orchestrator) │ │
│ │ NFV编排器 │ │
│ ├───────────────────────────────────────────────┤ │
│ │ 职责: │ │
│ │ • 网络服务(NS)的生命周期管理 │ │
│ │ • 全局资源编排和调度 │ │
│ │ • NSD(网络服务描述符)管理 │ │
│ │ • 与OSS/BSS系统集成 │ │
│ │ │ │
│ │ 关键能力: │ │
│ │ • 服务链编排 │ │
│ │ • 跨VNF协调 │ │
│ │ • 策略执行 │ │
│ └───────────────────────────────────────────────┘ │
│ ↓ │
│ ┌───────────────────────────────────────────────┐ │
│ │ VNFM (VNF Manager) │ │
│ │ VNF管理器 │ │
│ ├───────────────────────────────────────────────┤ │
│ │ 职责: │ │
│ │ • VNF实例的生命周期管理 │ │
│ │ • VNFD(VNF描述符)解析 │ │
│ │ • 弹性伸缩(Scaling) │ │
│ │ • 故障自愈(Healing) │ │
│ │ │ │
│ │ 关键能力: │ │
│ │ • 实例化/终止 │ │
│ │ • 扩容/缩容 │ │
│ │ • 配置管理 │ │
│ └───────────────────────────────────────────────┘ │
│ ↓ │
│ ┌───────────────────────────────────────────────┐ │
│ │ VIM (Virtual Infrastructure Manager) │ │
│ │ 虚拟基础设施管理器 │ │
│ ├───────────────────────────────────────────────┤ │
│ │ 职责: │ │
│ │ • NFVI资源管理 │ │
│ │ • 虚拟机/容器的创建、删除 │ │
│ │ • 存储卷管理 │ │
│ │ • 网络配置 │ │
│ │ │ │
│ │ 代表实现: │ │
│ │ • OpenStack │ │
│ │ • VMware vCenter │ │
│ │ • Kubernetes │ │
│ └───────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
3.2 MANO 工作流程详解
3.2.1 VNF 实例化流程
用户请求 → NFVO → VNFM → VIM → NFVI
详细步骤:
┌─────────────────────────────────────────────────────┐
│ Step 1: 用户/系统发起VNF实例化请求 │
│ POST /vnf_instances │
│ { │
│ "vnfd_id": "vfw-001", │
│ "vnf_instance_name": "vfw-prod-01", │
│ "flavour_id": "large" │
│ } │
├─────────────────────────────────────────────────────┤
│ Step 2: NFVO解析请求,进行资源预检查 │
│ - 验证VNFD │
│ - 检查资源配额 │
│ - 选择部署位置 │
├─────────────────────────────────────────────────────┤
│ Step 3: NFVO向VNFM发起实例化请求 │
│ - 传递VNFD信息 │
│ - 指定实例参数 │
├─────────────────────────────────────────────────────┤
│ Step 4: VNFM向VIM申请虚拟资源 │
│ - 创建虚拟机 │
│ - 分配存储 │
│ - 配置网络 │
├─────────────────────────────────────────────────────┤
│ Step 5: VIM执行资源创建 │
│ - 调用OpenStack API │
│ - 创建VM、Volume、Network │
├─────────────────────────────────────────────────────┤
│ Step 6: VNFM执行VNF配置 │
│ - 注入配置 │
│ - 启动服务 │
│ - 健康检查 │
├─────────────────────────────────────────────────────┤
│ Step 7: 返回实例化结果 │
│ VNF实例ID、状态、访问信息 │
└─────────────────────────────────────────────────────┘
3.2.2 VNF 弹性伸缩流程
┌─────────────────────────────────────────────────────┐
│ VNF弹性伸缩流程 │
├─────────────────────────────────────────────────────┤
│ │
│ 监控告警 │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ Ceilometer监控到CPU > 80% │ │
│ │ 触发告警 → VNFM │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ VNFM评估伸缩策略 │ │
│ │ - 检查Scaling Policy │ │
│ │ - 确定扩容数量 │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ VNFM请求VIM创建新VM实例 │ │
│ │ - 申请计算资源 │ │
│ │ - 分配网络 │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ VIM执行资源创建 │ │
│ │ nova boot new-instance │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 新实例加入负载均衡 │ │
│ │ - 注册到Neutron LBaaS │ │
│ │ - 开始接收流量 │ │
│ └────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
3.3 VNFD 与 NSD:描述符的关键作用
VNFD(VNF 描述符)
VNFD 定义了 VNF 的所有属性和部署要求:
vnfd:
id: vfw-001
name: Virtual Firewall
version: 1.0
# 计算需求
virtual_compute_desc:
- id: small
vcpu: 2
memory: 4GB
- id: large
vcpu: 8
memory: 16GB
# 存储需求
virtual_storage_desc:
- id: root_disk
size: 50GB
type: ssd
# 镜像引用
sw_image_desc:
- id: vfw-image
name: vfw-ubuntu-20.04
version: latest
# 内部连接
int_virtual_link_desc:
- id: internal-mgmt
connectivity_type: mgmt
- id: internal-data
connectivity_type: data
# 部署策略
deployment_flavour:
- id: small
vdu_profile:
- vdu_id: vdu-vfw
min_instances: 1
max_instances: 3
- id: large
vdu_profile:
- vdu_id: vdu-vfw
min_instances: 3
max_instances: 10
NSD(网络服务描述符)
NSD 定义了由多个 VNF 组成的网络服务:
nsd:
id: ns-enterprise-vpn
name: Enterprise VPN Service
# 包含的VNF
vnfd:
- vnf_id: vfw-001
vnfd_id_ref: vfw-001
- vnf_id: vrouter-001
vnfd_id_ref: vrouter-001
- vnf_id: vlba-001
vnfd_id_ref: vlba-001
# VNF之间的连接
virtual_link:
- id: mgmt-network
connectivity: mgmt
- id: data-network
connectivity: data
# 服务链
service_chain:
- id: inbound-chain
sequence:
- vnf: vlb-001
cp: ingress
- vnf: vfw-001
cp: external
- vnf: vrouter-001
cp: lan
四、OpenStack 深度解析
OpenStack 是 NFV 云环境部署的核心平台,作为 VIM(虚拟基础设施管理器),它负责管理 NFVI 的所有资源。
4.1 OpenStack 概述与架构
4.1.1 什么是 OpenStack?
OpenStack 是一个开源的云计算平台,提供 IaaS(基础设施即服务)能力。它由多个组件构成,协同工作以提供完整的云服务。
核心定位:
OpenStack = 云操作系统
↓
管理计算、存储、网络资源
↓
为VNF提供虚拟化基础设施
4.1.2 OpenStack 发展历程
┌─────────────────────────────────────────────────────┐
│ OpenStack发展里程碑 │
├─────────────────────────────────────────────────────┤
│ │
│ 2010 ─── Austin (首版发布) │
│ │ NASA + Rackspace联合发起 │
│ │ 仅包含Nova和Swift │
│ │ │
│ 2011 ─── Bexar / Cactus / Diablo │
│ │ 增加Glance镜像服务 │
│ │ 引入Keystone身份认证 │
│ │ │
│ 2012 ─── Essex / Folsom │
│ │ 里程碑版本,架构趋于成熟 │
│ │ 增加Quantum网络服务(后更名Neutron) │
│ │ Cinder块存储服务独立 │
│ │ │
│ 2013 ─── Grizzly / Havana │
│ │ Heat编排服务加入 │
│ │ Ceilometer监控服务加入 │
│ │ │
│ 2014 ─── Icehouse / Juno │
│ │ 企业级特性增强 │
│ │ Trove数据库服务加入 │
│ │ │
│ 2015 ─── Kilo / Liberty │
│ │ 大规模部署优化 │
│ │ Manila文件共享服务加入 │
│ │ │
│ 2016 ─── Mitaka / Newton │
│ │ 用户体验改进 │
│ │ 部署工具成熟 │
│ │ │
│ 2017-2024 ─── Ocata到Caracal │
│ │ 容器集成(Magnum) │
│ │ 边缘计算支持 │
│ │ 性能持续优化 │
│ │ │
│ 发布周期:每6个月一个版本 │
│ 命名规则:按字母顺序(A-Z) │
│ │
└─────────────────────────────────────────────────────┘
4.1.3 OpenStack 版本选择建议
| 版本系列 | 发布时间 | LTS | 推荐场景 |
|---|---|---|---|
| Train | 2019.10 | - | 生产稳定版 |
| Ussuri | 2020.05 | - | 长期支持 |
| Victoria | 2020.10 | - | 新特性体验 |
| Wallaby | 2021.04 | - | 容器增强 |
| Xena | 2021.10 | - | 边缘计算 |
| Yoga | 2022.03 | - | 生产推荐 |
| Zed | 2022.10 | - | 最新稳定 |
NFV 生产环境推荐: Ussuri 或 Yoga 版本,稳定性好、社区支持完善。
4.1.4 OpenStack 整体架构

┌─────────────────────────────────────────────────────────────────┐
│ OpenStack逻辑架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 用户接入层 │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Horizon │ │ CLI/API │ │ SDK │ │ │
│ │ │ Web UI │ │ 命令行 │ │ 开发包 │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 服务层(核心组件) │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │Keystone│ │ Glance │ │ Nova │ │Neutron│ │ │
│ │ │身份认证│ │ 镜像 │ │ 计算 │ │ 网络 │ │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ Cinder │ │ Swift │ │ Heat │ │Ceilometer│ │ │
│ │ │块存储 │ │对象存储│ │ 编排 │ │ 监控 │ │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ │ ┌────────┐ │ │
│ │ │ Magnum │ (容器编排) │ │
│ │ └────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 消息队列层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ RabbitMQ / ZeroMQ │ │ │
│ │ │ (组件间异步通信) │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 数据库层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ MySQL / MariaDB / PostgreSQL │ │ │
│ │ │ (元数据存储) │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 物理基础设施 │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ 计算节点 │ │ 存储节点 │ │ 网络节点 │ │ │
│ │ │ x86服务器 │ │ SAN/NAS │ │ 交换机 │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
4.2 Keystone:身份认证服务
Keystone 是 OpenStack 的 "门卫",负责身份认证、授权和服务目录管理。
4.2.1 核心概念
| 概念 | 说明 | 示例 |
|---|---|---|
| User(用户) | 使用 OpenStack 的实体 | admin、tenant1_user |
| Project(项目) | 资源归属的租户 | production、development |
| Domain(域) | 用户和项目的命名空间 | default、company_domain |
| Role(角色) | 权限集合 | admin、member、reader |
| Service(服务) | OpenStack 组件服务 | nova、neutron、cinder |
| Endpoint(端点) | 服务访问地址 | http://nova:8774/v2.1 |
| Token(令牌) | 认证凭证 | gAAAAABf... |
4.2.2 认证流程详解
┌─────────────────────────────────────────────────────┐
│ Keystone认证流程 │
├─────────────────────────────────────────────────────┤
│ │
│ 1. 用户请求Token │
│ ┌────────────────────────────────────────────┐ │
│ │ POST /v3/auth/tokens │ │
│ │ { │ │
│ │ "auth": { │ │
│ │ "identity": { │ │
│ │ "methods": ["password"], │ │
│ │ "password": { │ │
│ │ "user": { │ │
│ │ "name": "admin", │ │
│ │ "domain": {"name": "Default"}, │ │
│ │ "password": "secret" │ │
│ │ } │ │
│ │ } │ │
│ │ }, │ │
│ │ "scope": { │ │
│ │ "project": { │ │
│ │ "name": "admin", │ │
│ │ "domain": {"name": "Default"} │ │
│ │ } │ │
│ │ } │ │
│ │ } │ │
│ │ } │ │
│ └────────────────────────────────────────────┘ │
│ ↓ │
│ 2. Keystone验证 │
│ - 验证用户名/密码 │
│ - 验证项目权限 │
│ - 查询角色 │
│ ↓ │
│ 3. 返回Token │
│ ┌────────────────────────────────────────────┐ │
│ │ Headers: │ │
│ │ X-Subject-Token: gAAAAABf... │ │
│ │ Body: │ │
│ │ { │ │
│ │ "token": { │ │
│ │ "expires_at": "2024-12-31T23:59:59Z", │ │
│ │ "project": {...}, │ │
│ │ "roles": [{"name": "admin"}], │ │
│ │ "catalog": [...] │ │
│ │ } │ │
│ │ } │ │
│ └────────────────────────────────────────────┘ │
│ ↓ │
│ 4. 用户使用Token访问服务 │
│ ┌────────────────────────────────────────────┐ │
│ │ GET /v2.1/servers │ │
│ │ Headers: │ │
│ │ X-Auth-Token: gAAAAABf... │ │
│ └────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
4.2.3 RBAC 权限模型
Keystone 实现基于角色的访问控制(RBAC):
# policy.json示例(Nova服务)
{
"context_is_admin": "role:admin",
"admin_or_owner": "is_admin:True or project_id:%(project_id)s",
"compute:create": "rule:admin_or_owner",
"compute:delete": "rule:admin_or_owner",
"compute:get": "rule:admin_or_owner",
"compute:get_all": "rule:admin_or_owner",
"compute:resize": "rule:admin_or_owner",
"compute:migrate": "rule:context_is_admin"
}
权限矩阵示例:
| 操作 | admin 角色 | member 角色 | reader 角色 |
|---|---|---|---|
| 创建虚拟机 | ✅ | ✅ | ❌ |
| 删除虚拟机 | ✅ | ✅ | ❌ |
| 查看虚拟机 | ✅ | ✅ | ✅ |
| 迁移虚拟机 | ✅ | ❌ | ❌ |
| 修改配额 | ✅ | ❌ | ❌ |
4.2.4 NFV 场景最佳实践
多租户隔离:
┌─────────────────────────────────────────────────────┐
│ NFV多租户架构 │
├─────────────────────────────────────────────────────┤
│ │
│ Domain: telecom │
│ ├── Project: vepc-production │
│ │ ├── User: vepc-admin │
│ │ └── Role: admin │
│ │ │
│ ├── Project: vcdn-production │
│ │ ├── User: vcdn-admin │
│ │ └── Role: admin │
│ │ │
│ └── Project: vfw-testing │
│ ├── User: test-user │
│ └── Role: member │
│ │
└─────────────────────────────────────────────────────┘
4.3 Glance:镜像服务
Glance 负责虚拟机镜像的发现、注册和分发,是 VNF 部署的基础。
4.3.1 核心概念
| 概念 | 说明 |
|---|---|
| Image(镜像) | 包含操作系统和应用的虚拟机模板 |
| Image Format | 镜像格式(qcow2、raw、vmdk、iso 等) |
| Image Status | 镜像状态(queued、saving、active、killed 等) |
| Image Visibility | 可见性(public、private、shared、community) |
4.3.2 镜像格式详解
| 格式 | 说明 | 适用场景 | 优缺点 |
|---|---|---|---|
| qcow2 | QEMU 写时复制格式 | KVM 虚拟化 | 支持快照、压缩、性能较好 |
| raw | 原始磁盘格式 | 性能要求高 | I/O 性能最好、占用空间大 |
| vmdk | VMware 磁盘格式 | VMware 迁移 | 兼容 VMware、效率一般 |
| vdi | VirtualBox 格式 | 开发测试 | 兼容 VirtualBox |
| iso | 光盘镜像格式 | 系统安装 | 用于引导安装 |
4.3.3 VNF 镜像管理流程
┌─────────────────────────────────────────────────────┐
│ VNF镜像管理流程 │
├─────────────────────────────────────────────────────┤
│ │
│ Step 1: 准备VNF镜像 │
│ ┌──────────────────────────────────────────────┐ │
│ │ # 创建基础镜像 │ │
│ │ virt-builder ubuntu-20.04 \ │ │
│ │ --format qcow2 \ │ │
│ │ --size 20G \ │ │
│ │ --install nginx,keepalived \ │ │
│ │ --output vnf-base.qcow2 │ │
│ └──────────────────────────────────────────────┘ │
│ ↓ │
│ Step 2: 上传镜像到Glance │
│ ┌──────────────────────────────────────────────┐ │
│ │ openstack image create \ │ │
│ │ --file vnf-base.qcow2 \ │ │
│ │ --disk-format qcow2 \ │ │
│ │ --container-format bare \ │ │
│ │ --public \ │ │
│ │ --property hw_vif_model=virtio \ │ │
│ │ --property hw_disk_bus=virtio \ │ │
│ │ vnf-base-image │ │
│ └──────────────────────────────────────────────┘ │
│ ↓ │
│ Step 3: 验证镜像 │
│ ┌──────────────────────────────────────────────┐ │
│ │ openstack image show vnf-base-image │ │
│ │ │ │
│ │ +------------------+----------------------+ │ │
│ │ | Field | Value | │ │
│ │ +------------------+----------------------+ │ │
│ │ | checksum | a1b2c3d4e5f6... | │ │
│ │ | container_format | bare | │ │
│ │ | disk_format | qcow2 | │ │
│ │ | id | abc-123-def-456 | │ │
│ │ | name | vnf-base-image | │ │
│ │ | size | 5368709120 | │ │
│ │ | status | active | │ │
│ │ | visibility | public | │ │
│ │ +------------------+----------------------+ │ │
│ └──────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
4.3.4 镜像优化技巧
1. 镜像压缩:
# 转换并压缩镜像
qemu-img convert -O qcow2 -c input.raw output.qcow2
2. 镜像瘦身:
# 清理日志和缓存
virt-sysprep -a image.qcow2 --operations default
# 零填充空闲空间
virt-sparsify --in-place image.qcow2
3. 元数据注入:
openstack image set \
--property vnf_type=firewall \
--property vnf_vendor=vendor-a \
--property vnf_version=1.0.0 \
vnf-base-image
4.4 Nova:计算服务
Nova 是 OpenStack 的核心计算服务,负责虚拟机的生命周期管理,是 VNF 实例运行的基础。
4.4.1 Nova 架构详解
┌─────────────────────────────────────────────────────────────────┐
│ Nova组件架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ API层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ nova-api │ │ │
│ │ │ RESTful API接口 │ │ │
│ │ │ 请求路由、认证、限流 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 控制层 │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │nova-scheduler│ │nova-conductor│ │nova-consoleauth│ │ │
│ │ │ 调度服务 │ │ 数据库代理 │ │ 控制台认证 │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 计算层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ nova-compute │ │ │
│ │ │ 虚拟机生命周期管理 │ │ │
│ │ │ 通过Libvirt/KVM/QEMU操作虚拟机 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 消息队列 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ RabbitMQ │ │ │
│ │ │ 组件间异步通信 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
4.4.2 Nova 调度器详解
Nova-scheduler 决定虚拟机在哪个计算节点上创建:
调度流程:
请求创建VM → Filter Scheduler → Filters过滤 → Weights权重 → 选择最优节点
常用过滤器(Filters):
| 过滤器 | 功能 | 应用场景 |
|---|---|---|
| AvailabilityZoneFilter | 按可用区过滤 | 故障域隔离 |
| ComputeFilter | 检查节点状态 | 排除故障节点 |
| CoreFilter | CPU 核心数过滤 | 资源匹配 |
| RamFilter | 内存过滤 | 资源匹配 |
| DiskFilter | 磁盘过滤 | 存储匹配 |
| ServerGroupAntiAffinityFilter | 反亲和性 | 高可用部署 |
| ServerGroupAffinityFilter | 亲和性 | 性能优化 |
| DifferentHostFilter | 不同宿主机 | 故障隔离 |
| SameHostFilter | 相同宿主机 | 性能聚合 |
NFV 场景调度策略:
# nova.conf调度配置
[DEFAULT]
scheduler_driver = nova.scheduler.filter_scheduler.FilterScheduler
scheduler_available_filters = nova.scheduler.filters.all_filters
scheduler_default_filters = AvailabilityZoneFilter,ComputeFilter,CoreFilter,RamFilter,ServerGroupAntiAffinityFilter
# NFV高可用部署:VNF实例分散到不同节点
4.4.3 VNF 实例创建流程
┌─────────────────────────────────────────────────────┐
│ VNF实例创建完整流程 │
├─────────────────────────────────────────────────────┤
│ │
│ 1. 用户发起请求 │
│ nova boot vnf-instance-01 \ │
│ --flavor m1.large \ │
│ --image vnf-base \ │
│ --nic net-id=network-id │
│ ↓ │
│ 2. nova-api接收请求 │
│ - 验证Token │
│ - 检查配额 │
│ - 创建instance记录 │
│ ↓ │
│ 3. nova-scheduler调度 │
│ - 应用过滤器 │
│ - 计算权重 │
│ - 选择目标节点 │
│ ↓ │
│ 4. nova-conductor协调 │
│ - 准备实例信息 │
│ - 发送RPC消息到compute节点 │
│ ↓ │
│ 5. nova-compute执行 │
│ - 从Glance下载镜像 │
│ - 从Neutron获取网络 │
│ - 从Cinder挂载卷 │
│ - 调用Libvirt创建VM │
│ ↓ │
│ 6. 实例状态更新 │
│ BUILD → ACTIVE │
│ │
└─────────────────────────────────────────────────────┘
4.4.4 NFV 性能优化配置
# nova.conf NFV优化配置
[DEFAULT]
# CPU绑定
vcpu_pin_set = 0-15,32-47
# 大页内存
reserved_huge_pages = node:0,size:1048576,count:128
# NUMA感知
numa_topology = auto
[libvirt]
# CPU模式
cpu_mode = host-passthrough
# 内存Backing
mem_stats_period_seconds = 0
hw_mem_encryption = false
# 网络优化
live_migration_completion_timeout = 800
live_migration_timeout_action = force_complete
4.5 Neutron:网络服务
Neutron 提供网络即服务(NaaS),是 NFV 网络功能实现的关键。
4.5.1 Neutron 核心概念
| 概念 | 说明 | NFV 对应 |
|---|---|---|
| Network | 虚拟网络 | VNF 间的通信网络 |
| Subnet | 子网 | IP 地址分配 |
| Port | 虚拟端口 | VNF 网卡接口 |
| Router | 虚拟路由器 | VNF 路由功能 |
| Security Group | 安全组 | VNF 防火墙规则 |
| Floating IP | 浮动 IP | VNF 外部访问 |
| Load Balancer | 负载均衡 | VNF 流量分发 |
4.5.2 Neutron 架构
┌─────────────────────────────────────────────────────────────────┐
│ Neutron组件架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 控制节点 │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │neutron-server│ │ ML2插件 │ │ L3 Agent │ │ │
│ │ │ API服务 │ │ 机制驱动 │ │ 路由代理 │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 网络节点 │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ OVS Agent │ │ DHCP Agent │ │ Metadata │ │ │
│ │ │ OpenvSwitch│ │ DHCP服务 │ │ 元数据代理 │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 计算节点 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ OVS Agent │ │ │
│ │ │ br-int / br-tun / br-ex │ │ │
│ │ │ 虚拟交换机 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
4.5.3 NFV 网络模型
VNF 网络拓扑示例:
┌─────────────────────────────────────────────────────────────────┐
│ NFV网络拓扑 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 外部网络 (External Network) │
│ ───────────────────────────── │
│ │ │
│ Floating IP │
│ │ │
│ ┌───────────┴───────────┐ │
│ │ Router (vRouter) │ │
│ └───────────┬───────────┘ │
│ │ │
│ 管理网络 (Management Network) │
│ ───────────────────────────── │
│ │ │
│ ┌────────┼────────┐ │
│ │ │ │ │
│ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ │
│ │ vFW │ │ vLB │ │vRouter│ │
│ └──┬──┘ └──┬──┘ └──┬──┘ │
│ │ │ │ │
│ 数据网络 (Data Network) │
│ ───────────────────────────── │
│ │ │
│ VNF服务链 │
│ │
└─────────────────────────────────────────────────────────────────┘
4.5.4 高级网络功能
1. SR-IOV(单根 I/O 虚拟化)
# 启用SR-IOV
openstack network create sriov-net \
--provider-network-type vlan \
--provider-physical-network physnet1 \
--provider-segment 100
# 创建SR-IOV端口
openstack port create sriov-port \
--network sriov-net \
--vnic-type direct
2. DPDK(数据平面开发套件)
# ml2_conf.ini
[ml2_type_flat]
flat_networks = physnet1
[ovs]
datapath_type = netdev
vhostuser_socket_dir = /var/run/openvswitch
3. 网络服务链(SFC)
# 端口链定义
port_chain:
name: fw-lb-chain
chain_parameters:
correlation: mpls
port_pair_groups:
- fw-pair-group
- lb-pair-group
4.6 Cinder:块存储服务
Cinder 提供持久化块存储,为 VNF 提供数据持久化能力。
4.6.1 Cinder 核心概念
| 概念 | 说明 |
|---|---|
| Volume(卷) | 持久化块存储设备 |
| Snapshot(快照) | 卷的时间点副本 |
| Volume Type | 卷类型(SSD、HDD 等) |
| QoS Spec | 性能限制规范 |
| Backend | 存储后端 |
4.6.2 支持的存储后端
| 后端类型 | 代表产品 | 适用场景 |
|---|---|---|
| 本地存储 | LVM | 测试开发 |
| SAN | EMC VNX, NetApp | 企业生产 |
| 分布式存储 | Ceph, GlusterFS | 大规模云平台 |
| 软件定义存储 | ScaleIO, StorPool | NFV 高 IOPS 场景 |
4.6.3 VNF 存储最佳实践
创建 VNF 专用存储类型:
# 创建SSD存储类型
openstack volume type create ssd
# 设置QoS
openstack qos spec create high-iops \
--consumer front-end \
--property total_iops_sec=50000 \
--property total_bytes_sec=104857600
openstack qos spec associate high-iops ssd
# 创建卷
openstack volume create vnf-data \
--type ssd \
--size 100 \
--availability-zone az1
4.7 Swift:对象存储服务
Swift 提供大规模可扩展的对象存储,适用于 VNF 镜像、日志、配置的存储。
4.7.1 Swift 架构
┌─────────────────────────────────────────────────────────────────┐
│ Swift架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 代理服务层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Proxy Server │ │ │
│ │ │ 请求路由、认证、负载均衡 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 存储服务层 │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │Account Server│ │Container Server│ │ Object Server│ │ │
│ │ │ 账户元数据 │ │ 容器元数据 │ │ 对象数据 │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 环服务层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Ring │ │ │
│ │ │ 数据分布、副本、一致性 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
4.7.2 Swift 在 NFV 中的应用
# 创建VNF备份容器
openstack container create vnf-backups
# 上传VNF配置
openstack object create vnf-backups vfw-config-001.yaml
# 下载配置
openstack object save vnf-backups vfw-config-001.yaml --file ./config.yaml
4.8 Heat:编排服务
Heat 提供基于模板的编排能力,实现 VNF 的自动化部署。
4.8.1 Heat 核心概念
| 概念 | 说明 |
|---|---|
| Stack | 一组资源的集合 |
| Template | YAML 格式的资源定义 |
| Resource | 单个基础设施资源 |
| Parameter | 模板参数 |
| Output | 部署输出信息 |
4.8.2 Heat 模板示例
heat_template_version: 2021-04-16
description: VNF Firewall Deployment Template
parameters:
image_id:
type: string
description: VNF firewall image ID
default: vfw-image-001
flavor:
type: string
description: Instance flavor
default: m1.large
network_id:
type: string
description: Management network ID
resources:
# 安全组
vfw_security_group:
type: OS::Neutron::SecurityGroup
properties:
name: vfw-security-group
rules:
- protocol: tcp
port_range_min: 22
port_range_max: 22
direction: ingress
- protocol: tcp
port_range_min: 443
port_range_max: 443
direction: ingress
# 管理端口
vfw_port:
type: OS::Neutron::Port
properties:
network_id: { get_param: network_id }
security_groups:
- { get_resource: vfw_security_group }
# VNF实例
vfw_instance:
type: OS::Nova::Server
properties:
name: vfw-prod-01
image: { get_param: image_id }
flavor: { get_param: flavor }
networks:
- port: { get_resource: vfw_port }
user_data: |
#!/bin/bash
systemctl start vfw-service
systemctl enable vfw-service
outputs:
vfw_ip:
description: VNF firewall IP address
value: { get_attr: [vfw_port, fixed_ips, 0, ip_address] }
4.8.3 部署 Heat Stack
# 创建Stack
openstack stack create vfw-stack \
--template vfw-template.yaml \
--parameter image_id=abc-123 \
--parameter flavor=m1.large \
--parameter network_id=net-001
# 查看Stack状态
openstack stack show vfw-stack
# 更新Stack
openstack stack update vfw-stack \
--template vfw-template-v2.yaml
# 删除Stack
openstack stack delete vfw-stack
4.9 Ceilometer:遥测服务
Ceilometer 提供监控和计量能力,是 VNF 智能运维的基础。
4.9.1 Ceilometer 架构
┌─────────────────────────────────────────────────────────────────┐
│ Ceilometer架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 数据采集层 │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ Compute │ │ Network │ │ Storage │ │ │
│ │ │ Agent │ │ Agent │ │ Agent │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 数据处理层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Notification Agent │ │ │
│ │ │ 消息消费、数据处理、转换 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 数据存储层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Gnocchi / MongoDB │ │ │
│ │ │ 时间序列数据库 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
4.9.2 监控指标示例
| 指标类型 | 指标名称 | 单位 | 说明 |
|---|---|---|---|
| CPU | cpu_util | % | CPU 使用率 |
| 内存 | memory.usage | MB | 内存使用量 |
| 磁盘 | disk.read.bytes | B | 磁盘读取字节数 |
| 网络 | network.incoming.bytes | B | 入站流量 |
| 实例 | instance | count | 实例数量 |
4.9.3 VNF 监控告警配置
# 创建告警规则
openstack alarm create \
--name vfw-cpu-high \
--type gnocchi_resources_threshold \
--metric cpu_util \
--resource-type instance \
--resource-id <vfw-instance-id> \
--threshold 80 \
--comparison-operator gt \
--aggregation-method mean \
--evaluation-periods 3 \
--alarm-action 'log://' \
"VNF Firewall CPU usage high"
4.10 Magnum:容器编排服务
Magnum 将 OpenStack 与容器编排平台(Kubernetes、Docker Swarm)集成,支持容器化 VNF(CNF)部署。
4.10.1 Magnum 核心概念
| 概念 | 说明 |
|---|---|
| Cluster Template | 集群模板定义 |
| Cluster | 容器集群实例 |
| COE | 容器编排引擎(Kubernetes、Swarm) |
4.10.2 创建 Kubernetes 集群
# 创建集群模板
openstack coe cluster template create k8s-template \
--coe kubernetes \
--image fedora-coreos \
--flavor m1.medium \
--master-flavor m1.medium \
--external-network public \
--fixed-network private \
--dns-nameserver 8.8.8.8
# 创建Kubernetes集群
openstack coe cluster create k8s-cluster \
--cluster-template k8s-template \
--master-count 3 \
--node-count 5
# 获取kubeconfig
openstack coe cluster config k8s-cluster --dir .
4.10.3 部署容器化 VNF
# cnf-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: cnf-firewall
spec:
replicas: 3
selector:
matchLabels:
app: cnf-firewall
template:
metadata:
labels:
app: cnf-firewall
spec:
containers:
- name: firewall
image: registry.example.com/cnf/firewall:v1.0
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
ports:
- containerPort: 443
4.11 Horizon:仪表板服务
Horizon 提供 Web 图形化管理界面,简化 VNF 运维操作。
4.11.1 Horizon 功能模块
| 模块 | 功能 |
|---|---|
| Project 面板 | 项目资源管理 |
| Admin 面板 | 管理员功能 |
| Identity 面板 | 用户权限管理 |
| Settings 面板 | 用户设置 |
4.11.2 NFV 定制化面板
# enabled/_1050_project_nfv_panel.py
PANEL = 'nfv'
PANEL_DASHBOARD = 'project'
PANEL_GROUP = 'default'
ADD_PANEL = 'openstack_dashboard.dashboards.project.nfv.panel.NFV'
# 自定义VNF管理面板
五、OpenStack 部署节点架构
OpenStack 支持多种节点部署模式,适应不同规模的 NFV 环境。
5.1 部署节点类型
┌─────────────────────────────────────────────────────────────────┐
│ OpenStack节点类型 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Controller Node(控制节点) │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ 运行服务: │ │
│ │ • nova-api, nova-scheduler, nova-conductor │ │
│ │ • neutron-server, neutron-l3-agent │ │
│ │ • cinder-api, cinder-scheduler │ │
│ │ • glance-api │ │
│ │ • keystone │ │
│ │ • horizon │ │
│ │ • heat-api, heat-engine │ │
│ │ │ │
│ │ 硬件要求: │ │
│ │ • CPU: 16-32核 │ │
│ │ • 内存: 64-128GB │ │
│ │ • 存储: 2x500GB SSD (RAID 1) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Compute Node(计算节点) │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ 运行服务: │ │
│ │ • nova-compute │ │
│ │ • neutron-openvswitch-agent │ │
│ │ • ceilometer-compute │ │
│ │ │ │
│ │ 硬件要求: │ │
│ │ • CPU: 32-64核 (支持VT-x/AMD-V) │ │
│ │ • 内存: 128-256GB │ │
│ │ • 存储: 2x1TB SSD (本地存储) │ │
│ │ • 网络: 2x10GbE或25GbE │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Network Node(网络节点) │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ 运行服务: │ │
│ │ • neutron-l3-agent │ │
│ │ • neutron-dhcp-agent │ │
│ │ • neutron-metadata-agent │ │
│ │ • neutron-openvswitch-agent │ │
│ │ │ │
│ │ 硬件要求: │ │
│ │ • CPU: 16核 │ │
│ │ • 内存: 32-64GB │ │
│ │ • 网络: 4x10GbE或25GbE │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Storage Node(存储节点) │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ 运行服务: │ │
│ │ • cinder-volume │ │
│ │ • swift-account/container/object │ │
│ │ │ │
│ │ 硬件要求: │ │
│ │ • CPU: 8核 │ │
│ │ • 内存: 32GB │ │
│ │ • 存储: 多块大容量HDD/SSD │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
5.2 典型部署拓扑
5.2.1 小规模部署(All-in-One)
┌─────────────────────────────────────────────────────┐
│ All-in-One部署 │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ 单节点 │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ 所有服务: Controller + Compute + Network│ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ │ │ │
│ │ 适用场景: │ │
│ │ • 开发测试环境 │ │
│ │ • POC验证 │ │
│ │ • 学习实验 │ │
│ └───────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
5.2.2 生产级部署
┌─────────────────────────────────────────────────────────────────┐
│ 生产级三节点部署 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 控制节点集群(3节点HA) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │Controller│ │Controller│ │Controller│ │ │
│ │ │ 1 │ │ 2 │ │ 3 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ ↓ HAProxy │ │
│ │ VIP: 192.168.1.100 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 计算节点集群(N节点) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────┐ │ │
│ │ │ Compute1 │ │ Compute2 │ │ Compute3 │ │ ... │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └─────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 网络节点(2节点HA) │ │
│ │ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Network1 │ │ Network2 │ │ │
│ │ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 存储节点(Ceph集群) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Storage1 │ │ Storage2 │ │ Storage3 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
5.3 OpenStack 高可用设计
┌─────────────────────────────────────────────────────────────────┐
│ OpenStack高可用架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 负载均衡层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ HAProxy + Keepalived │ │ │
│ │ │ VIP漂移、健康检查、负载分发 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 数据库高可用 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ MariaDB Galera Cluster │ │ │
│ │ │ 多主同步复制、自动故障转移 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 消息队列高可用 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ RabbitMQ Cluster │ │ │
│ │ │ 镜像队列、联邦队列、镜像策略 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
六、VNF 生命周期管理
VNF 生命周期管理是 NFV 的核心能力,涵盖从实例化到终止的全过程。

6.1 生命周期阶段详解
┌─────────────────────────────────────────────────────┐
│ VNF生命周期全景 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 1. 实例化 (Instantiation) │ │
│ ├────────────────────────────────────────────────┤ │
│ │ • 解析VNFD │ │
│ │ • 申请虚拟资源(CPU、内存、存储、网络) │ │
│ │ • 创建VM实例 │ │
│ │ • 注入配置 │ │
│ │ • 启动服务 │ │
│ │ • 健康检查 │ │
│ │ • 注册到服务发现 │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 2. 运行 (Running) │ │
│ ├────────────────────────────────────────────────┤ │
│ │ • 性能监控 │ │
│ │ • 日志收集 │ │
│ │ • 告警管理 │ │
│ │ • 配置更新 │ │
│ │ • 软件升级 │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 3. 弹性伸缩 (Scaling) │ │
│ ├────────────────────────────────────────────────┤ │
│ │ • 扩容(Scale Out):增加实例数量 │ │
│ │ • 缩容(Scale In):减少实例数量 │ │
│ │ • 垂直伸缩(Scale Up/Down):调整资源规格 │ │
│ │ • 基于策略自动伸缩 │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 4. 故障自愈 (Healing) │ │
│ ├────────────────────────────────────────────────┤ │
│ │ • 故障检测 │ │
│ │ • 根因分析 │ │
│ │ • 实例重建 │ │
│ │ • 服务恢复 │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 5. 终止 (Termination) │ │
│ ├────────────────────────────────────────────────┤ │
│ │ • 从服务发现注销 │ │
│ │ • 停止服务 │ │
│ │ • 释放虚拟资源 │ │
│ │ • 删除VM实例 │ │
│ │ • 清理存储数据 │ │
│ │ • 归档日志和监控数据 │ │
│ └────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
6.2 VNF 实例化详解
实例化流程:
VNFD → VNFM → NFVO → VIM → OpenStack API
详细步骤:
1. 读取VNFD定义
2. 验证资源配额
3. 选择部署位置(可用区、主机聚合)
4. 申请网络资源(创建网络、子网、端口)
5. 申请存储资源(创建卷)
6. 创建虚拟机实例
7. 注入用户数据和配置
8. 执行cloud-init脚本
9. 配置网络和安全组
10. 执行健康检查
11. 返回实例信息
6.3 VNF 弹性伸缩策略
# 自动伸缩策略配置
scaling_policy:
name: vfw-auto-scale
# 扩容规则
scale_out_rule:
metric: cpu_util
threshold: 80
comparison: gt
duration: 300 # 持续5分钟
action:
type: add_instances
count: 2
cooldown: 300 # 冷却时间5分钟
# 缩容规则
scale_in_rule:
metric: cpu_util
threshold: 30
comparison: lt
duration: 600 # 持续10分钟
action:
type: remove_instances
count: 1
cooldown: 600 # 冷却时间10分钟
# 约束条件
constraints:
min_instances: 2
max_instances: 20
6.4 VNF 故障自愈机制
┌─────────────────────────────────────────────────────┐
│ VNF故障自愈流程 │
├─────────────────────────────────────────────────────┤
│ │
│ 监控告警 │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ Ceilometer检测到实例不可用 │ │
│ │ 触发告警 → VNFM │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ VNFM分析故障类型 │ │
│ │ - 实例崩溃? │ │
│ │ - 网络故障? │ │
│ │ - 存储故障? │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 执行恢复策略 │ │
│ │ │ │
│ │ 策略1: 重启实例 │ │
│ │ nova reboot <instance-id> │ │
│ │ │ │
│ │ 策略2: 重建实例 │ │
│ │ nova rebuild <instance-id> <image-id> │ │
│ │ │ │
│ │ 策略3: 迁移实例 │ │
│ │ nova live-migration <instance-id> <dest-host> │ │
│ │ │ │
│ │ 策略4: 创建新实例替换 │ │
│ │ nova boot new-instance ... │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 验证恢复结果 │ │
│ │ - 实例状态检查 │ │
│ │ - 服务健康检查 │ │
│ │ - 流量验证 │ │
│ └────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
七、网络服务编排与部署
网络服务编排将多个 VNF 组合成完整的网络服务链。
7.1 网络服务编排架构
┌─────────────────────────────────────────────────────────────────┐
│ 网络服务编排架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ NSD(网络服务描述符) │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 定义: │ │ │
│ │ │ • 包含的VNF类型和数量 │ │ │
│ │ │ • VNF之间的连接关系 │ │ │
│ │ │ • 虚拟链路定义 │ │ │
│ │ │ • 服务链顺序 │ │ │
│ │ │ • 部署参数 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ NFVO编排执行 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ • 解析NSD │ │ │
│ │ │ • 协调多个VNFM │ │ │
│ │ │ • 管理VNF间依赖 │ │ │
│ │ │ • 配置服务链 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ VNF实例部署 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ vLB │→│ vFW │→│ vRouter │→│ vNAT │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ 服务链 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
7.2 主流编排器介绍
7.2.1 Cisco NSO
| 特性 | 说明 |
|---|---|
| 架构 | 基于 YANG 模型的网络服务编排 |
| 优势 | 多厂商支持、服务建模强大 |
| NFV 支持 | 支持 VNFM 集成、NSD 管理 |
7.2.2 OpenStack Tacker
# Tacker VNFD示例
tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0
description: Virtual Firewall VNF
node_types:
vnf.firewall:
derived_from: tosca.nodes.nfv.VNF
properties:
id:
type: string
vendor:
type: string
version:
type: string
topology_template:
node_templates:
vfw:
type: vnf.firewall
properties:
id: vfw-001
vendor: vendor-a
version: 1.0.0
requirements:
- virtualLink: mgmt-network
- virtualLink: data-network
7.2.3 其他编排器
| 编排器 | 厂商 | 特点 |
|---|---|---|
| OpenMANO | Telefonica | 开源、轻量级 |
| CloudBand Network Director | Nokia | 企业级、功能全面 |
| Blue Planet | Ciena | 多域编排、SDN 集成 |
| NFV Director | HP | OpenStack 深度集成 |
| Cloud Manager | Ericsson | 电信级、规模部署 |
| RIFT.ware | RIFT.io | 开源、TOSCA 支持 |
7.3 NSD 描述方法
7.3.1 TOSCA
tosca_definitions_version: tosca_simple_yaml_1_3
description: Enterprise VPN Network Service
topology_template:
inputs:
firewall_image:
type: string
default: vfw-image-001
router_image:
type: string
default: vrouter-image-001
node_templates:
firewall:
type: tosca.nodes.nfv.VNF
properties:
vnf_type: firewall
vnf_version: 1.0.0
requirements:
- virtualLink: mgmt-net
- virtualLink: data-net
router:
type: tosca.nodes.nfv.VNF
properties:
vnf_type: router
vnf_version: 1.0.0
requirements:
- virtualLink: data-net
- virtualLink: wan-net
mgmt-net:
type: tosca.nodes.nfv.VL
properties:
network_type: management
data-net:
type: tosca.nodes.nfv.VL
properties:
network_type: data
7.3.2 HOT (Heat Orchestration Template)
heat_template_version: 2021-04-16
description: VNF Network Service Chain
resources:
# VNF实例
vfw_instance:
type: OS::Nova::Server
properties:
name: vfw-01
image: vfw-image
flavor: m1.large
networks:
- network: { get_resource: mgmt_net }
- network: { get_resource: data_net }
vrouter_instance:
type: OS::Nova::Server
properties:
name: vrouter-01
image: vrouter-image
flavor: m1.medium
networks:
- network: { get_resource: data_net }
- network: { get_resource: wan_net }
# 网络资源
mgmt_net:
type: OS::Neutron::Net
data_net:
type: OS::Neutron::Net
wan_net:
type: OS::Neutron::Net
八、NFV MANO 开源解决方案
8.1 OPNFV
OPNFV(Open Platform for NFV)是 Linux 基金会下的开源 NFV 平台项目。
┌─────────────────────────────────────────────────────┐
│ OPNFV架构 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────┐ │
│ │ OPNFV集成层 │ │
│ │ • 自动化部署工具(Fuel, Compass, Apex) │ │
│ │ • 测试框架(Functest, Yardstick) │ │
│ │ • 文档和社区支持 │ │
│ └────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 上游项目集成 │ │
│ │ • OpenStack(VIM) │ │
│ │ • ODL/ONOS(SDN Controller) │ │
│ │ • Open-O/OSM(MANO) │ │
│ │ • Ceph(存储) │ │
│ │ • KVM(虚拟化) │ │
│ └────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
OPNFV 版本:
| 版本 | 发布时间 | 特性 |
|---|---|---|
| Arno | 2014 | 首版发布 |
| Brahmaputra | 2016 | 增强测试框架 |
| Colorado | 2016 | 新增 API 测试 |
| Danube | 2017 | IPv6 支持增强 |
| Euphrates | 2017 | 容器支持 |
| Fraser | 2018 | 边缘计算支持 |
8.2 OSM(Open Source MANO)
OSM 是 ETSI 主导的开源 MANO 项目。
# OSM VNFD示例
vnfd:vnfd-catalog:
vnfd:
- id: vfw-vnfd
name: vfw-vnf
short-name: vfw
vendor: vendor-a
version: '1.0'
vdu:
- id: vfw-vdu
name: vfw-vdu
image: vfw-image
vm-flavor:
vcpu-count: 4
memory-mb: 8192
storage-gb: 100
interface:
- name: eth0
type: EXTERNAL
virtual-interface:
type: VIRTIO
connection-point:
- name: vfw-mgmt
type: VPORT
- name: vfw-data
type: VPORT
8.3 ONAP(Open Network Automation Platform)
ONAP 是 AT&T 主导的开源 NFV/SDN 平台,功能最全面。
┌─────────────────────────────────────────────────────────────────┐
│ ONAP架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 设计态(Design Time) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ SDC │ │ VID │ │ A&AI │ │ Policy │ │ │
│ │ │服务设计 │ │门户 │ │资产清单 │ │策略引擎 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 运行态(Run Time) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ SO │ │ APPC │ │ SDNC │ │ DCAE │ │ │
│ │ │服务编排 │ │应用控制 │ │SDN控制 │ │数据分析 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 基础设施层 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ OpenStack / Kubernetes │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘