1 Containerlab
1.1

随着容器化网络操作系统数量的不断增加,用户对在自定义、灵活的实验室拓扑中轻松运行这些系统的需求也日益增长。
遗憾的是,像 docker-compose
这样的容器编排工具并不太适合这个目的,因为它们不便于用户在定义拓扑的容器之间轻松创建连接。
Containerlab提供了一个命令行界面(CLI),用于编排和管理基于容器的网络实验室。它可以启动容器,在容器之间构建虚拟连接以创建用户选择的实验室拓扑,并管理实验室的生命周期。

Containerlab专注于通常用于测试网络功能和设计的容器化网络操作系统,例如:
- 诺基亚SR Linux
- Arista cEOS
- 思科XRd
- SONiC
- 瞻博网络cRPD
- Cumulus VX
- 是德科技IXIA-C
- RARE/freeRtr
- Ostinato
除了原生的容器化网络操作系统,Containerlab还可以通过集成 vrnetlab
或 boxen
来启动基于传统虚拟机的路由器:
- 诺基亚虚拟SR OS(vSim/VSR)
- 瞻博网络vMX
- 瞻博网络vQFX
- 瞻博网络vSRX
- 瞻博网络vJunos-router
- 瞻博网络vJunos-switch
- 瞻博网络vJunos Evolved
- 思科IOS XRv9k
- 思科Catalyst 9000v
- 思科Nexus 9000v
- 思科c8000v
- 思科CSR 1000v
- 思科FTDv
- 戴尔FTOS10v
- Arista vEOS
- 帕洛阿尔托PAN
- IPInfusion OcNOS
- Check Point Cloudguard
- 飞塔Fortigate
- 阿鲁巴AOS-CX
- 华为VRP
- OpenBSD
- FreeBSD
- SONiC
当然,Containerlab完全能够连接任意的Linux容器,这些容器可以承载网络应用程序、虚拟功能,或者仅仅作为测试客户端。通过这些功能,Containerlab提供了一个单一的基础设施即代码(IaC)接口,来管理涵盖所有所需节点类型的实验室:

这个短视频简要演示了Containerlab的功能并解释了其用途:
https://youtu.be/xdi7rwdJgkg
1.2 功能
- 实验室即代码(IaC)方法:通过拓扑定义
clab
文件以声明式的方式定义实验室。
- 以网络操作系统为中心:专注于容器化网络操作系统。各种网络操作系统容器复杂的启动要求通过“种类(kinds)”进行了抽象,使用户能够专注于用例,而不是被基础设施障碍所困扰。
- 对基于VM的节点友好:通过集成
vrnetlab
,可以实现两全其美——以相同的IaC方法和工作流程运行虚拟化和容器化节点。
- 多供应商和开源支持:尽管Containerlab由诺基亚工程师发起,但它并不偏袒任何一方,支持来自其他供应商和开源项目的网络操作系统。
- 实验室编排:启动容器并将它们连接起来已经很不错了,但Containerlab还提供了更多功能,如管理实验室的生命周期:部署、销毁、保存、检查、图形操作等。
- 规模化实验室生成器:借助Containerlab的
generate
功能,可以定义/启动任意规模的基于CLOS的拓扑。只需说明需要多少层以及每层的规模,其余的将在瞬间完成。
- 简单便捷:从轻松的安装和升级功能,到幕后的链路连接机制,Containerlab竭尽全力让用户享受使用该工具的过程。
- 快速:在任何安装了Docker的Linux系统上,都能以极快的速度创建基于容器的实验室。
- 自动TLS证书配置:需要TLS证书的节点在启动时将自动获取证书。
- 文档优先:我们提供完整、简洁、清晰的文档,不让用户自行猜测。
- 实验室目录:“最受欢迎”的实验室拓扑已记录在案,并随Containerlab安装一起提供。基于这个精选列表,你可以开始构建满足自己需求的实验室。
1.3 用例
- 实验室和演示:Containerlab旨在成为一个用于配置由容器构建的网络实验室的工具。它免费、开源且无处不在。除了Docker之外,无需其他软件!与任何实验室环境一样,它允许用户验证功能、拓扑,进行互操作性测试、数据路径测试等。它也是你下一次演示的完美助手。快速部署实验室,所有配置都以代码形式存储,完成后销毁即可。
- 测试和持续集成(CI):由于Containerlab采用单二进制文件打包和基于代码的实验室定义文件,为CI搭建测试平台从未如此简单。Gitlab CI、Github Actions以及几乎任何CI系统都可以通过一个简单的命令启动Containerlab拓扑。
- 遥测验证:将现代遥测堆栈与Containerlab实验室相结合,非常适合遥测用例的验证。启动一个带有容器化网络功能且配置了遥测的实验室,然后运行全面的遥测用例。