Containerlab入門:DockerでNetDevOps向けの「超軽量」ネットワークラボを構築する

Network tutorial - IT technology blog
Network tutorial - IT technology blog

5分でネットワークラボをデプロイする(クイックスタート)

GNS3やEVE-NGが, わずか数台のルーターを実行するために32GBのRAMを使い果たすのを待つのに疲れたなら、Containerlabを試してみてください。警告:一度使ったら、従来の仮想マシン(VM)には二度と戻りたくなくなるかもしれません。DockerがインストールされたLinuxマシンが1台あれば、準備は完了です。

Containerlabは、次のワンライナーで素早くインストールできます:

bash <(curl -sL https://get.containerlab.dev)

そのスピードを体感するために、2つのLinuxノードを持つモデルを構築してみましょう。lab-don-gian.yamlファイルを作成します:

name: lab-demo
topology:
  nodes:
    node1:
      kind: linux
      image: alpine:latest
    node2:
      kind: linux
      image: alpine:latest
  links:
    - endpoints: ["node1:eth1", "node2:eth1"]

では、ラボを起動しましょう:

sudo containerlab deploy -t lab-don-gian.yaml

10秒足らずで、eth1インターフェースを介して直接接続された2つのAlpineコンテナが立ち上がります。クリーンアップするには、sudo containerlab destroy -t lab-don-gian.yamlを実行するだけです。システムにゴミを残さず、すべてがきれいに削除されます。

Containerlabとは何か、なぜゲームチェンジャーなのか?

ContainerlabはDockerを置き換えるものではありません。それは「オーケストレーター」としての役割を果たします。コンテナを自動的に作成し、仮想インターフェースのペア(veth pairs)を設定し、設計したトポロジに従ってそれらを接続します。各ルーターが数GBの重い仮想マシンである代わりに、各ノードはLinux上の軽量なプロセス(process)にすぎません。

最大の利点は、Infrastructure as Code (IaC)の考え方にあります。ネットワーク構成全体が、単一のテキストファイルに収まります。Gitにプッシュしたり、同僚と共有したり、CI/CDパイプラインに統合して構成テストを自動化したりすることが簡単にできます。

トポロジファイルの構造を解読する

YAMLファイルは、すべてのContainerlabプロジェクトの魂です。次の3つのコアコンポーネントをマスターするだけで十分です:

  • name: ラボの識別子。コンテナを区別するためのプレフィックスとして使用されます。
  • nodes: デバイスのリスト。サーバーにはkind: linuxを、専用機にはNokia SR-Linux、Arista cEOS、Cisco 8000Vなどを使用できます。
  • links: 物理接続を定義します。例えば、["node1:eth1", "node2:eth1"]は2つのノードのeth1ポート間を「配線」します。

Containerlabは常に管理用ネットワーク(management network)を自動的に作成することに注意してください。各デバイスはDockerブリッジからIPを受け取るeth0インターフェースを持ち、すぐにSSHで接続して設定を行うことができます。

実践的な体験:幽霊のようなネットワーク障害を追跡する

以前、ピーク時にランダムにパケットロスが発生するという難解なケースに遭遇しました。本番環境での再現は、サービス中断のリスクが大きすぎて不可能でした。そこで、Containerlabを使用して、FRRouting(BGP/OSPF)を実行する6台のルーターからなるトポロジ全体を再構築することにしました。

iperf3でシミュレートされたトラフィックを流すことで、原因がMTU設定の不一致にあることを突き止めました。具体的には、ある中間ホップのMTUが1450に設定されていたのに対し、他のホップは1500であり、大きなパケットがドロップされていました。Containerlabのおかげで、実機で1週間苦労する代わりに、わずか2時間で原因を特定できました。

アドバンス:ラボを物理ネットワークに接続する

ラボ内のノードをインターネットに接続したり、オフィスの実機スイッチに接続したりする必要がある場合があります。Containerlabはこれをbridgeノードタイプで処理します。

topology:
  nodes:
    br-ex:
      kind: bridge
    router1:
      kind: linux
      image: frrouting/frr
  links:
    - endpoints: ["router1:eth1", "br-ex:eth1"]

この例では、br-exはホストマシン上の既存のLinuxブリッジに直接アタッチされます。これは、仮想ラボ環境内でDNSやDHCPサーバーなどの実際のサービスをテストするための完璧な架け橋となります。

パフォーマンスを最適化するためのヒント

長期間Containerlabを使い込んできた経験から、役立つ3つのコツを紹介します:

  1. グラフモードを有効にする: トポロジが10ノードを超える場合は、sudo containerlab graph -t lab.yamlコマンドを使用してください。物理的な接続をより迅速に確認できる直感的なWebインターフェースが開きます。
  2. ボリュームのマウントを忘れない: コンテナを削除するとデータが失われます。binds属性を使用して、コンテナ内の設定ファイルをホストマシンのハードドライブに保存しましょう。
  3. RAMを監視する: 非常に軽量ですが、Arista cEOSルーターを50台実行すると、16GBのRAMを消費する可能性があります。docker statsを使用して、定期的にリソースを監視してください。

Containerlabをマスターすることは、プロフェッショナルなNetDevOpsへと進むための重要な足がかりです。ケーブルの配線や仮想マシンの起動を待つ時間を費やす代わりに、ネットワークアーキテクチャの設計と最適化に完全に集中できるようになります。

Share: