ContainerLab使用指南

一、ContainerLab 是什么?

ContainerLab 是一个强大且高效的网络实验室工具,用于部署和管理由容器互联构成的虚拟网络环境。它允许网络工程师、开发者和学习者使用基于容器的节点(如路由器、交换机、防火墙)来快速创建、销毁和测试复杂的网络拓扑。

你可以把它想象成是网络领域的 Docker Compose,但专门为网络设备拓扑而设计。

核心特点:

  1. 速度快:基于容器技术,能在几秒内启动或销毁一个完整的网络拓扑,远比传统虚拟机(如 GNS3/EVE-NG)快。

  2. 轻量级:容器共享主机内核,资源占用(CPU、内存、磁盘)极低,一台普通笔记本电脑也能轻松运行大型拓扑。

  3. 依赖简单:只需要安装 Docker 和 ContainerLab 本身,无需下载和管理庞大的虚拟机镜像(虽然某些节点类型仍需特定镜像)。

  4. 支持多种节点类型

    • 容器化网络操作系统 (NOS):如 Arista cEOS, Nokia SR Linux, SONiC, FrRouting等。

    • 通用 Linux 容器:如 Alpine, Ubuntu,用作客户端、服务器或终端。

    • 第三方工具容器:如 Wireshark, iPerf3, 监控代理等。

  5. 拓扑即代码:使用简洁的 YAML 文件定义拓扑,易于版本控制、共享和复用。

二、核心概念

  1. 拓扑文件:一个 YAML 格式的文件(通常以 .clab.yml 或 .clab.yaml 结尾),用于定义网络拓扑中的所有元素。

  2. 节点 (Node):拓扑中的设备,比如一台路由器、一台交换机或一台 Linux 主机。

  3. 种类 (Kind):定义节点的类型,例如 linux(通用Linux容器)、ceos(Arista cEOS)、srl(Nokia SR Linux)等。

  4. 链接 (Link):定义节点之间的连接关系,相当于网线。

  5. 端点 (Endpoint):链接的两端,格式为 <node-name>.<interface-name>,例如 router1:eth1

三、安装与前置要求

1. 前置要求

  • Docker:必须首先安装并运行 Docker Engine。请参考 Docker 官方文档进行安装。

  • sudo 权限:ContainerLab 需要权限来管理网络接口(创建 veth pair,操作网桥等)。

2. 安装 ContainerLab

安装非常简单,只需一条命令:

# 下载并执行安装脚本
bash -c "$(curl -sL https://get.containerlab.dev)"

安装完成后,验证版本:

containerlab version

四、快速入门:一个简单的例子

让我们创建一个包含两台 Linux 主机(client 和 server)直接相连的拓扑。

1. 创建拓扑文件

创建一个名为 2node.clab.yml 的文件,内容如下:

name: 2node-lab # 实验室的名称

topology:
  nodes:
    client: # 第一个节点,名为 "client"
      kind: linux # 节点类型为通用 Linux
      image: ubuntu:22.04 # 使用的 Docker 镜像
      exec:
        - ip addr add 192.168.1.1/24 dev eth1 # 启动后执行的命令:配置IP地址

    server: # 第二个节点,名为 "server"
      kind: linux
      image: ubuntu:22.04
      exec:
        - ip addr add 192.168.1.2/24 dev eth1

  links:
    - endpoints: ["client:eth1", "server:eth1"] # 用一条线连接 client 的 eth1 和 server 的 eth1

2. 部署实验室

在终端中,进入 YAML 文件所在的目录,运行:

containerlab deploy -t 2node.clab.yml

ContainerLab 会执行以下操作:

  • 拉取所需的 Docker 镜像(如果本地没有)。

  • 创建容器。

  • 根据链接定义创建虚拟网络接口(veth pairs)并将它们连接到容器。

  • 执行你在 exec 部分定义的命令。

3. 验证与测试

  • 查看实验室状态

containerlab list

输出会显示正在运行的实验室和节点。

  • 进入节点
    使用 containerlab inspect 命令可以获取如何连接到节点的信息,更简单的方法是直接使用 docker exec

# 进入 client 节点
sudo docker exec -it clab-2node-lab-client bash

# 在 client 节点的 shell 中,ping server
ping 192.168.1.2

如果网络配置正确,你应该能看到成功的 ping 回复。

4. 销毁实验室

实验完成后,一键清理所有资源:

containerlab destroy -t 2node.clab.yml

这条命令会停止并删除所有容器和网络接口。

五、使用真实网络操作系统

要模拟更真实的场景,你需要使用厂商提供的容器化网络操作系统镜像。

以 Nokia SR Linux 为例

1.获取镜像:首先需要从 Nokia 门户网站获取 SR Linux 的 Docker 镜像,并加载到 Docker 中。

2.创建拓扑文件 srl-lab.clab.yml

name: srl-lab

topology:
  nodes:
    r1:
      kind: srl # 指定种类为 srl
      image: ghcr.io/nokia/srlinux:latest # 使用的镜像名
    r2:
      kind: srl
      image: ghcr.io/nokia/srlinux:latest

  links:
    - endpoints: ["r1:e1-1", "r2:e1-1"] # 连接 r1 的 e1-1 接口和 r2 的 e1-1 接口

3.部署和登录

containerlab deploy -t srl-lab.clab.yml

部署后,你可以使用 SSH 或 docker exec 登录到设备。默认情况下,ContainerLab 会为支持 CLI 的设备(如 SR Linux)生成启动配置。

查看生成的用户名密码:

containerlab inspect -t srl-lab.clab.yml

六、常用命令总结

命令作用示例
containerlab deploy根据拓扑文件创建实验室sudo containerlab deploy -t topo.clab.yml
containerlab destroy销毁实验室,清理资源sudo containerlab destroy -t topo.clab.yml
containerlab list列出所有正在运行的实验室和节点sudo containerlab list
containerlab inspect显示实验室的详细信息(管理地址、登录凭证等)sudo containerlab inspect -t topo.clab.yml
containerlab graph生成拓扑图(需安装 Graphviz)sudo containerlab graph -t topo.clab.yml
containerlab version显示 clab 版本containerlab version

七、优点与局限性

优点:

  • 极致轻快:启动速度和无与伦比的资源效率是其最大优势。

  • 简单易用:YAML 语法清晰,命令行工具直观。

  • 云原生集成:非常适合与 CI/CD 流水线集成,用于自动化测试和验证。

  • 活跃社区:发展迅速,支持的网络操作系统越来越多。

局限性:

  • 硬件仿真限制:容器共享主机内核,无法模拟需要特殊硬件的设备(如 ASIC)。它更适合测试控制平面管理平面的功能,对于数据平面性能测试可能不如基于VM的工具。

  • 镜像可用性:许多厂商的容器化 NOS 镜像并非免费公开提供,需要商业许可或开发者计划账户才能获取。

总结

ContainerLab 是现代网络工程师和开发者的利器,特别适用于协议学习配置验证自动化脚本测试CI/CD集成。如果你需要的是一个快速、轻量且易于脚本化的网络实验环境,ContainerLab 很可能是你的最佳选择。对于需要深度数据平面仿真或特定硬件的场景,则可以将其与 GNS3/EVE-NG 等传统工具结合使用。


anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/6523.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注