使用Docker测试网络虚拟设备的库

alp的Python项目详细描述


阿尔比

使用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显示了一个示例,其中应用程序容器app0app1共享 具有节点容器node0的网络命名空间。应用程序容器app2node2共享另一个网络命名空间。

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 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将jaxb插件扩展与gradlejaxbplugin一起使用   java Hibernate列表<Object[]>到特定对象   java使用多态性显示arraylist的输出   java水平堆叠卡,带有一定偏移量   java错误:找不到符号方法liesInt()   java客户机/服务器文件收发中的多线程流管理   在java中可以基于访问重载方法吗?   包含空元素的java排序数组   swing Java按钮/网格布局   java BottomNavigationView getmaxitemcount   java空指针异常字符串生成器   java Xamarin升级导致“类文件版本错误52.0,应为50.0”错误   java我正在尝试打印它,而不只是对每一行进行println   Tomcat7中的java是否需要复制上下文。将xml转换为conf/Catalina/locahost以使其生效   带有注入服务的java REST端点在何处引发自定义WebServiceException?   在Java中使用GPS数据   java如何将JFreeChart ChartPanel导出到包含添加的CrosshairOverlay的图像对象?   内置Eclipse期间的Java 8堆栈溢出   java在GWT编译的JavaScript中如何表示BigDecimal