CodeZine(コードジン)

特集ページ一覧

ネットワーク機器でコンテナが稼働する? プログラマブルなネットワークの世界【デブサミ2020夏】

【C-5】もうネットワークを土管とは呼ばせない!~LANスイッチでPythonだって動いちゃう~

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2020/09/07 12:00

 ネットワークエンジニアと聞いて何を思い浮かべるだろうか。機器がずらりと並ぶ密室で監視専用の端末に黙々とコマンドを打ち込む姿……。いやいや、それは一昔前の話。今ではネットワークの運用管理はGUIでリモート操作し、Pythonなどのプログラムで制御もできる。アプリケーション開発者の世界と近くなっているのだ。そんなプログラマブルなネットワークの現在とリアルをシスコシステムズ 田川真樹氏が解説する。

目次
シスコシステムズ合同会社 システムズエンジニア 田川真樹氏
シスコシステムズ合同会社 システムズエンジニア 田川真樹氏

ネットワーク機器への操作もおなじみのインターフェースで

 シスコシステムズのシステムエンジニア、田川真樹氏は九州工業大学情報工学部出身。大学は学生の自主性を尊重し、パブリックのIPv4アドレスを自由に使える環境だった。後に奈良先端科学技術大学院大学でSDNと無線LANを組み合わせる研究に没頭し、2016年からシスコシステムズへ。SDN応用技術室を経て、現在はアカウントSEとして活動している。

 今回のセッションでは、その田川氏がネットワークインフラのプログラマビリティについて、デモを交えながら解説する。前半はプログラムでネットワーク機器を操作する方法について、後半はネットワーク上でプログラムを稼働させる方法について紹介する。

 ネットワークの世界はアプリケーション開発の世界と大きく異なる印象がある。ネットワーク機器から情報を取得し設定を行う時に使われるコマンドラインインターフェースは、アプリケーションの世界でおなじみのRESTとは異なるプロコトルだ。機器固有のコマンドにはオプションや省略形があり、達人でなければ使いこなせない。コマンドの戻り値は構造化されていないテキストが長文で並ぶ。構造化されていないデータをプログラムで扱うのは非常に難しい。

 しかし今回のセッションで紹介された2種類のプログラマブルなインターフェースには、パーサーを使った抽象化と、ネットワーク機器が備えるネイティブなプログラマブルインターフェースがある。前者はネットワーク機器のコマンドラインインターフェースで扱われるテキストをパーサーが抽象化するもので、後者はアプリケーションの世界におけるREST APIと同様に、ネットワーク機器が情報を構造化して扱う。

 パーサーで抽象化するものだとシスコのpyATS/Genieや、GoogleのTextFSMがある。ここでは前者をベースに解説する。pyATSはPython3をベースとしたネットワークテスト自動化フレームワークで、その中にオープンソースライブラリとなるGenieがある。シスコの製品開発時に使われているツールをオープンソース化したもので、実績は豊富。シスコだけではなく、他のネットワークOSにも対応している。

 pyATS/Genieでは、Pythonプログラムがネットワーク機器でコマンドを実行、戻り値となるテキストをGenieがパースするという流れになる。単なるスクレイピングにとどまらず、プラットフォームやベンダーに依存しない機能ごとのモデルに抽象化することもできる。例えば特定の機能について情報収集したい時はモデルを指定して「learn」(学習する)を実行すればよい。そうすればプログラムが自動的に関連するコマンドを発行し、戻り値をもとに情報をまとめる。機種依存のコマンドを使いこなさなくてもいいのだ。

 こうしたスクレイピングではなく、ネイティブなプログラマブルインターフェースとしてはNETCONF、RESTCONF、gNMIなどがある。例えばRESTCONFは文字通りREST APIに非常に似通ったインターフェースだ。

 NETCONF、RESTCONF、gNMI、これらインターフェースごとにプロトコル(SSH、HTTPなど)やエンコーディング(XML、JSONなど)が異なるが、コンテンツ部分はデータモデル言語YANGによって共通して表現できる。従来はベンダーやOSごとに異なるコマンドや表現を学習する必要があったが、YANGデータモデルには業界団体や標準化団体によって定義されたオープンモデルと呼ばれるデータモデルが存在する。これによってマルチベンダー環境にも対応できる。

どのインターフェースもモデルは共通
どのインターフェースもモデルは共通

 例えばネットワーク機器の設定を変更するとしよう。コマンドラインなら「no」に続いて古い設定を入力し確定、その後新たな設定を入力し確定する。REST API的に見ると、コマンドライン内にメソッドとペイロードが混在しているようなものだ。しかしRESTCONFであれば、POSTやPUTメソッドを使い、bodyの中に新しい設定を指定するため、「宣言的に設定を投入できる」と田川氏は言う。

 ここまではネットワーク機器への操作だったが、逆にネットワーク機器からの出力(テレメトリ)に関するプログラミングについて見ていこう。従来使われているテレメトリにはsyslog、SNMP Trap、NetFlowがある。これに加えてYANGでモデル化されたNETCONF Dial-In、gRPC Dial-Out、gNMI Dial-Inがある。つまりネットワーク機器がYANGデータをプッシュ送信していることになる。プッシュのタイミングは定点観測のように一定時間ごとだけではなく、例えばクライアント数がしきい値を超えたなどの変化をきっかけにすることもできる。

 田川氏はコレクタのTelegrafでテレメトリを指定し、Grafanaで可視化する様子を披露した。取得したい情報をコードの中でパス(URI)として指定すると、ネットワーク機器から情報が出力され、このデータを時系列データベースとなるinfluxdbに蓄積し、Grafanaでグラフ化する。データはすべて構造化されているのでプログラムで扱いやすい。

Salesforce DXによる各課題の解決
Telegraf + Grafana を使った可視化

関連リンク

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • CodeZine編集部(コードジンヘンシュウブ)

    CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

バックナンバー

連載:【デブサミ2020夏】セッションレポート

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5