使用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中加入字符串组以创建复合字符串   java系统甚至不点击“下一步”或“上一步”按钮就将我返回到上一页,而不是进入下一页   java如何在arrayList中获取特定列的不同值   CXF GZIP REST JAVA   Java:使用大量半恒定标志检查优化循环中的循环?   java如何在两个应用程序之间进行会话管理?   java SVG文件使用蜡染(但没有轴线)转换为PNG   使用协议缓冲区和内部数据模型的java   java如何在logtag 安卓中打印和查看字符串的值   javascript如何在NodeJs中应用Java/Spring的分层架构?   java Spring URL在JSP中编码不正确   模式对话框后面的java工具提示   java WSRPC生成日历对象而不是日期   在对象外部无法识别类变量   java将图像从文件读/写到BuffereImage的最快方法?   JavaSpring数据存储库对具有不同Id的子类使用抽象超类   安全在Java 5.0上运行web应用程序服务器有危险吗?