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に変更して解決しました。
起動はできましたが、ものすごく遅いです。
起動したラボの中に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を調べられそうですが、よくわかりません。
今朝は、ここまでで時間切れです。
明日に続く