見出し画像

containerlab

containerlabって?

オープンソースで開発されているネットワーク仮想化環境基盤です。
コンテナ化されたソフトウェア同士を接続してネットワークトポロジの検証ができます。
非常にシンプルで使い勝手がよく、GNS3より高頻度で使っています。

私は特にFRRoutingを使ってトポロジーの勉強をしています。
FRRoutingは非常に優秀でSRv6も動きます。

インストール手順

Ubuntu上にcontainerlabをインストールする手順です。

サーバ情報

guest@vm-docker2:/etc$ uname -a
Linux vm-docker2 6.8.0-49-generic #49-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov  4 02:06:24 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
guest@vm-docker2:/etc$ cat os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
メモリ4GB / CPU core 4つ

インストールコマンド

コマンド1個でインストール可能

FRRoutingのコンテナを手に入れる

guest@vm-docker2:/etc$ sudo docker pull quay.io/frrouting/frr:master
master: Pulling from frrouting/frr
da9db072f522: Pull complete
db0294a0186b: Pull complete
b4bbf270faab: Pull complete
89d7296f2fea: Pull complete
4f4fb700ef54: Pull complete
4225ee3b274c: Pull complete
213844bb673f: Pull complete
Digest: sha256:15295438d20d98957158b14f8b2b7df25d3f1f54c46e7f2729559a4a13bf0ae4
Status: Downloaded newer image for quay.io/frrouting/frr:master
quay.io/frrouting/frr:master
guest@vm-docker2:/etc$ sudo docker image ls
REPOSITORY              TAG       IMAGE ID       CREATED       SIZE
quay.io/frrouting/frr   master    67a3b1293a6a   2 hours ago   187MB
guest@vm-docker2:/etc$

docker pullすればよい。
コンテナ情報は以下のサイトに記載されているのでほしいバージョンをpullしよう。

containerlabコマンド

ラボの起動

「containerlab deploy -t トポロジーファイル」でラボを起動させることができる。
※containerlabはclabで省略可能
以下が実行時のログ

guest@vm-docker2:~/clab/test01$ sudo clab deploy -t topology.yml
INFO[0000] Containerlab v0.60.1 started
INFO[0000] Parsing & checking topology file: topology.yml
INFO[0000] Creating docker network: Name="clab", IPv4Subnet="172.20.20.0/24", IPv6Subnet="3fff:172:20:20::/64", MTU=1500
INFO[0000] Creating lab directory: /home/guest/clab/test01/clab-test01
INFO[0001] Creating container: "r1"
INFO[0001] Creating container: "r2"
INFO[0001] Created link: r1:eth1 <--> r2:eth1
INFO[0001] Adding containerlab host entries to /etc/hosts file
INFO[0001] Adding ssh config for containerlab nodes
lqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqwqqqqqqqqqwqqqqqqqqqqqqqqqqqqqk
x      Name      x          Kind/Image          x  State  x   IPv4/6 Address  x
tqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqnqqqqqqqqqnqqqqqqqqqqqqqqqqqqqu
x clab-test01-r1 x linux                        x running x 172.20.20.3       x
x                x quay.io/frrouting/frr:master x         x 3fff:172:20:20::3 x
tqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqnqqqqqqqqqnqqqqqqqqqqqqqqqqqqqu
x clab-test01-r2 x linux                        x running x 172.20.20.2       x
x                x quay.io/frrouting/frr:master x         x 3fff:172:20:20::2 x
mqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqvqqqqqqqqqqqqqqqqqqqj
guest@vm-docker2:~/clab/test01$ sudo docker exec  -ti clab-test01-r1 bash

ラボの描画

「containerlab graph -t トポロジーファイル」でラボを描画する。

graphコマンドを実行するとhttp://0.0.0.0:50080と出力される
指定のURLにアクセスすると上記ページが生まれている

ラボの停止

「containerlab destroy -t トポロジーファイル」でラボを停止させる。

guest@vm-docker2:~/clab/test01$ sudo clab destroy -t topology.yml
INFO[0004] Parsing & checking topology file: topology.yml
INFO[0004] Parsing & checking topology file: topology.yml
INFO[0004] Destroying lab: test01
INFO[0004] Removed container: clab-test01-r2
INFO[0004] Removed container: clab-test01-r1
INFO[0004] Removing containerlab host entries from /etc/hosts file
INFO[0004] Removing ssh config for containerlab nodes
guest@vm-docker2:~/clab/test01$

FRRoutingを動かす(追記)

topology.ymlの書き方

name: test01

topology:
  nodes:
    r1:
      kind: linux
      image: quay.io/frrouting/frr:master
      binds:
        - daemons:/etc/frr/daemons
        - r1.log:/var/log/frr.log
        - r1.conf:/etc/frr/frr.conf
    r2:
      kind: linux
      image: quay.io/frrouting/frr:master
      binds:
        - daemons:/etc/frr/daemons
        - r2.log:/var/log/frr.log
        - r2.conf:/etc/frr/frr.conf
  links:
    - endpoints: ["r1:eth1", "r2:eth1"]

上記YAMLファイルをtopology.ymlとして保存してdeployコマンドを実行すると2台のFRRouting「r1」と「r2」が起動する。

  • kind:コンテナベースのラボを起動するときにどのように起動させるかを定義している。NOSごとにkind種類が定義されている。※FRRoutingはlinuxなので上記の通り

  • binds:コンテナが参照するファイル、母艦で書かれたものがコンテナ上で参照される

    • bindsで参照されるファイルはコンテナ側で書き込むこともあるのでパーミッションに注意※frr.logとfrr.confはコンテナのログを書き込んだり、configの保存に使われるので私は666にしている

所感

  • Janogでcontainerlabを知って試したところ非常に便利

  • FRRoutingを動かすことができて非常に便利(SRv6も動いた)

  • とにかく便利、ぜひ、試してほしいです

  • 不明な点、これを教えてがあれば書いてください

https://www.janog.gr.jp/meeting/janog51/wp-content/uploads/2022/12/janog51-lab-nakagawa-shima.pdf


いいなと思ったら応援しよう!