0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Containerlab上でixia-c-oneをデプロイする

0
Last updated at Posted at 2026-07-11

はじめに

今回はContainerlab上でixia-c-oneをデプロイする方法を紹介する。
※ContainerlabはDockerコンテナを利用してネットワークトポロジーを構築するツールであり、YAML形式のトポロジー定義ファイルからネットワークラボを簡単に構築できる。

2023年に投稿したContainerlab関連の記事はこちら

ixia-c-oneとは

これまでの記事では、Community Editionとして Controller・Traffic Engine・Protocol Engineを個別のコンテナとしてデプロイしていた。本記事では、これらを1つのコンテナに統合した ixia-c-one を利用する。
Containerlabでは keysight_ixia-c-one という専用のノードタイプが提供されており、Containerlab環境では ixia-c-one を利用する構成が推奨されている。
※ixia-c-oneはcontainerlabリリース 0.26から利用可能

通常の ixia-c は Controller・Traffic Engine・Protocol Engine をそれぞれ独立したコンテナとしてデプロイする。一方、ixia-c-one はこれら主要コンポーネントを 1 つのコンテナに統合したパッケージであり、Containerlab 上で簡単に利用できるようになっている。機能的には OTG API を利用したトラフィック生成やプロトコルエミュレーションをそのまま利用できるが、デプロイや管理が大幅に簡略化される。

ixia-c Community Editionとixia-c-oneの比較

項目 ixia-c Community Edition ixia-c-one
構成 Controller + Traffic Engine・Protocol Engine(複数コンテナ) 3コンポーネントを1コンテナへ統合
デプロイ Docker Compose、Kubernetesなど Containerlabとの相性が良い
学習 コンポーネント構成を理解しやすい すぐにトラフィック試験を始められる
ネットワークラボ やや設定が多い 非常に簡単
記事シリーズ これまではこちらを利用 今回はこちらを利用

環境準備

まずは今までの検証で利用していた環境を整理する。

1 既存コンテナ停止

$ docker ps
CONTAINER ID   IMAGE                                                              COMMAND                  CREATED      STATUS      PORTS                                              NAMES
b54a40e1db28   ghcr.io/open-traffic-generator/ixia-c-protocol-engine:1.00.0.531   "/docker_im/opt/Ixia…"   2 days ago   Up 2 days                                                      ixia-c-protocol-engine-veth-z
08fd208906b0   ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.8.0.544     "./entrypoint.sh"        2 days ago   Up 2 days                                                      ixia-c-traffic-engine-veth-z
a1930715575a   ghcr.io/open-traffic-generator/ixia-c-protocol-engine:1.00.0.531   "/docker_im/opt/Ixia…"   2 days ago   Up 2 days                                                      ixia-c-protocol-engine-veth-a
daf273642050   ghcr.io/open-traffic-generator/ixia-c-traffic-engine:1.8.0.544     "./entrypoint.sh"        2 days ago   Up 2 days                                                      ixia-c-traffic-engine-veth-a
9f2a8460d14f   ghcr.io/open-traffic-generator/keng-controller:1.57.0-2            "./bin/controller --…"   2 days ago   Up 2 days   0.0.0.0:8443->8443/tcp, 0.0.0.0:40051->40051/tcp   keng-controller

$ docker stop $(docker ps -aq)
b54a40e1db28
08fd208906b0
a1930715575a
daf273642050
9f2a8460d14f

2 ixia-cコンテナ削除と削除確認

$ docker rm keng-controller
docker rm ixia-c-traffic-engine-veth-a
docker rm ixia-c-traffic-engine-veth-z
docker rm ixia-c-protocol-engine-veth-a
docker rm ixia-c-protocol-engine-veth-z
keng-controller
ixia-c-traffic-engine-veth-a
ixia-c-traffic-engine-veth-z
ixia-c-protocol-engine-veth-a
ixia-c-protocol-engine-veth-z

docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3.イメージの確認(今回のケースでは利用しないが、イメージは残しておく)

docker images
REPOSITORY                                              TAG          IMAGE ID       CREATED       SIZE
ghcr.io/open-traffic-generator/keng-controller          1.57.0-2     ec76d8522e76   3 weeks ago   272MB
ghcr.io/open-traffic-generator/ixia-c-protocol-engine   1.00.0.531   5c5cb153147c   3 weeks ago   1.59GB
ghcr.io/open-traffic-generator/ixia-c-traffic-engine    1.8.0.544    a324f7965b93   7 weeks ago   194MB

4 Containerlabの確認

Containerlabはすでにインストールされているものとして想定。
インストールについては最後の参照の項目を参考にしてほしい。

containerlab versionでバージョン確認。今回は0.76.1を使用

image.png

labのデプロイ

トポロジー定義ファイル(YAML) eth1とeth2をBack-to-Backで接続する構成を作る。
この構成はPort Endpoint、Device Endpointのどちらでも利用できる。

name: ixiac-b2b

topology:
  nodes:
    ixia-c:
      kind: keysight_ixia-c-one
      image: ghcr.io/open-traffic-generator/ixia-c-one:1.55.0-1

  links:
    - endpoints: ["ixia-c:eth1", "ixia-c:eth2"]

本記事では、Containerlab公式のLab Exampleで採用されている ghcr.io/open-traffic-generator/ixia-c-one:1.55.0-1 を使用した。

デプロイ実施(containerlab deploy --topo ixia-c-one-b2b.yml)

containerlab deploy --topo ixia-c-one-b2b.yml

ログ抜粋

01:18:35 INFO Containerlab started version=0.76.1
01:18:35 INFO Parsing & checking topology file=ixia-c-one-b2b.yml
01:18:35 INFO Creating docker network name=clab IPv4 subnet=172.20.20.0/24 IPv6 subnet=3fff:172:20:20::/64 MTU=0
01:18:35 INFO Pulling images
01:19:34 INFO Creating lab directory path=/home/test/lab/containerlab/clab-ixiac-b2b
01:19:34 INFO Creating container name=ixia-c
01:19:35 INFO Created link: ixia-c:eth1 ▪┄┄▪ ixia-c:eth2
01:19:35 INFO Running postdeploy actions for keysight_ixia-c-one 'ixia-c' node
01:20:13 INFO Adding host entries path=/etc/hosts
01:20:13 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-ixiac-b2b.conf
01:20:13 INFO containerlab version
  🎉=
  │ A newer containerlab version (0.77.0) is available!
  │ Release notes: https://containerlab.dev/rn/0.77/
  │ Run 'clab version upgrade' or see https://containerlab.dev/install/ for other installation options.
╭───────────────────────┬────────────────────────────────────────────────────┬─────────┬───────────────────╮
│          Name         │                     Kind/Image                     │  State  │   IPv4/6 Address  │
├───────────────────────┼────────────────────────────────────────────────────┼─────────┼───────────────────┤
│ clab-ixiac-b2b-ixia-c │ keysight_ixia-c-one                                │ running │ 172.20.20.2       │
│                       │ ghcr.io/open-traffic-generator/ixia-c-one:1.55.0-1 │         │ 3fff:172:20:20::2 │
╰───────────────────────┴──────────

ここで表示されている clab は Containerlab の略称で、Containerlabは自動生成するDockerネットワークやコンテナ名の先頭にこの clab を付与し、コンテナ名を clab-- という命名規則で自動生成する。本記事では name: ixiac-b2b、ノード名 ixia-c としたため、コンテナ名は clab-ixiac-b2b-ixia-c となる。

コードの設定(以前利用したコードをContainerlab+ixia-c-one環境へ移行して実施)

以前作成したPort Endpointの試験コードをContainerlab + ixia-c-one環境へ移行して実施する。Flowの設定はそのままで、Controller接続先とPortのlocationのみ変更する。

  1. Controller接続

