見出し画像

SNMPに代わるネットワーク管理技術gNMIのテスト環境を作っています

今朝は4時40分ぐらいに自力で起きました。助手の猫さんも起きてきて一緒にリビングに行きました。猫さんは、ご飯を食べてから、少し遊んで寝ました。

gNMIの学習はドキュメントや動画だけではなんとも理解できないので実際に動作を確認できるテスト環境を作ることにしました。
以前書いた

の環境が使えます。
今回は、WIndowsではなくM2 ProのMacにUTM

をインストールして、UTM上にx86_64版のDebian 12の仮想マシンを構築しました。参考にしたのは

です。
Debian 12とcontainerlab

のインストールまでは快調でした。
TWSNMP FC+SR Linuxのラボ

name: twsnmp

topology:
  nodes:
    srl:
      kind: nokia_srlinux
      image: ghcr.io/nokia/srlinux
    twsnmp:
      kind:  linux
      image: twsnmp/twsnmpfc
      binds:
      - datastore:/datastore
      ports:
      - 8080:8080

  links:
    - endpoints: ["srl:e1-1", "twsnmp:eth1"]

を起動したところ、CPUがssse3に対応していないというエラーがでてラボを起動できませんでした。

#clab deploy
INFO[0000] Containerlab v0.57.2 started
INFO[0000] Parsing & checking topology file: twsnmp.clab.yml
Error: SSSE3 CPU feature is required for node "srl" (nokia_srlinux)

M2 Macの上のエミュレーションでは、だめなのかと諦めかけましたが、UTMの仮想マシンの設定で回避できることがわかりました。
ハードウェアの設定をデフォルト以外の何か良さそうなシステムとCPUに変更して解決しました。

UTMの設定

起動はできましたが、ものすごく遅いです。
起動したラボの中にSR Linuxというネットワーク機器ようのLinuxが入っています。

このSR LinuxがgNM対応になっています。

です。gNMIcをインストールしてアクセスすればgNMIでアクセスできるはずです。
gNMIcのインストールは

UTM上のDebian 12に

bash -c "$(curl -sL https://get-gnmic.openconfig.net)"

でインストールできました。簡単です。
SR LinuxのIPアドレスを調べて、

にある基本的なコマンドを試してみましたが、エラーになります。

gnmic -a 172.20.20.3:57400 -u admin -p "NokiaSrl1!"  --insecure capabilities
target "172.20.20.3:57400", capabilities request failed: "172.20.20.3:57400" CapabilitiesRequest failed: rpc error: code = Unavailable desc = connection error: desc = "error reading server preface: EOF"
Error: one or more requests failed

のようなエラーです。
SR Linuxのサイトの説明を見直してみると

gnmic -a 172.20.20.3:57400 -u admin -p "NokiaSrl1!"  --skip-verify capabilities
gNMI version: 0.10.0
supported models:
  - urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring:ietf-netconf-monitoring, IETF NETCONF (Network Configuration) Working Group, 2010-10-04
  - urn:ietf:params:xml:ns:yang:ietf-yang-library:ietf-yang-library, IETF NETCONF (Network Configuration) Working Group, 2019-01-04
  - urn:nokia.com:srlinux:aaa:aaa:srl_nokia-aaa, Nokia, 2024-07-31
  - urn:nokia.com:srlinux:aaa:aaa-password:srl_nokia-aaa-password, Nokia, 2024-03-31

のように実行すればよいことがわかりました。
--insecureと--skip-verifyの違いです。このラボのSR Linuxは、TLSで通信する設定になっているため、--skip-verifyにする必要がありました。

Basic usageに書いてあるコマンドは--skip-verify を追加しても、そのままではエラーになりました。

gnmic -a 172.20.20.3:57400 -u admin -p "NokiaSrl1!"  --skip-verify  get --path /state/system/platform
target "172.20.20.3:57400" Get request failed: "172.20.20.3:57400" GetRequest failed: rpc error: code = Unimplemented desc = Only ASCII, PROTO/TYPED_VAL, JSON_IETF, JSON_IETF_FROM_ROOT, PROTO_ANY, PROTO_JSON, PROTO_BYTES and CLI_FLAT encodings are supported (received encoding: 0)
Error: one or more requests failed

どうやらエンコードの指定の問題のようです。

gnmic -a 172.20.20.3:57400 -u admin -p "NokiaSrl1!"  --skip-verify  -e json_ietf  get --path /state/system/platform
target "172.20.20.3:57400" Get request failed: "172.20.20.3:57400" GetRequest failed: rpc error: code = InvalidArgument desc = Path not valid - unknown element 'state'. Options are [acl, bfd, interface, platform, system, tunnel, network-instance, netconf-state, yang-library, modules-state, routing-policy, qos, tunnel-interface]
Error: one or more requests failed

エンコードを指定すると、今度はPathがないというエラーになりました。
SR Linuxのサイトに書いてあるエンコードとPathを指定して

gnmic -a 172.20.20.3:57400 --skip-verify -u admin -p "NokiaSrl1!" -e json_ietf get --path /system/name/host-name
[
  {
    "source": "172.20.20.3:57400",
    "timestamp": 1727213211045461083,
    "time": "2024-09-25T06:26:51.045461083+09:00",
    "updates": [
      {
        "Path": "srl_nokia-system:system/srl_nokia-system-name:name/host-name",
        "values": {
          "srl_nokia-system:system/srl_nokia-system-name:name/host-name": "srl"
        }
      }
    ]
  }
]

正常に取得できました。
capabilitiesコマンドの応答から対応しているPathを調べられそうですが、よくわかりません。
今朝は、ここまでで時間切れです。

明日に続く

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

twsnmp
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。