h9803660ブログ

ネットワーク関連の技術検証のメモ、ネットワーク製品動向、投資のこと等を気が向いた時に書くかもしれません。

containerlabを使ってAristaNetworksのcEOS-labを複数台動かす

はじめに

昔docker-composeを使ってcEOSを複数動かす記事をここに記載たが、今回はcontainerlabを使って複数のcEOS-labを起動した。

containerlabとはYAML形式でトポロジーを定義してコンテナの環境でネットワーク検証用ネットワークを作ることができるオーケストレーションツールである。

https://containerlab.dev/

containerlabのインストールについては上記サイトのInstallationの項目を参照。 今回はWSL2の上でcontainerlabを動かしているのでInstallationのWindows Subsystem Linux (WSL)の項目をそのまま設定。

手順

定義ファイルの作成

起動したいcEOSの構成情報を記載した定義定義ファイルを作成する。 今回は4台のcEOSを起動させる。

name: demo3

topology:
  nodes:
    ceos1:
      kind: ceos
      image: ceos:4.28.4M
    ceos2:
      kind: ceos
      image: ceos:4.28.4M
    ceos3:
      kind: ceos
      image: ceos:4.28.4M
    ceos4:
      kind: ceos
      image: ceos:4.28.4M
  links:
    - endpoints: ["ceos1:eth1", "ceos2:eth2"]
    - endpoints: ["ceos1:eth2", "ceos4:eth1"]
    - endpoints: ["ceos2:eth1", "ceos3:eth2"]
    - endpoints: ["ceos4:eth2", "ceos3:eth1"]

デプロイと確認

設定した構成のデプロイを実施。

test@DESKTOP$ sudo service docker start
 * Starting Docker: docker                                                                           [ OK ]

test@DESKTOP$ sudo containerlab deploy --topo demo3.yml
INFO[0000] Containerlab v0.35.2 started
INFO[0000] Parsing & checking topology file: demo3.yml
INFO[0000] Creating lab directory: /home/test/clab-test/ceos/clab-demo3
INFO[0000] Creating container: "ceos4"
INFO[0000] Creating container: "ceos2"
INFO[0000] Creating container: "ceos1"
INFO[0000] Creating container: "ceos3"
INFO[0001] Creating virtual wire: ceos2:eth1 <--> ceos3:eth2
INFO[0001] Creating virtual wire: ceos1:eth2 <--> ceos4:eth1
INFO[0001] Creating virtual wire: ceos1:eth1 <--> ceos2:eth2
INFO[0001] Creating virtual wire: ceos4:eth2 <--> ceos3:eth1
INFO[0002] Running postdeploy actions for Arista cEOS 'ceos4' node
INFO[0002] Running postdeploy actions for Arista cEOS 'ceos1' node
INFO[0002] Running postdeploy actions for Arista cEOS 'ceos3' node
INFO[0002] Running postdeploy actions for Arista cEOS 'ceos2' node
INFO[0177] Adding containerlab host entries to /etc/hosts file
+---+------------------+--------------+--------------+------+---------+----------------+----------------------+
| # |       Name       | Container ID |    Image     | Kind |  State  |  IPv4 Address  |     IPv6 Address     |
+---+------------------+--------------+--------------+------+---------+----------------+----------------------+
| 1 | clab-demo3-ceos1 | 70041bc2ac75 | ceos:4.28.4M | ceos | running | 172.20.20.4/24 | 2001:172:20:20::4/64 |
| 2 | clab-demo3-ceos2 | bf8a2eff6de4 | ceos:4.28.4M | ceos | running | 172.20.20.6/24 | 2001:172:20:20::6/64 |
| 3 | clab-demo3-ceos3 | e70a4a17361e | ceos:4.28.4M | ceos | running | 172.20.20.7/24 | 2001:172:20:20::7/64 |
| 4 | clab-demo3-ceos4 | cb0381bfa89d | ceos:4.28.4M | ceos | running | 172.20.20.5/24 | 2001:172:20:20::5/64 |
+---+------------------+--------------+--------------+------+---------+----------------+----------------------+

確認

test@DESKTOP$ sudo clab inspect --topo demo3.yml
INFO[0000] Parsing & checking topology file: demo3.yml
+---+------------------+--------------+--------------+------+---------+----------------+----------------------+
| # |       Name       | Container ID |    Image     | Kind |  State  |  IPv4 Address  |     IPv6 Address     |
+---+------------------+--------------+--------------+------+---------+----------------+----------------------+
| 1 | clab-demo3-ceos1 | 70041bc2ac75 | ceos:4.28.4M | ceos | running | 172.20.20.4/24 | 2001:172:20:20::4/64 |
| 2 | clab-demo3-ceos2 | bf8a2eff6de4 | ceos:4.28.4M | ceos | running | 172.20.20.6/24 | 2001:172:20:20::6/64 |
| 3 | clab-demo3-ceos3 | e70a4a17361e | ceos:4.28.4M | ceos | running | 172.20.20.7/24 | 2001:172:20:20::7/64 |
| 4 | clab-demo3-ceos4 | cb0381bfa89d | ceos:4.28.4M | ceos | running | 172.20.20.5/24 | 2001:172:20:20::5/64 |
+---+------------------+--------------+--------------+------+---------+----------------+----------------------+

