在云环境中部署 NFV:OpenStack 讲解

一、引言: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              │   │   │
│  │  └──────────────────────────────────────────────────┘   │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
相关推荐
※DX3906※2 小时前
SpringBoot之旅4: MyBatis 操作数据库(进阶) 动态SQL+MyBatis-Plus实战,从入门到熟练,再也不踩绑定异常、SQL拼接坑
java·数据库·spring boot·spring·java-ee·maven·mybatis
小的~~2 小时前
使用StreamLoad向Doris-4.0.3版本的聚合表导数据超时问题
运维·服务器·数据库
笑梦无境2 小时前
mysql基础篇一(多年前整理)
数据库·mysql
Yushan Bai2 小时前
HP-UX平台Oracle启动实例遭遇ORA-27300/ORA-27301/ORA-27302报错
数据库·oracle·ux
山佳的山2 小时前
Kingbase 身份认证与权限控制实践—数据库安全的第一道防线
数据库
深蓝轨迹2 小时前
解决Redis排序后MySQL查询乱序问题:从原因到落地(通用版)
数据库·redis·笔记·mysql·bug
jnrjian2 小时前
预估 PURGE DBA_RECYCLEBIN 执行时间 v$SESSION_LONGOPS 6 秒限制
数据库·dba
尽兴-3 小时前
Git 分支管理核心命令科普指南
数据库·git·分支管理·代码仓库
XDHCOM3 小时前
Redis本地化实现策略与应用问题解析,如何配置Redis本地化,常见问题解决
数据库·redis·缓存