JDM 架构概述
了解分解的 Junos OS
许多网络设备供应商传统上将其软件绑定到专用硬件上,并向客户销售捆绑和打包的软件-硬件组合。但是,借助分解式 Junos OS 架构,瞻博网络设备现在可以与面向云的开放网络保持一致,并依赖于更灵活的实施方案。
分解式 Junos OS 架构的基本原理是将紧密绑定的 Junos OS 软件和专有硬件分解(分解)为虚拟化组件,这些组件不仅可以在瞻博网络硬件上运行,还可以在白盒或裸机服务器上运行。在这种新架构中,瞻博网络设备管理器 (JDM) 是一个管理软件组件的虚拟化根容器。
JDM 是分解式 Junos OS 架构中唯一的根容器(还有其他行业模型允许多个根容器,但分解式 Junos OS 架构不是其中之一)。分解的 Junos OS 是 单根 模型。JDM 的主要功能之一是防止平台上的修改和活动影响底层主机作系统(通常是 Linux)。作为根实体,JDM 非常适合该任务。JDM 的另一个主要功能是使设备的硬件看起来尽可能像基于 Junos OS 的传统物理系统。这还需要某种形式的根功能。
图 1 说明了 JDM 在整个架构中所占的重要地位。
的位置
VNF 是一种整合产品,包含支持完全虚拟化网络环境所需的所有组件。VNF 以网络优化为重点。
JDM 支持:
-
访客虚拟化网络功能 (VNF) 生命周期内的管理。
-
安装第三方模块。
-
VNF服务链的形成。
-
管理客户机 VNF 映像(其二进制文件)。
-
控制系统库存和资源使用情况。
请注意,基本体系结构的某些实现包括数据包转发引擎以及常用的 Linux 平台硬件端口。这样可以更好地将瞻博网络数据平面与通用平台的裸机硬件集成。
分解式 Junos OS 架构使 JDM 能够处理虚拟化网络功能,例如防火墙或网络地址转换 (NAT) 功能。与 JDM 集成的其他 VNF 和容器可以是瞻博网络产品,也可以是作为原生 Linux 应用的第三方产品。 图 2 示意性地显示了分解式 Junos OS 的基本架构。
有多种方法可以在各种平台上实现基本的分解式 Junos OS 架构。细节可能会有很大差异。本主题介绍整体架构。
在固定硬件上运行的简单软件进程的虚拟化在进程间通信领域带来了一些挑战。例如,具有 NAT 功能的 VNF 如何与在同一设备上作为容器运行的防火墙协同工作?毕竟,整个设备上可能只有一个或两个外部以太网端口,而且这些进程仍在设备内部进行。一个好处是,这些虚拟化进程之间的接口本身通常是虚拟化的,可能是作为 SXE 端口;这意味着,您可以直接在进程之间、一个进程与主机作系统之间,然后在主机作系统与另一个进程之间配置一种 MAC 层网桥。这支持在流量进出设备时进行服务链接。
JDM 为用户提供了熟悉的 Junos OS CLI,并处理与底层 Linux 内核的所有交互,以保持瞻博网络设备的“外观”。
分解式 Junos OS 的部分优势包括:
-
可以像管理服务器平台一样管理整个系统。
-
客户可以在虚拟机 (VM) 或容器中安装第三方应用、工具和服务,例如 Chef、Wiireshark 或 Quagga。
-
这些应用和工具可以使用典型的 Linux 存储库进行升级,并且独立于 Junos OS 版本。
-
模块化可提高可靠性,因为故障包含在模块内。
-
控制和数据平面可以直接通过 API 进行编程。
了解物理和虚拟组件
在分解的 Junos OS 网络功能虚拟化 (NFV) 环境中,设备组件可以是物理的,也可以是虚拟的。同样的物理-虚拟区别也适用于接口(端口)、数据包或帧通过设备的路径,以及其他方面,例如 CPU 内核或磁盘空间。
分解的 Junos OS 规范包括一个体系结构模型。房屋的建筑模型可以有包括厨房、屋顶和餐厅的方向,并且可以表示各种住宅;从海边小屋到富丽堂皇的豪宅。所有这些房屋看起来都非常不同,但仍然遵循基本的建筑模型并具有许多共同特征。
同样,在分解的 Junos OS 架构模型中,这些模型涵盖了截然不同的平台类型,从简单的客户端设备 (CPE) 到安装在大型数据中心的复杂交换设备,但具有平台共享的一些基本特征。
这些平台有什么共同的特点?所有分解的 Junos OS 平台都建立在三层之上。这些图层和一些可能的内容如 图 3 所示。
中的物理层和虚拟层
最底层是硬件层。除了内存 (RAM) 和磁盘空间 (SSD) 之外,平台硬件还具有多核 CPU 和用于管理的外部 NIC 端口。在某些情况下,会有一个 NIC 端口用于控制和数据平面,但该端口也可用于与数据包转发引擎通信以获取用户流量流。
平台软件层位于硬件层之上。所有与平台相关的功能都在这里进行。这些功能可以包括各种虚拟组件的软件切换功能,以桥接它们之间的流量。Linux 或基于内核的虚拟机 (KVM) 运行该平台,在某些模型中,电话家庭代理联系供应商或服务提供商设备以执行自动配置任务。电话家庭代理特别适用于较小的 CPE 平台。
平台软件层之上是客户软件层,它提供各种独立于平台的功能。某些组件可能是瞻博网络虚拟机,例如虚拟 SRX 设备(vSRX 虚拟防火墙)或 Junos 控制平面 (JCP)。JCP 与 JDM 配合使用,使设备类似于瞻博网络专用平台,但灵活性更高。这种灵活性很大程度上来自于能够支持一个或多个实施虚拟网络功能 (VNF) 的 VNF。这些 VNF 包含多种类型的任务,例如网络地址转换 (NAT)、专用域名系统 (DNS) 服务器查找等。
通常,有固定数量的 CPU 内核和有限的磁盘空间。但在虚拟环境中,资源分配和使用更加复杂。虚拟资源(如接口、磁盘空间、内存或内核)按照 VNF 映像的确定,在当时运行的 VNF 之间分配。
通常需要共享物理设备的 VNF,无论是虚拟机 (VM) 还是容器,都需要相互通信。数据包或帧通过物理接口(端口)进入设备,并分发到某个初始 VNF。在对流量进行某些处理后,VNF 会将流量传递到另一个 VNF(如果配置为这样),然后在流量离开物理设备之前传递到另一个 VNF。这些 VNF 形成在设备内部遍历的数据平面服务链。
VNF 是隔离的虚拟机或容器,如何将流量从一个站点传递到另一个虚拟机或容器?服务链配置为将流量从物理接口传递到一个或多个内部虚拟接口。因此,每个虚拟机或容器都有关联的虚拟 NIC,所有这些 NIC 都通过设备内部的虚拟交换机或桥接功能连接。这种通用关系支持物理接口和虚拟接口之间的通信,如 图 4 所示。
在此通用模型中,数据通过物理 NIC 上的端口进入,并根据目标MAC 地址通过虚拟 NIC 1 通过 虚拟交换机 功能桥接到虚拟机 1。流量也可以通过另一个配置的虚拟接口桥接到虚拟机2 或更多 VNF,直至传回物理端口并退出设备。
出于配置目的,这些接口可能具有熟悉的名称(如 ge-0/0/0 或 fxp0)或新的名称(如 sxe0 或 hsxe0)。有些可能 是真实的,但内部端口(如 sxe0),有些可能是使设备正常运行所需的完全虚拟结构(如 hsxe0)。
分解的 Junos OS 虚拟机
云计算使应用能够在虚拟化环境中运行,既支持最终用户服务器功能,也支持在大型数据中心甚至多个数据中心之间连接分散端点所需的网络功能。应用和网络功能可以由虚拟网络功能 (VNF) 实现。这两种类型的软件包之间有什么区别,为什么有人会使用一种类型或另一种类型?
VNF 和容器都允许硬件多路复用,数十个或数百个 VNF 共享一台物理服务器。这不仅可以快速部署新服务,还可以在大量使用(可以使用扩展时)或物理维护(可以使用迁移时)扩展和迁移工作负载。
在云计算环境中,通常会使用 VNF 在海量服务器群上完成繁重的工作,而这些服务器群是现代网络中大数据的特征。服务器虚拟化允许为不同的开发环境、硬件平台或作系统编写的应用程序在运行相应软件套件的通用硬件上运行。
VNF 依靠虚拟机管理程序来管理物理环境,并在任何特定时间运行的 VNF 之间分配资源。常用的虚拟机管理程序包括 Xen、KVM 和 VMWare ESXi,但还有许多其他虚拟机管理程序。VNF 在虚拟机管理程序顶层的用户空间中运行,包括虚拟机应用作系统的完整实现。例如,使用 C++ 语言编写并在 Microsoft Windows作系统上编译和运行的应用程序可以使用虚拟机管理程序在 Linux作系统上运行。在这种情况下,Windows 是来宾作系统。
该虚拟机管理程序为客户机作系统提供了 VNF 硬件的模拟视图。在其他资源(如内存磁盘空间)中,当不同虚拟机的端点驻留在不同的服务器或主机上时,虚拟机管理程序提供网络接口卡 (NIC) 的虚拟化视图(常见情况)。该虚拟机管理程序管理物理 NIC,并仅向 VNF 公开虚拟化接口。
该虚拟机管理程序还运行虚拟交换机环境,允许 VLAN 帧层的 VNF 在同一机箱内或通过(虚拟)网络交换数据包。
VNF 的最大优势是,大多数应用可以轻松移植到虚拟机管理程序环境中,并且无需修改即可良好运行。
最大的缺点是,客户机作系统的资源密集型开销通常必须包括作系统的完整版本,即使整个 VNF 的功能是提供域名系统 (DNS) 等简单服务。
与 VNF 不同,容器是专门为在虚拟环境中作为独立任务运行而构建的。容器不会像 VNF 那样将整个作系统捆绑在其中。容器可以通过多种方式进行编码和捆绑,但也有一些方法可以构建易于维护和扩展的标准容器。标准容器比随意创建的容器开放得多。
标准 Linux 容器定义了一个称为标准容器的软件交付单元。标准容器不封装整个客户机作系统,而是仅封装应用程序以及执行应用程序编程为执行的任务所需的任何依赖项。可以修改此单个运行时元素,但随后必须重新生成容器以包含扩展函数可能需要的任何其他依赖项。图 5 中所示的容器的整体架构。
容器在主机作系统内核上运行,而不在虚拟机管理程序上运行。容器架构使用容器引擎来管理底层平台。如果您仍想运行 VNF,容器也可以打包一个完整的虚拟机管理程序和来宾作系统环境。
标准容器包括:
-
配置文件。
-
一组标准作。
-
执行环境。
集装箱这个名字是从用于在世界各地运输货物的集装箱中借来的。海运集装箱是标准的交付单元,可以通过专门为处理集装箱而建造的设备进行装载、贴标、堆垛、提升和卸载。无论里面有什么,容器都可以以标准方式处理,每个容器都有自己的用户空间,其他容器无法使用。尽管 Docker 是一种流行的容器管理系统,用于在物理服务器上运行容器,但也有 Drawbridge 或 Rocket 等替代方案需要考虑。
系统会为每个容器分配一个虚拟接口。容器管理系统(如 Docker)包括一个虚拟以太网网桥,用于连接多个虚拟接口和物理 NIC。容器中的配置和环境变量决定了哪些容器可以相互通信,哪些容器可以使用外部网络,等等。外部网络通常通过 NAT 完成,但还有其他方法,因为容器通常使用相同的网络地址空间。
容器的最大优势在于,它们可以加载到设备上,并且执行速度比 VNF 快得多。容器使用资源的成本也要低得多——在同一硬件上,您可以运行比 VNF 多得多的容器。这是因为容器不需要完整的客户机作系统或启动时间。容器可以在几毫秒内完成加载和运行,而不是几十秒。然而,容器的最大缺点是必须专门编写它们以符合某些标准或通用实现,而 VNF 可以在其原生状态下运行。
Virtio 和 SR-IOV 用法
您可以使用 virtio 或使用合适的硬件和单根 I/O 虚拟化 (SR-IOV) 来启用基于 Linux 的虚拟化设备与网络功能虚拟化 (NFV) 模块之间的通信。每种方法都有不同的特点。
了解 Virtio 的使用
虚拟化物理设备时,物理 NIC 接口和外部物理交换机以及虚拟 NIC 接口和内部虚拟交换机共存。因此,当设备中的隔离 VNF(每个 VNF 都有自己的内存和磁盘空间以及 CPU 周期)尝试相互通信时,正在使用的多个端口、MAC 地址和 IP 地址会带来挑战。借助 virtio 库,隔离的虚拟功能之间的流量变得更加简单和容易。
Virtio 是有用的虚拟化函数的标准 Linux libvirt 库的一部分,通常包含在大多数版本的 Linux 中。Virtio 是一种纯软件的 VNF 间通信方法。Virtio 提供了一种连接各个虚拟进程的方法。virtio 的捆绑特性使得任何运行 Linux 的设备都可以使用 virtio。
Virtio 使 VNF 和容器能够使用简单的内部网桥来发送和接收流量。车辆仍可通过外部网桥到达和离开。外部网桥在网桥的一端使用虚拟化内部 NIC 接口,在网桥的另一端使用物理外部 NIC 接口来发送和接收数据包和帧。内部网桥有多种类型,它通过主机作系统中的虚拟化内部交换机功能桥接两个虚拟化内部 NIC 接口,从而连接这两个虚拟化内部 NIC 接口。virtio 的整体架构如 图 6 所示。
桥接
图 6 显示了具有运行主机作系统的单个物理 NIC 卡的服务器设备的内部结构(未显示设备的外壳)。主机作系统包含使用 virtio 实现的虚拟交换机或网桥。在作系统之上,多个虚拟机会使用通过 virtio 进行通信的虚拟 NIC。有多个虚拟机在运行,图中编号为 1 到 N。标准的“点-点-点”表示法表示图中未显示的可能虚拟机和 NIC。虚线表示使用 virtio 的可能数据路径。请注意,进出设备的流量会通过物理 NIC 和端口进行。
图 6 还显示了通过内部网桥进出设备的流量。虚拟机 1 将其虚拟化内部 NIC 接口链接到物理外部 NIC 接口。虚拟机 2 和虚拟机 N 通过主机作系统中的内部网桥链接内部虚拟 NIC。 请注意,这些接口可能具有与之关联的 VLAN 标签或内部接口名称。通过 VNF 之间的此内部网桥发送的帧永远不会离开设备。请注意网桥(和虚拟化交换机功能)在主机作系统中的位置。请注意设备中使用简单桥接。可以使用常规 Linux 命令或使用 CLI 配置语句来配置这些网桥。可以使用脚本自动执行该过程。
Virtio 是磁盘和网络设备驱动程序的虚拟化标准。只有客户机设备驱动程序(虚拟化功能的设备驱动程序)需要 知道 它正在虚拟环境中运行。这些驱动程序与虚拟机管理程序配合,虚拟功能获得性能优势,以换取增加的复杂性。Virtio 在架构上与 Xen 半虚拟化设备驱动程序相似,但并不相同(驱动程序添加到客户机,使其在 Xen 上运行时速度更快)。VMWare 的客户机工具也类似于 virtio。
请注意,大部分流量都集中在主机作系统 CPU 上,更明确地说,集中在虚拟化内部网桥上。因此,随着设备的扩展,主机 CPU 必须能够充分运行。
了解 SR-IOV 的使用
物理设备虚拟化时,物理网络接口卡 (NIC) 接口和外部物理交换机以及虚拟 NIC 接口和内部虚拟交换机共存。因此,当设备中的独立虚拟机 (VM) 或容器(每个都有自己的内存和磁盘空间以及 CPU 周期)尝试相互通信时,正在使用的多个端口、MAC 地址和 IP 地址会带来挑战。
SR-IOV 将虚拟化功能的概念一直延伸到物理 网卡 。单个物理卡被划分为每个物理 NIC 端口最多 16 个分区,这些分区与在更高层运行的虚拟功能相对应。这些虚拟功能之间的通信的处理方式与通常处理具有单个 NIC 的设备之间的通信方式相同:使用网桥。SR-IOV 包括一组用于创建、删除、枚举和查询 SR-IOV NIC 交换机的标准方法,以及可设置的标准参数。
SR-IOV 的单根部分是指实际上只有一个 NIC 主部分控制所有作。支持 SR-IOV 的 NIC 只是一个标准以太网端口,可提供与任何网卡相同的物理逐位功能。
但是,SR-IOV 也提供了一些虚拟功能,这些功能通过处理输入和输出任务的简单队列来完成。设备上运行的每个 VNF 都映射到其中一个 NIC 分区,以便 VNF 本身可以直接访问 NIC 硬件资源。NIC 还有一个简单的第 2 层排序器功能,用于将帧分类为流量队列。使用直接内存访问 (DMA),数据包可直接进出网络虚拟功能,进出虚拟机的内存,完全绕过虚拟机管理程序。NIC 在 SR-IOV作中的作用如 图 7 所示。
的 VNF 通信
虚拟机管理程序仍然参与将 VNF 分配给虚拟网络功能以及物理卡的管理,但不参与数据包内数据的传输。请注意,VNF 到 VNF 通信由虚拟 NIC 1、虚拟 NIC 2 和虚拟 NIC N 执行。还有一部分 NIC(未显示)用于跟踪所有虚拟功能和分拣器,以便在 VNF 和外部设备端口之间穿梭流量。
请注意,支持 SR-IOV 的能力取决于平台硬件,特别是 NIC 硬件,以及使用 DMA 进行数据传输的 VNF 或容器的软件。可分区的 NIC 以及所需的内部桥接往往更昂贵,因此,它们的使用可能会使小型设备上的成本增加相当大的数量。重写 VNF 和容器也不是一项简单的任务。
比较 Virtio 和 SR-IOV
Virtio 是有用的虚拟化函数的标准 libvirt 库的一部分,通常包含在大多数版本的 Linux 中。Virtio 采用纯软件方法。SR-IOV 需要以某种方式编写的软件和专门的硬件,这意味着即使使用简单的设备也会增加成本。
通常,使用 virtio 既快速又简单。Libvirt 是每个 Linux 发行版的一部分,建立网桥的命令很好理解。但是,virtio 将所有性能负担都放在主机作系统上,主机作系统通常将 VNF 之间的所有流量桥接进出设备。
通常,SR-IOV 可以提供更低的延迟和更低的 CPU 利用率,简而言之,这几乎是本机的非虚拟设备性能。但 VNF 从一台设备迁移到另一台设备很复杂,因为 VNF 依赖于一台机器上的 NIC 资源。此外,VNF 的转发状态驻留在 SR-IOV NIC 内置的第 2 层交换机中。正因为如此,转发不再那么灵活,因为转发规则被编码到硬件中,不能经常更改。
虽然对 virtio 的支持几乎是普遍的,但对 SR-IOV 的支持因 NIC 硬件和平台而异。瞻博网络 NFX250 网络服务平台支持 SR-IOV 功能,并允许在每个物理 NIC 端口上安装 16 个分区。
请注意,给定的 VNF 可以同时使用 virtio 或 SR-IOV,甚至可以同时使用这两种方法(如果支持)。
Virtio 是在虚拟化设备和 NFV 模块之间建立连接的推荐方法。