Un lab réseau, c'était une baie, une semaine de câblage et une licence. Avec containerlab, c'est un fichier YAML et une commande : les nœuds sont des conteneurs qui font tourner un vrai OS réseau, les liens sont des câbles virtuels entre eux. Cette page installe l'outillage sur une machine Linux, monte un spine et deux leaves, configure les premiers liens, et met le tout dans git pour que les pages suivantes construisent dessus.
Avant de commencer
$sudo apt update && sudo apt install -y curl git$mkdir -p $lsb_release -is && docker --version >/dev/null 2>&1 || echo no-docker-yetUbuntu no-docker-yet
Installer Docker et containerlab
$curl -fsSL https://get.docker.com | sudo sh$sudo usermod -aG docker $USER$newgrp docker$docker run --rm hello-world | head -2Puis containerlab, fixé à la version :
$sudo bash -c "$(curl -sL https://get.containerlab.dev)" -- -v $containerlab version$containerlab version | grep -o 'version: 'version:
Récupérer l'image
$docker pull $docker image ls -q | wc -l1
Écrire la topologie
name: mgmt: network: -mgmt ipv4-subnet: topology: kinds: nokia_srlinux: image: nodes: spine1: { kind: nokia_srlinux, mgmt-ipv4: } leaf1: { kind: nokia_srlinux, mgmt-ipv4: } leaf2: { kind: nokia_srlinux, mgmt-ipv4: } links: - endpoints: ["spine1:e1-1", "leaf1:e1-1"] - endpoints: ["spine1:e1-2", "leaf2:e1-1"]$cd && python3 -c 'import yaml; t = yaml.safe_load(open("topology.clab.yml")); print(len(t["topology"]["nodes"]), len(t["topology"]["links"]))'3 2
Déployer et regarder
$cd $sudo containerlab deploy -t topology.clab.yml$sudo containerlab inspect -t topology.clab.ymlConnecte-toi à un nœud. containerlab a créé les entrées /etc/hosts, et les identifiants par défaut sont admin / NokiaSrl1! :
$ssh admin@A:spine1# show versionA:spine1# show interface brief$docker ps --filter name=clab-- -q | wc -l3
$sudo containerlab inspect -t /topology.clab.yml | grep -c running3
Si un nœud reste en « created » ou redémarre en boucle
docker logs clab-<V name="LAB_NAME" />-spine1 te le dit. Les causes habituelles : pas assez de RAM (le noyau tue le plus gros processus, dmesg | grep -i kill), ou un sous-réseau de management qui chevauche un réseau que l'hôte a déjà (ip route ; choisis un autre ). Détruis, corrige, redéploie.
Une première configuration
enter candidateset / interface ethernet-1/1 admin-state enableset / interface ethernet-1/1 subinterface 0 admin-state enableset / interface ethernet-1/1 subinterface 0 ipv4 admin-state enableset / interface ethernet-1/1 subinterface 0 ipv4 address 10.1.0.0/31set / interface ethernet-1/2 admin-state enableset / interface ethernet-1/2 subinterface 0 admin-state enableset / interface ethernet-1/2 subinterface 0 ipv4 admin-state enableset / interface ethernet-1/2 subinterface 0 ipv4 address 10.1.0.2/31set / network-instance default interface ethernet-1/1.0set / network-instance default interface ethernet-1/2.0commit nowDepuis spine1, pingue leaf1 à travers le lien :
ping -c 3 10.1.0.1 network-instance default$docker exec clab--spine1 sr_cli 'ping -c 3 10.1.0.1 network-instance default' | grep -o '3 received'3 received
Sauver, détruire, redéployer
$cd $sudo containerlab save -t topology.clab.yml$ls clab-/$sudo containerlab destroy -t topology.clab.yml$sudo containerlab deploy -t topology.clab.yml$sudo containerlab inspect -t /topology.clab.yml | grep -c running3
Le lab dans git
clab-*/*.tar.xz.venv/$cd $git init$git add topology.clab.yml .gitignore$git commit -m "containerlab topology: spine1, leaf1, leaf2"$git -C status --short | wc -l0
Terminé
Trois nœuds SR Linux tournent dans , câblés spine vers leaf, joignables sur , et , et la topologie est dans git. Tu peux détruire et reconstruire le tout en deux commandes :
$cd && sudo containerlab destroy -t topology.clab.yml --cleanup && sudo containerlab deploy -t topology.clab.ymlLes adresses que tu as tapées à la main sur cette page sont les dernières que tu taperas : la page suivante modélise le lab dans NetBox, équipements, interfaces, câbles et IP, pour que la configuration puisse en être générée.