Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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 在整个架构中占据的重要位置。

图 1:瞻博网络设备管理器 Position of the Juniper Device Manager的位置

VNF 是一种综合产品,包含支持完全虚拟化网络环境所需的所有组件。VNF 以网络优化为重点。

JDM 支持:

  • 在访客虚拟网络功能 (VNF) 生命周期内对其进行管理。

  • 安装第三方模块。

  • VNF 服务链的形成。

  • 管理访客 VNF 映像(其二进制文件)。

  • 控制系统库存和资源使用情况。

请注意,基本架构的某些实现包括数据包转发引擎以及常用的 Linux 平台硬件端口。这样可以更好地将瞻博网络数据平面与通用平台的裸机硬件集成在一起。

分解式 Junos OS 架构使 JDM 能够处理虚拟化网络功能,例如防火墙或网络地址转换 (NAT) 功能。与 JDM 集成的其他 VNF 和容器可以是瞻博网络产品,也可以是作为原生 Linux 应用程序的第三方产品。分解式 Junos OS 的基本架构如图 2 所示。

图 2:基本分解式 Junos OS 架构 Basic Disaggregated Junos OS Architecture
注意:

有多种方法可以在各种平台上实现基本的分解式 Junos OS 架构。细节可能会有很大差异。本主题介绍整体体系结构。

在固定硬件上运行的简单软件进程的虚拟化在进程间通信领域带来了一些挑战。例如,具有 NAT 功能的 VNF 如何与在同一设备上作为容器运行的防火墙配合使用?毕竟,整个设备上可能只有一个或两个外部以太网端口,并且进程仍然是设备内部的。一个好处是,这些虚拟化进程之间的接口通常本身是虚拟化的,可能作为 SXE 端口;这意味着您可以直接在进程之间配置一种类型的 MAC 层桥接,也可以在进程与主机操作系统之间配置,然后在主机操作系统和另一个进程之间配置一种类型的 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 所示。

图 3:分解的 Junos OS Physical and Virtual Layers in the Disaggregated Junos OS 中的物理层和虚拟层

最低层是硬件层。除了内存 (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(即隔离的虚拟机或容器)如何将流量从一个传递到另一个?服务链配置为将流量从物理接口传递到一个或多个内部虚拟接口。因此,存在与每个虚拟机或容器关联的虚拟网卡,所有网卡都通过设备内的虚拟交换机或网桥功能连接。 图 4 显示了这种通用关系,支持物理接口和虚拟接口之间的通信。

图 4:物理和虚拟组件通信 Physical and Virtual Component Communication

在此通用模型中(在不同平台中可能有所不同),数据通过物理网卡上的端口进入,并根据目标 MAC 地址通过虚拟交换机功能桥接到虚拟网卡 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) 的虚拟化视图(这是一种常见情况)。虚拟机管理程序管理物理网卡,并仅向 VNF 公开虚拟化接口。

该虚拟机管理程序还运行虚拟交换机环境,允许 VLAN 帧层的 VNF 在同一机箱内或通过(虚拟)网络交换数据包。

VNF 的最大优势是,大多数应用程序可以轻松移植到虚拟机管理程序环境中,并且无需修改即可正常运行。

最大的缺点是,即使整个VNF的功能是提供域名系统(DNS)等简单服务,客户机操作系统的资源密集型开销通常也必须包括完整版本的操作系统。

与 VNF 不同,容器专门构建为在虚拟环境中作为独立任务运行。容器不像 VNF 那样将整个操作系统捆绑在内部。容器可以通过多种方式进行编码和捆绑,但也有一些方法可以构建易于维护和扩展的标准容器。标准容器比以随意方式创建的容器更加开放。

标准 Linux 容器定义了一个称为标准容器的软件交付单元。标准容器不是封装整个来宾操作系统,而是仅封装应用程序以及执行应用程序编程执行的任务所需的任何依赖项。可以修改此单个运行时元素,但随后必须重新生成容器以包含扩展函数可能需要的任何其他依赖项。容器的整体架构如图 5 所示。

图 5:容器 – 整体架构 Containers–Overall Architecture

容器在主机操作系统内核上运行,而不是在虚拟机管理程序上运行。容器架构使用容器引擎来管理底层平台。如果您仍想运行 VNF,容器也可以打包完整的虚拟机管理程序和来宾操作系统环境。

标准容器包括:

  • 配置文件。

  • 一组标准操作。

  • 执行环境。

集装箱这个名字是从用于在世界各地运输货物的集装箱借来的。装运集装箱是标准的交付单元,可以通过专门为处理集装箱而构建的设备装载、贴标签、堆叠、提升和卸载。无论里面是什么,容器都可以以标准的方式处理,每个容器都有自己的用户空间,其他容器无法使用。尽管Docker是一种流行的容器管理系统,用于在物理服务器上运行容器,但还有其他替代方案,例如Drawbridge或Rocket。

每个容器都分配有一个虚拟接口。容器管理系统(如 Docker)包括连接多个虚拟接口和物理网卡的虚拟以太网网桥。容器中的配置和环境变量决定了哪些容器可以相互通信,哪些容器可以使用外部网络,等等。外部网络通常使用 NAT 完成,尽管还有其他方法,因为容器通常使用相同的网络地址空间。

容器的最大优势是它们可以加载到设备上,并且执行速度比VNF快得多。 容器使用资源也更节省——在同一硬件上,您可以运行比 VNF 多得多的容器。这是因为容器不需要完整的来宾操作系统或启动时间。容器可以在几毫秒内加载和运行,而不是几十秒。但是,容器的最大缺点是它们必须专门编写以符合某些标准或通用实现,而VNF可以在其本机状态下运行。

Virtio 和 SR-IOV 用法

通过使用 virtio 或使用合适的硬件和单根 I/O 虚拟化 (SR-IOV),可以在基于 Linux 的虚拟化设备与网络功能虚拟化 (NFV) 模块之间启用通信。每种方法都有不同的特征。

了解 Virtio 用法

虚拟化物理设备时,物理网卡接口和外部物理交换机以及虚拟网卡接口和内部虚拟交换机共存。因此,当设备中的隔离 VNF(每个 VNF 都有自己的内存、磁盘空间和 CPU 周期)尝试相互通信时,正在使用的多个端口、MAC 地址和 IP 地址将带来挑战。有了virtio库,隔离的虚拟功能之间的流量变得越来越简单。

Virtio 是标准 Linux libvirt 库的一部分,其中包含有用的虚拟化函数,通常包含在大多数版本的 Linux 中。Virtio 是一种纯软件的 VNF 间通信方法。Virtio 提供了一种连接各个虚拟进程的方法。virtio 的捆绑特性使得任何 Linux 运行的设备都可以使用 virtio。

Virtio 使 VNF 和容器能够使用简单的内部网桥来发送和接收流量。交通仍然可以通过外部网桥到达和离开。外部网桥在网桥的一端使用虚拟化内部 NIC 接口,在网桥的另一端使用物理外部 NIC 接口来发送和接收数据包和帧。内部网桥(有几种类型)通过主机操作系统中的虚拟化内部交换机功能桥接两个虚拟化内部 NIC 接口,从而将它们连接起来。virtio 的整体架构如图 6 所示。

图 6:使用 Virtio VNF Bridging with Virtio 的 VNF 桥接

图 6 显示了服务器设备的内部结构,其中有一个运行主机操作系统的物理 NIC 卡(未显示设备的外盖)。主机操作系统包含使用 virtio 实现的虚拟交换机或网桥。在操作系统之上,多个虚拟机使用通过 virtio 进行通信的虚拟 NIC。有多个虚拟机正在运行,图中编号为 1 到 N。标准的“点点”表示法表示图中未显示的可能虚拟机和 NIC。虚线表示使用 virtio 的可能数据路径。请注意,进入或离开设备的流量是通过物理网卡和端口进行的。

图 6 还显示了通过内部网桥进出设备的流量。虚拟机 1 将其虚拟化的内部网卡接口链接到物理外部网卡接口。虚拟机 2 和虚拟机 N 通过主机操作系统中的内部网桥链接内部虚拟网卡。 请注意,这些接口可能具有与之关联的 VLAN 标签或内部接口名称。通过 VNF 之间的此内部网桥发送的帧永远不会离开设备。请注意网桥(和虚拟化交换机功能)在主机操作系统中的位置。 请注意在设备中使用简单桥接。可以使用 常规 Linux 命令或使用 CLI 配置语句来配置这些桥接器。脚本可用于自动执行该过程。

Virtio 是磁盘和网络设备驱动程序的虚拟化标准。只有来宾设备驱动程序(虚拟化功能的设备驱动程序)需要 知道 它是否在虚拟环境中运行。这些驱动程序与虚拟机管理程序合作,虚拟功能获得性能优势,以换取增加的复杂性。Virtio 在架构上与 Xen 半虚拟化设备驱动程序(添加到来宾以使其在 Xen 上运行时更快)相似,但不相同。VMWare的访客工具也类似于virtio。