test@DESKTOP$  sudo clab inspect --all
+---+-----------+----------+------------------+--------------+--------------+------+---------+----------------+----------------------+
| # | Topo Path | Lab Name |       Name       | Container ID |    Image     | Kind |  State  |  IPv4 Address  |     IPv6 Address     |
+---+-----------+----------+------------------+--------------+--------------+------+---------+----------------+----------------------+
| 1 | demo3.yml | demo3    | clab-demo3-ceos1 | 70041bc2ac75 | ceos:4.28.4M | ceos | running | 172.20.20.4/24 | 2001:172:20:20::4/64 |
| 2 |           |          | clab-demo3-ceos2 | bf8a2eff6de4 | ceos:4.28.4M | ceos | running | 172.20.20.6/24 | 2001:172:20:20::6/64 |
| 3 |           |          | clab-demo3-ceos3 | e70a4a17361e | ceos:4.28.4M | ceos | running | 172.20.20.7/24 | 2001:172:20:20::7/64 |
| 4 |           |          | clab-demo3-ceos4 | cb0381bfa89d | ceos:4.28.4M | ceos | running | 172.20.20.5/24 | 2001:172:20:20::5/64 |
+---+-----------+----------+------------------+--------------+--------------+------+---------+----------------+----------------------+

トポロジーの確認

以下のコマンドでトポロジー図を見ることができる。

test@DESKTOP$ sudo containerlab graph --topo demo3.yml
[sudo] password for test:
INFO[0000] Parsing & checking topology file: demo3.yml
INFO[0000] Serving static files from directory: /etc/containerlab/templates/graph/nextui/static
INFO[0000] Serving topology graph on http://0.0.0.0:50080

cEOSへのログイン

起動の段階でManagementのIPアドレス等の設定が入っている状態になっている。

test@DESKTOP$ssh admin@172.20.20.4
(admin@172.20.20.4) Password:
ceos1>
ceos1>
ceos1>ena
ceos1#show running-config
! Command: show running-config
! device: ceos1 (cEOSLab, EOS-4.28.4M-29408925.4284M (engineering build))
!
no aaa root
!
username admin privilege 15 role network-admin secret sha512 $6$R4g7wA60vF7mT/IQ$jZc2r9mKF5mXJXxGr.NGXzH/5csKcOJ4yiaPlE9XdwEpdWCzdWZS1I8M1m3/zepivdSljHrdTuvC5o0oeAQly/
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model multi-agent
!
hostname ceos1
!
spanning-tree mode mstp
!
management api http-commands
   no shutdown
!
management api gnmi
   transport grpc default
!
management api netconf
   transport ssh default
!
interface Ethernet1
!
interface Ethernet2
!
interface Management0
   ip address 172.20.20.4/24
   ipv6 address 2001:172:20:20::4/64
!
no ip routing
!
ip route 0.0.0.0/0 172.20.20.1
!
ipv6 route ::/0 2001:172:20:20::1
!
end

ceos1>exit
Connection to 172.20.20.4 closed.

test@DESKTOP$ sudo docker exec -it clab-demo3-ceos2 Cli
ceos2>
ceos2>
ceos2>ena
ceos2#show running-config
! Command: show running-config
! device: ceos2 (cEOSLab, EOS-4.28.4M-29408925.4284M (engineering build))
!
no aaa root
!
username admin privilege 15 role network-admin secret sha512 $6$iUlVLN3hUZFmMuFV$qif/2x2MGRY7MDx9bp37tNzrz8eRU21dvDMSa6OupQ5088Op4GmJSd0zi/G1zGrdwqmDV/LOvFpKwhvyEN5TE0
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model multi-agent
!
hostname ceos2
!
spanning-tree mode mstp
!
management api http-commands
   no shutdown
!
management api gnmi
   transport grpc default
!
management api netconf
   transport ssh default
!
interface Ethernet1
!
interface Ethernet2
!
interface Management0
   ip address 172.20.20.6/24
   ipv6 address 2001:172:20:20::6/64
!
no ip routing
!
ip route 0.0.0.0/0 172.20.20.1
!
ipv6 route ::/0 2001:172:20:20::1
!
end

設定ファイル等のディレクト

Ansibleのinventoryや各cEOSの設定ファイル等が自動生成されている。

clab-demo3$ ls
ansible-inventory.yml  ceos1  ceos2  ceos3  ceos4  topology-data.json

構成の保存

test@DESKTOP$ sudo containerlab save  --topo demo3.yml
INFO[0000] Parsing & checking topology file: demo3.yml
INFO[0000] saved cEOS configuration from ceos3 node to /home/test/clab-test/ceos/clab-demo3/ceos3/flash/startup-config
INFO[0000] saved cEOS configuration from ceos2 node to /home/test/clab-test/ceos/clab-demo3/ceos2/flash/startup-config
INFO[0000] saved cEOS configuration from ceos1 node to /home/test/clab-test/ceos/clab-demo3/ceos1/flash/startup-config
INFO[0000] saved cEOS configuration from ceos4 node to /home/test/clab-test/ceos/clab-demo3/ceos4/flash/startup-config

構成の削除

オプション(--cleanup)で先ほどのディレクトリの削除も一緒にできる。

test@DESKTOP$sudo containerlab destroy  --topo demo3.yml
INFO[0000] Parsing & checking topology file: demo3.yml
INFO[0000] Destroying lab: demo3
INFO[0002] Removed container: clab-demo3-ceos2
INFO[0002] Removed container: clab-demo3-ceos1
INFO[0002] Removed container: clab-demo3-ceos3
INFO[0002] Removed container: clab-demo3-ceos4
INFO[0002] Removing containerlab host entries from /etc/hosts file

まとめ

containerlabは最近自分の周りで話題になり始めていたのでまずは手始めに触ってみた。 ルーティングの勉強等はcontainerlab上で今回使ったcEOSやノキア社のSRLinuxを使って比較的容易にできるので、物理的なルータが用意できない、CML(Cisco Modeling Labs)を自腹で用意するのはちょっと辛い等の場合、検討する余地は多いにあるのではないかと感じた。

Qiitaにも同じ記事載せてます。

qiita.com