Avec le nombre croissant de switchs virtuels conteneurisés, le besoin de les exécuter facilement dans des topologies de simulation augmente. Je l’avais déjà évoqué en présentant le cEOS-lab Arista, les outils d’orchestration de conteneurs tels que docker-compose ne conviennent pas, car ils ne permettent pas de créer facilement des connexions entre les conteneurs pour définir une topologie.
Containerlab fournit une interface IaaC (Infrastructure as a Code) sous forme d’un langage de commande pour l’orchestration et la gestion des simulations réseau basées sur des conteneurs. Il démarre les conteneurs, construit un câblage virtuel entre eux pour créer des topologies et gère le cycle de vie des simulations.
Containerlab se concentre sur les NOS (Network Operating System) conteneurisés qui sont généralement utilisés pour tester les fonctionnalités réseau, tels que :
- Nokia SR-Linux
- Arista cEOS
- Azure SONiC
- Juniper cRPD
En plus des NOS conteneurisés natifs, containerlab peut lancer des machines virtuelles à l’aide de l’intégration vrnetlab :
- Système d’exploitation Nokia Virtual SR (vSim / VSR)
- Juniper vMX
- Cisco IOS XRv9k
- Arista vEOS
Containerlab est également capable de câbler des conteneurs Linux traditionnels qui peuvent héberger des applications réseau, des fonctions virtuelles ou simplement être une machine de test.
Sur la base d’un serveur Ubuntu 20.04 sur lequel docker-ce
est mis en place, containerlab peut s’installer à l’aide de la commande : bash -c "$(curl -sL https://get-clab.srlinux.dev)"
.
Pour monter une simulation basée sur des cEOS-lab Arista, il convient de télécharger la dernière version et de l’importer à l’aide la commande : docker import cEOS64-lab-4.26.0.1F.tar.xz ceosimage:4.26.0.1F
.
Une topologie se définie dans un fichier clab
au format YAML.
name: arista topology: kinds: ceos: image: ceosimage:4.26.0.1F nodes: ceos1: kind: ceos ceos2: kind: ceos links: - endpoints: ["ceos1:et1", "ceos2:et1"]
Une fois complété, le fichier de topologie est déployé très rapidement à l’aide la commande : containerlab deploy -t arista.clab.yml
.
Un répertoire est créé au même niveau que le fichier clab
de manière à stocker un inventory utilisable avec Ansible et une image de la flash de chaque machine.
clab-arista/ ├── ansible-inventory.yml ├── ceos1 │ └── flash │ ├── AsuFastPktTransmit.log │ ├── debug [error opening dir] │ ├── fastpkttx.backup │ ├── Fossil │ ├── kickstart-config │ ├── persist │ │ ├── local │ │ ├── messages │ │ ├── persistentRestartLog │ │ ├── secure │ │ └── sys │ ├── schedule │ │ └── tech-support │ │ └── ceos1_tech-support_2021-05-29.0456.log.gz │ ├── SsuRestoreLegacy.log │ ├── SsuRestore.log │ ├── startup-config │ └── system_mac_address └── ceos2 └── flash ├── AsuFastPktTransmit.log ├── debug [error opening dir] ├── fastpkttx.backup ├── Fossil ├── kickstart-config ├── persist │ ├── local │ ├── messages │ ├── persistentRestartLog │ ├── secure │ └── sys ├── schedule │ └── tech-support │ └── ceos2_tech-support_2021-05-29.0456.log.gz ├── SsuRestoreLegacy.log ├── SsuRestore.log ├── startup-config └── system_mac_address
all: children: ceos: hosts: clab-arista-ceos1: ansible_host: 172.20.20.2 clab-arista-ceos2: ansible_host: 172.20.20.3
Il est possible de visualiser graphiquement la topologie réalisée à l’aide de la commande : containerlab graph -t arista.clab.yml
.
La connexion a l’un des conteneur peut s’effectuer à l’aide de la commande : docker exec -it clab-arista-ceos1 Cli
.
L’accès aux switchs est facilité, car les conteneurs sont configurés par défaut avec gNMI, Netconf et eAPI activés. Si on ne précise pas de configuration pour un équipement, à l’aide de la propriété config
dans le fichier clab
, une configuration par défaut est copiée dans le répertoire clab-arista/ceos1/flash/startup-config
.
! Startup-config last modified at Sat May 29 20:18:17 2021 by root ! device: ceos1 (cEOSLab, EOS-4.26.0.1F-21994874.42601F (engineering build)) ! transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent ! hostname ceos1 ! spanning-tree mode mstp ! no aaa root ! username admin privilege 15 role network-admin secret sha512 $6$TUpfI0LcwZhBBii6$rHoP.ypl45QhG9ximBIATvzEFpqsZW8LH3uW6/jopVsonJq5qXaGT/49lXYY7XMixP5Kxv8Sjw7WZxiNn3sS8/ ! interface Management0 ip address 172.20.20.2/24 ipv6 address 2001:172:20:20::2/64 ! no ip routing ! management api http-commands no shutdown ! management api gnmi transport grpc default ! management api netconf transport ssh default ! end
Voici un exemple d’accès avec Ansible et eAPI :
--- - name: Get facts on remote cEOS-lab devices hosts: ceos connection: httpapi gather_facts: no tasks: - name: Get cEOS facts arista.eos.eos_facts: register: facts - name: Display facts debug: msg: "Device {{ facts.ansible_facts.ansible_net_hostname }} is running version {{ facts.ansible_facts.ansible_net_version }}"
inventory = ./clab-arista/ansible-inventory.yml host_key_checking = False
--- ansible_connection: ansible.netcommon.httpapi ansible_network_os: arista.eos.eos ansible_user: admin ansible_password: admin ansible_httpapi_use_ssl: yes ansible_httpapi_validate_certs: no ansible_become: yes ansible_become_method: enable
Avec gNMIc installé sur le serveur, la commande gnmic -a clab-arista-ceos1:6030 --insecure -u admin -p admin capabilities
permet d’obtenir le résultat suivant :
gNMI version: 0.7.0 supported models: - arista-acl-deviations, Arista Networks, Inc., 1.0.4 - arista-intf-augments, Arista Networks <http://arista.com/>, 1.4.3 - arista-routing-policy-notsupported-deviations, Arista Networks, Inc., - arista-isis-augments, Arista Networks, Inc., 1.0.2 - openconfig-hercules-interfaces, OpenConfig Hercules Working Group, 0.2.0 - arista-aft-augments, Arista Networks, Inc., 1.0.1 - arista-exp-eos-varp-net-inst, Arista Networks <http://arista.com/>, - openconfig-aft-types, OpenConfig Working Group, 0.3.4 - openconfig-igmp, OpenConfig working group, 0.2.0 - openconfig-openflow, OpenConfig working group, 0.1.2 - openconfig-lldp, OpenConfig working group, 0.2.1 - arista-qos-notsupported-deviations, Arista Networks, Inc., - arista-lldp-augments, Arista Networks, Inc., 1.0.1 - openconfig-openflow-types, OpenConfig working group, 0.1.3 - vlan-translation, Arista Networks, - openconfig-platform-port, OpenConfig working group, 0.3.3 - arista-gnoi-cert, Arista Networks, Inc., - openconfig-if-types, OpenConfig working group, 0.2.1 - arista-exp-eos-varp-intf, Arista Networks <http://arista.com/>, - arista-relay-agent-deviations, Arista Networks <http://arista.com/>, 1.0.1 - ietf-yang-types, IETF NETMOD (NETCONF Data Modeling Language) Working Group, - arista-system-notsupported-deviations, Arista Networks, Inc., - arista-segmentation.v1, Arista Networks, - arista-exp-eos-evpn, Arista Networks, Inc., - openconfig-hercules-platform, OpenConfig Hercules Working Group, 0.2.0 - openconfig-lacp, OpenConfig working group, 1.1.1 - ietf-netconf-monitoring, IETF NETCONF (Network Configuration) Working Group, - openconfig-vlan-types, OpenConfig working group, 3.1.1 - openconfig-relay-agent, OpenConfig working group, 0.1.1 - arista-vlan-augments, Arista Networks <http://arista.com/>, 1.1.2 - openconfig-segment-routing, OpenConfig working group, 0.3.0 - arista-exp-eos-vxlan-config, Arista Networks <http://arista.com/>, - arista-bfd-deviations, Arista Networks, Inc., 1.0.1 - arista-bfd-notsupported-deviations, Arista Networks, Inc., - ietf-interfaces, IETF NETMOD (Network Modeling) Working Group, - openconfig-pim-types, OpenConfig working group, 0.1.1 - arista-qos-augments, Arista Networks, Inc., 0.0.4 - openconfig-if-poe, OpenConfig working group, 0.1.1 - arista-exp-eos-mlag, Arista Networks <http://arista.com/>, - ietf-inet-types, IETF NETMOD (NETCONF Data Modeling Language) Working Group, - openconfig-mpls-rsvp, OpenConfig working group, 3.0.2 - openconfig-bgp, OpenConfig working group, 6.0.0 - openconfig-platform-cpu, OpenConfig working group, 0.1.1 - arista-intf-deviations, Arista Networks, Inc., 1.0.2 - arista-srte-augments, Arista Networks, Inc., 1.1.1 - openconfig-mpls, OpenConfig working group, 3.1.0 - arista-system-deviations, Arista Networks, Inc., 1.1.2 - arista-mpls-augments, Arista Networks <http://arista.com/>, 1.0.1 - arista-lacp-augments, Arista Networks <http://arista.com/>, 1.0.1 - openconfig-platform-transceiver, OpenConfig working group, 0.7.1 - arista-exp-eos-qos, Arista Networks <http://arista.com/>, - arista-netinst-deviations, Arista Networks, Inc., 1.0.2 - openconfig-vlan, OpenConfig working group, 3.2.0 - arista-bfd-augments, Arista Networks <http://arista.com/>, 1.0.4 - openconfig-network-instance, OpenConfig working group, 0.14.0 - openconfig-ospfv2, OpenConfig working group, 0.2.2 - openconfig-types, OpenConfig working group, 0.6.0 - openconfig-mpls-ldp, OpenConfig working group, 3.0.2 - arista-eos-types, Arista Networks <http://arista.com/>, - openconfig-network-instance-l3, OpenConfig working group, 0.11.1 - arista-system-augments, Arista Networks, Inc., 1.1.1 - openconfig-messages, OpenConfig working group, 0.0.1 - openconfig-yang-types, OpenConfig working group, 0.2.2 - arista-openflow-deviations, Arista Networks, Inc., 1.1.1 - openconfig-qos, OpenConfig working group, 0.2.3 - arista-exp-eos-igmpsnooping, Arista Networks <http://arista.com/>, - openconfig-packet-match, OpenConfig working group, 1.1.1 - arista-rpol-deviations, Arista Networks, Inc., 1.0.1 - openconfig-platform-psu, OpenConfig working group, 0.2.1 - arista-lldp-notsupported-deviations, Arista Networks, Inc., - openconfig-alarm-types, OpenConfig working group, 0.2.1 - openconfig-system-logging, OpenConfig working group, 0.3.1 - arista-lacp-deviations, Arista Networks, Inc., 1.0.1 - openconfig-platform, OpenConfig working group, 0.12.2 - openconfig-bgp-types, OpenConfig working group, 5.2.1 - openconfig-platform-types, OpenConfig working group, 1.0.0 - arista-lldp-deviations, Arista Networks, Inc., 1.0.2 - openconfig-procmon, OpenConfig working group, 0.4.0 - openconfig-aaa, OpenConfig working group, 0.5.0 - openconfig-routing-policy, OpenConfig working group, 3.2.2 - openconfig-transport-types, OpenConfig working group, 0.12.0 - arista-acl-notsupported-deviations, Arista Networks, Inc., - openconfig-system, OpenConfig working group, 0.9.1 - openconfig-qos-types, OpenConfig working group, 0.2.1 - arista-bgp-augments, Arista Networks, Inc., 2.0.1 - openconfig-if-tunnel, OpenConfig working group, 0.1.1 - openconfig-local-routing, OpenConfig working group, 1.1.0 - openconfig-ospf-types, OpenConfig working group, 0.1.3 - openconfig-mpls-types, OpenConfig working group, 3.2.0 - iana-if-type, IANA, - openconfig-interfaces, OpenConfig working group, 2.4.3 - arista-network-instance-notsupported-deviations, Arista Networks, Inc., - arista-mpls-deviations, Arista Networks, Inc., 1.0.1 - arista-vlan-deviations, Arista Networks <http://arista.com/>, 1.0.2 - arista-srte-deviations, Arista Networks, Inc., 1.1.1 - arista-local-routing-deviations, Arista Networks, Inc., 1.0.1 - openconfig-pf-srte, OpenConfig working group, 0.2.0 - arista-local-routing-notsupported-deviations, Arista Networks, Inc., - openconfig-extensions, OpenConfig working group, - openconfig-isis-types, OpenConfig working group, 0.4.3 - arista-rpc-netconf, Arista Networks, Inc., - openconfig-acl, OpenConfig working group, 1.1.1 - openconfig-mpls-sr, OpenConfig working group, 3.0.1 - arista-bgp-notsupported-deviations, Arista Networks, Inc., - arista-exp-eos-vxlan, Arista Networks <http://arista.com/>, - openconfig-alarms, OpenConfig working group, 0.3.2 - arista-exp-eos-l2protocolforwarding, Arista Networks, Inc., - arista-exp-eos-qos-config, Arista Networks <http://arista.com/>, - arista-bgp-deviations, Arista Networks, Inc., 1.1.1 - openconfig-packet-match-types, OpenConfig working group, 1.0.4 - arista-exp-eos, Arista Networks <http://arista.com/>, - openconfig-hercules-qos, OpenConfig Hercules Working Group, 0.1.0 - openconfig-isis, OpenConfig working group, 0.6.0 - openconfig-policy-forwarding, OpenConfig working group, 0.2.1 - openconfig-system-terminal, OpenConfig working group, 0.3.1 - arista-platform-notsupported-deviations, Arista Networks, Inc., - openconfig-isis-lsdb-types, OpenConfig working group, 0.4.2 - openconfig-network-instance-types, OpenConfig working group, 0.8.3 - openconfig-inet-types, OpenConfig working group, 0.3.5 - openconfig-bfd, OpenConfig working group, 0.2.1 - openconfig-srte-policy, OpenConfig working group, 0.2.2 - openconfig-ospf-policy, OpenConfig working group, 0.1.3 - ietf-netconf, IETF NETCONF (Network Configuration) Working Group, - openconfig-pim, OpenConfig working group, 0.2.0 - openconfig-aaa-types, OpenConfig working group, 0.4.1 - openconfig-bgp-policy, OpenConfig working group, 6.0.2 - openconfig-segment-routing-types, OpenConfig working group, 0.2.0 - openconfig-igmp-types, OpenConfig working group, 0.1.1 - arista-lacp-notsupported-deviations, Arista Networks, Inc., - openconfig-platform-linecard, OpenConfig working group, 0.1.2 - openconfig-license, OpenConfig working group, 0.2.0 - openconfig-if-aggregate, OpenConfig working group, 2.4.3 - openconfig-aft, OpenConfig working group, 0.6.0 - arista-interfaces-notsupported-deviations, Arista Networks, Inc., - openconfig-if-ethernet, OpenConfig working group, 2.8.1 - openconfig-platform-fan, OpenConfig working group, 0.1.1 - openconfig-lldp-types, OpenConfig working group, 0.1.1 - arista-rpol-augments, Arista Networks <http://arista.com/>, 1.0.1 - arista-pim-augments, Arista Networks <http://arista.com/>, 1.0.1 - openconfig-if-ip, OpenConfig working group, 3.0.0 - openconfig-rib-bgp, OpenConfig working group, 0.7.0 - arista-exp-eos-qos-acl-config, Arista Networks <http://arista.com/>, - arista-exp-eos-multicast, Arista Networks <http://arista.com/>, - arista-messages-notsupported-deviations, Arista Networks, Inc., - openconfig-system-management, OpenConfig working group, 0.3.0 - arista-isis-deviations, Arista Networks, Inc., 1.0.2 - arista-cli, Arista Networks, Inc., - openconfig-policy-types, OpenConfig working group, 3.1.1 - openconfig-rib-bgp-types, OpenConfig working group, 0.5.0 supported encodings: - JSON - JSON_IETF - ASCII
Chaque fois qu’une configuration est sauvegardée sur le switch (write memory
), elle est inscrite dans le fichier startup-config
du répertoire flash
pour des raisons de persistance de données. Il est également possible d’utiliser la commande containerlab save -t arista.clab.yml
pour générer une copie de la configuration des équipements dans le fichier clab-arista/ceos1/flash/conf-saved.conf
.
Pour mettre fin à la simulation, on utilise la commande containerlab destroy -t arista.clab.yml
. Il faut noter que si les conteneurs sont totalement détruits, les répertoires flash
sont conservés.
Note : certaines commandes peuvent nécessiter des droits root (sudo).