以前作ったコードは以下のようにlocationがlocalhostとなっていたが、デプロイ後に表示されるコンテナ名もしくはIPv4 Addressの部分を記載する。

#前回までの設定 このまま試験を実行するとConnection refusedのエラーが出力される
api = snappi.api(
    location="https://localhost:8443",
    verify=False,
)

#今回のLabのデプロイで生成されたIPアドレスを使う
api = snappi.api(
    location="https://172.20.20.2:8443",
    verify=False,
)

#Dockerのコンテナ名で名前解決できる環境では、Containerlabが自動生成したコンテナ名を指定してもよい
api = snappi.api(
    location="https://clab-ixiac-b2b-ixia-c:8443",
    verify=False,
)

2.Port location

以前のコードではlocatinをveth-a・veth-zにしていたが、今回はixia-c-oneのサンプルをもとにeth1・eth2と変更する。


#以前のコード
p1 = cfg.ports.add(
    name="p1",
    location="veth-a"
)

p2 = cfg.ports.add(
    name="p2",
    location="veth-z"
)

#変更後のコード

cfg.ports.add(
    name="Tx Port",
    location="eth1",
)

cfg.ports.add(
    name="Rx Port",
    location="eth2",
)

今回の検証では、Containerlabへの移行に伴う変更点を確認することを目的とした。そのため、Controller接続先とPortのlocationのみ変更し、それ以外のコードは以前の記事と同じものを使用している。
結果、双方向のTrafficが正常に送受信できることを確認できた。

./do.sh pytest examples/clab-bydirectional-config.py -s
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-7.1.1, pluggy-1.6.0 -- /home/test/lab/ixia-c/conformance/.env/bin/python
cachedir: .pytest_cache
rootdir: /home/test/lab/ixia-c/conformance, configfile: pytest.ini
plugins: html-4.2.0
collecting ... 2026-07-11 12:31:53.691 [snappi] [WARNING] Version check is disabled

----------------------------- live log collection ------------------------------
WARNING  snappi:snappi.py:106 Version check is disabled
2026-07-11 12:31:53.692 [snappi] [WARNING] Certificate verification is disabled
WARNING  snappi:snappi.py:164 Certificate verification is disabled
Traffic Started
Traffic Stopped
choice: flow_metrics
flow_metrics:
- bytes_rx: '5060058624'
  bytes_tx: '5060058624'
  frames_rx: '9882927'
  frames_rx_rate: 0
  frames_tx: '9882927'
  frames_tx_rate: 0
  name: p1_to_p2
  rx_rate_bps: 0
  transmit: stopped
  tx_rate_bps: 0
- bytes_rx: '4845813248'
  bytes_tx: '4845813248'
  frames_rx: '9464479'
  frames_rx_rate: 0
  frames_tx: '9464479'
  frames_tx_rate: 0
  name: p2_to_p1
  rx_rate_bps: 0
  transmit: stopped
  tx_rate_bps: 0

collected 0 items

======================= no tests ran in 67.46s (0:01:07) =======================

※pytestの検出はcollected 0 itemsとなっているが、これはテスト関数の命名規則の影響であり動作自体には影響しない
※本記事では、コード変更点を最小限に抑えてContainerlabへ移行できることを確認することを目的としている。そのため、pytestのアサーション追加などのコード改善は行っていない。

次にDevice Endpoint+BGPの試験を同様の環境に移して実施。こちらも Controller接続とLocationを変更したのみである。こちらの動作確認結果も以前記載したBGPの試験と同様のものである。
Port Endpointだけでなく、Device EndpointのコードもController接続先とPortのlocationを変更するだけでContainerlab環境へ移行できた。FlowやBGPの設定は変更不要であった。

 ./do.sh pytest examples/clab-bgp-example.py -s
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-7.1.1, pluggy-1.6.0 -- /home/test/lab/ixia-c/conformance/.env/bin/python
cachedir: .pytest_cache
rootdir: /home/test/lab/ixia-c/conformance, configfile: pytest.ini
plugins: html-4.2.0
collecting ... collected 1 item

examples/clab-bgp-example.py::test_ixia_c_veth_bgp_example 2026-07-11 12:45:53.840 [snappi] [WARNING] Version check is disabled
-------------------------------- live log call ---------------------------------
WARNING  snappi:snappi.py:106 Version check is disabled
2026-07-11 12:45:53.841 [snappi] [WARNING] Certificate verification is disabled
WARNING  snappi:snappi.py:164 Certificate verification is disabled

---

Protocol Started
bgpv4_metrics:
- fsm_state: established
  name: Device1.BGP.Peer
  routes_advertised: '1'
  routes_received: '1'
  session_state: up
- fsm_state: established
  name: Device2.BGP.Peer
  routes_advertised: '1'
  routes_received: '1'
  session_state: up
choice: bgpv4_metrics

Traffic Started
choice: flow_metrics
flow_metrics:
- bytes_rx: '142848'
  bytes_tx: '173568'
  frames_rx: '279'
  frames_rx_rate: 0
  frames_tx: '339'
  frames_tx_rate: 0
  name: Device1_route_to_Device2_route
  rx_rate_bps: 0
  transmit: started
  tx_rate_bps: 0
- bytes_rx: '202752'
  bytes_tx: '259072'
  frames_rx: '396'
  frames_rx_rate: 0
  frames_tx: '506'
  frames_tx_rate: 0
  name: Device2_route_to_Device1_route
  rx_rate_bps: 0
  transmit: started
  tx_rate_bps: 0


choice: flow_metrics
flow_metrics:
- bytes_rx: '1133910016'
  bytes_tx: '1133910016'
  frames_rx: '2214668'
  frames_rx_rate: 228709.81
  frames_tx: '2214668'
  frames_tx_rate: 228739.83
  name: Device1_route_to_Device2_route
  rx_rate_bps: 936795400
  transmit: stopped
  tx_rate_bps: 936918340
- bytes_rx: '1155921920'
  bytes_tx: '1155921920'
  frames_rx: '2257660'
  frames_rx_rate: 223568.2
  frames_tx: '2257660'
  frames_tx_rate: 223611.16
  name: Device2_route_to_Device1_route
  rx_rate_bps: 915735360
  transmit: stopped
  tx_rate_bps: 915911300

Traffic Stopped
Protocol Stopped
PASSED

補足

試験完了後や環境をシャットダウンする場合は以下実施をする。

docker-compose版 Containerlab版
./do.sh topo rm containerlab destroy --topo ...
./do.sh topo new containerlab deploy --topo ...

Containerlabの環境を崩した時の作業ログ

containerlab destroy --topo ixia-c-one-b2b.yml
00:00:17 INFO Parsing & checking topology file=ixia-c-one-b2b.yml
00:00:17 INFO Parsing & checking topology file=ixia-c-one-b2b.yml
00:00:17 INFO Destroying lab name=ixiac-b2b
00:00:19 INFO Removed container name=clab-ixiac-b2b-ixia-c
00:00:19 INFO Removing host entries path=/etc/hosts
00:00:19 INFO Removing SSH config path=/etc/ssh/ssh_config.d/clab-ixiac-b2b.conf

まとめ

今回はContainerlab+ixia-c-oneの環境を使った試験を実施した。Port Endpoint・Device EndpointともにController接続先とPortのlocationを変更するだけで既存コードをそのまま利用できることを確認できた。 ラボのデプロイも簡単で、DUTを接続した検証はこちらの方が使いやすそうだという印象を持った。次回はDUTを接続した試験を確認する予定である。

参考

Containerlab on Windows
https://containerlab.dev/windows/

Deploy Ixia-c-one using containerlab
https://ixia-c.dev/deployments-containerlab/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?