使用Docker容器测试网络虚拟设备
这个项目是一个用于测试网络虚拟设备的python库。
正在测试的设备称为正在测试的设备或dut。
这个存储库包括脚本和模块,用于构建一个名为
兔子。Rabbit是Alpine Linux,预装了几个软件包。有这个
简单的dut允许快速测试alpy库并演示其
特征。
Rabbit设备的测试共享许多代码,因此代码组织为
图书馆。这个库名为carrot。
作者
阿列克谢·博格丹恩科
许可证
Alpy的许可证有效期为:SPDX-License-Identifier: GPL-3.0-or-later
有关详细信息,请参见复制。
网络设计
DUT与连接到其每个网络链路的容器通信。
来宾网络适配器通过TAP设备连接到主机(图1)。+-----QEMU hypervisor------+
| | +-------------+
| +-----Guest OS-----+ | | |
| | | | | docker |
| | +--------------+ | | | container |
| | | | | | | network |
| | | NIC driver | | | | namespace |
| | | | | | | |
| +------------------+ | | +-----+ |
| | | | | | | |
| | NIC hardware +---+-----------+ tap | |
| | | | | | | | |
| +--------------+ | | | +-----+ |
| | | | |
+--------------------------+ +-------------+
|
|
v
+-----------+
| |
| pcap file |
| |
+-----------+
图1。QEMU来宾和Docker容器之间的网络链接。
每个tap设备都位于其网络名称空间中。此命名空间属于
专用容器-anode。节点的目的是保留名称空间
在测试的生命周期中活着。
为了使应用程序能够与被测设备通信,应用程序是
集装箱运输。应用程序容器必须以一种特殊的方式创建:它
必须与其中一个节点共享网络命名空间。
图2显示了一个示例,其中应用程序容器app0和app1共享
具有节点容器node0的网络命名空间。应用程序容器app2
与node2共享另一个网络命名空间。
Docker支持此共享。我们要做的就是创造
带有--network=container:NODE_NAMEdocker选项的应用程序容器。
例如,如果我们想通过dut的第一个链接向它发送流量,我们创建
带有docker选项--network=container:node0的流量生成器容器。+----QEMU---+ +------shared network namespace-----+
| | | |
| | | eth0 |
| +---+ | | +---+ +-----+ +----+ +----+ |
| |NIC+-----------+tap| |node0| |app0| |app1| |
| +---+ | | +---+ +-----+ +----+ +----+ |
| | | |
| | +-----------------------------------+
| |
| |
| |
| | +------shared network namespace-----+
| | | |
| | | eth0 |
| +---+ | | +---+ +-----+ |
| |NIC+-----------+tap| |node1| |
| +---+ | | +---+ +-----+ |
| | | |
| | +-----------------------------------+
| |
| |
| |
| | +------shared network namespace-----+
| | | |
| | | eth0 |
| +---+ | | +---+ +-----+ +----+ |
| |NIC+-----------+tap| |node2| |app2| |
| +---+ | | +---+ +-----+ +----+ |
| | | |
+-----------+ +-----------------------------------+
图2。连接到DUT链接的应用程序容器。
关于gitlab容器注册表的说明
许多ci作业使用一个基于“构建docker映像”的自定义映像
舞台。图像存储在gitlab容器注册表中。
图像是从gitlab变量指定的位置提取的。默认情况下,
变量指向当前gitlab项目的注册表。
如果派生此项目,并且Gitlab容器注册表在
project,重写项目级别上的变量,以便提取图像
从其他登记处。
例如,设置IMAGE_ALPINE=registry.gitlab.com/abogdanenko/alpy/alpine。
欢迎加入QQ群-->: 979659372
推荐PyPI第三方库