请注意,大部分流量集中在主机操作系统 CPU 上,更明确地说,集中在虚拟化内部网桥上。因此,随着设备的扩展,主机 CPU 必须能够充分执行。

了解 SR-IOV 使用情况

虚拟化物理设备时,物理网络接口卡 (NIC) 接口和外部物理交换机以及虚拟 NIC 接口和内部虚拟交换机共存。因此,当设备中的隔离虚拟机 (VM) 或容器(每个虚拟机或容器都有自己的内存、磁盘空间和 CPU 周期)尝试相互通信时,正在使用的多个端口、MAC 地址和 IP 地址会带来挑战。

SR-IOV 将虚拟化功能的概念扩展到物理 网卡 。单个物理卡在每个物理网卡端口上最多可分为 16 个分区,这些分区对应于在较高层运行的虚拟功能。这些虚拟功能之间的通信处理方式与通常处理具有单个 NIC 的设备之间的通信的方式相同:使用网桥。SR-IOV 包括一组用于创建、删除、枚举和查询 SR-IOV NIC 交换机的标准方法,以及可以设置的标准参数。

SR-IOV 的单根部分是指 NIC 实际上只有一个主要部分控制所有操作。启用 SR-IOV 的网卡只是一个标准以太网端口,可提供与任何网相同的物理逐位功能

但是,SR-IOV 还提供了几个虚拟功能,这些功能是通过简单的队列来处理输入和输出任务来实现的。设备上运行的每个 VNF 都映射到其中一个网卡分区,以便 VNF 本身可以直接访问网卡硬件资源。NIC 还具有简单的第 2 层分拣器功能,可将帧分类为流量队列。数据包使用直接内存访问 (DMA) 直接在网络虚拟功能之间移动到虚拟机的内存,完全绕过虚拟机管理程序。网卡在 SR-IOV 操作中的作用如图 7 所示。

图 7:使用 SR-IOV VNF Communication Using SR-IOV 的 VNF 通信

虚拟机管理程序仍参与将 VNF 分配给虚拟网络功能以及物理卡的管理,但不参与数据包内数据的传输。请注意,VNF 到 VNF 的通信由虚拟网卡 1、虚拟网卡 2 和虚拟网卡 N 执行。还有一部分网卡(未显示)用于跟踪所有虚拟功能和分类器,用于在 VNF 和外部设备端口之间穿梭流量。

请注意,支持 SR-IOV 的能力取决于平台硬件(特别是 NIC 硬件)以及 VNF 或容器的软件,以便使用 DMA 进行数据传输。可分区 NIC 和所需的内部桥接往往更昂贵,因此,它们的使用可能会使较小设备上的成本大幅增加。重写 VNF 和容器也不是一件容易的事。

比较 Virtio 和 SR-IOV

Virtio 是有用的虚拟化函数的标准 libvirt 库的一部分,通常包含在大多数版本的 Linux 中。Virtio 采用纯软件的方法。SR-IOV 需要以某种方式编写的软件和专用硬件,这意味着即使使用简单的设备,成本也会增加。

一般来说,使用 virtio 既快速又简单。Libvirt 是每个 Linux 发行版的一部分,建立桥接的命令很好理解。但是,virtio 将所有性能负担都放在主机操作系统上,主机操作系统通常将 VNF 之间的所有流量桥入和桥出设备。

通常,SR-IOV 可以提供更低的延迟和更低的 CPU 利用率,简而言之,几乎是本机的非虚拟设备性能。但是,VNF 从一台设备迁移到另一台设备非常复杂,因为 VNF 依赖于一台计算机上的网卡资源。此外,VNF 的转发状态驻留在 SR-IOV NIC 内置的第 2 层交换机中。因此,转发不再那么灵活,因为转发规则已编码到硬件中,无法经常更改。

虽然对 virtio 的支持几乎是普遍的,但对 SR-IOV 的支持因 NIC 硬件和平台而异。瞻博网络 NFX250 网络服务平台支持 SR-IOV 功能,并允许在每个物理网卡端口上部署 16 个分区。

请注意,给定的 VNF 可以同时使用 virtio 或 SR-IOV,甚至可以同时使用两种方法(如果支持)。

注意:

Virtio 是在虚拟化设备和 NFV 模块之间建立连接的推荐方法。