32
ネットワーク API のあれこれ Network Node API How do you wan to talk with your Network Node? Twitter: @ ebiken | [email protected] ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19@ebiken 1

ネットワークAPI のあれこれ (ENOG37)

Embed Size (px)

Citation preview

Page 1: ネットワークAPI のあれこれ (ENOG37)

ネットワーク API のあれこれNetwork Node API

How do you wan to talk with your Network Node?

Twitter: @ebiken | [email protected]

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 1

Page 2: ネットワークAPI のあれこれ (ENOG37)

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 2

ネットワーク自動化・アプリケーション連携への動きJANOG36 : 2015年7月15~17日

• API/Web化によるネットワーク自動化• by 井上さん@株式会社IDCフロンティア

• http://www.janog.gr.jp/meeting/janog36/program/api

• NETCONF/YANG

• by 土屋師子生@シスコシステムズ合同会社

• http://www.janog.gr.jp/meeting/janog36/program/netconf

JANOG37 : 2016年1月20~22日

• クラウド事業者側の仮想環境ネットワークの自動化について• by 村上さん@GMOインターネット株式会社

• http://www.janog.gr.jp/meeting/janog37/program/vauto

ネットワークプログラマビリティ勉強会

• 2014年10月24日~ 16ヶ月で8回

• http://network-programmability.connpass.com/

NetOpsCoding

• 2015年10月30日~ 4ヶ月で2回

• #1 https://atnd.org/events/70253

• #2 https://atnd.org/events/74772

Page 3: ネットワークAPI のあれこれ (ENOG37)

ネットワーク自動化・アプリケーション連携への動き

IDCF 井上さん

• 2015年10月中心 : QIITAでAPI実装・実験色々

• http://qiita.com/inoueissei

Biglobe土屋さん

• 2015/12/21 ソフトウェアからルータにNETCONF(ncclient)で設定してみる• http://qiita.com/taijijiji/items/394d6af5a71834c4e48a

• 2015/12/02 ソフトウェアからルータにSSH(Exscript)で設定してみる• http://qiita.com/taijijiji/items/351c48a8a77ee56f6e79

• 2015/05/xx ?? なせネットワーク運用自動化が進まないのか• Why is it difficult to automate network operation• http://www.slideshare.net/taijitsuchiya5/ss-47398248• http://www.slideshare.net/taijitsuchiya5/whitebox-switch-48099814

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 3

Page 4: ネットワークAPI のあれこれ (ENOG37)

ネットワーク自動化・アプリケーション連携への動き

Shintaro Kojima @codeout• NETCONF 入門知ったかぶりしない NETCONF (2014/10/24)

• http://codeout.hatenablog.com/entry/2014/10/24/230013

• NETCONF 入門やってみよう NETCONF (2014/10/30)• http://codeout.hatenablog.com/entry/2014/10/30/224405

Hiroshi Ota @otahi• 2015/04/23 テスト自動化@第4回ネットワークプログラマビリティ勉強会

• http://gvtkne.blogspot.jp/2015/04/npstudy4.html

Brocade Yukihiro Kikuchi• 2014/04/04 Vyatta REST API解説@Vyatta Users Group

• http://www.slideshare.net/YukihiroKikuchi/20140404-vyatta-users-group

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 4

Page 5: ネットワークAPI のあれこれ (ENOG37)

ネットワーク自動化・アプリケーション連携への動き

Twitter: @takech9203

• 2015/02/22 VyattaのREST APIを使ってみる• http://qiita.com/takech9203/items/2225c8e4ac7dc5bea1e0

Twitter: @kakkotetsu

• 2014/12/14 Arista の REST API を ruby や Ansibleで突いてみよう• http://qiita.com/kakkotetsu/items/944c263c1580a230a9c0

NetOpsCoding Advent Calendar 2015:

• http://qiita.com/advent-calendar/2015/netopscoding

• 2015/12/17 JunosのREST APIを使ってみる• http://qiita.com/kazubu/items/e5e0941f66f6c6f2f55a

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 5

Page 6: ネットワークAPI のあれこれ (ENOG37)

機器側の課題

• 機器毎に違うから?• NETCONF/YANG難しい?• REST/WebAPIの手軽さが欲しい?

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 6

発表・BLOG・資料などがまだ沢山存在!?

でも、いまひとつ加速してない気がする?(注:個人の見解です)

人側(開発・運用)の課題

• ネットワーク&プログラミング両方分かってる人少ない?

• 日常忙しすぎて時間無い?

⇒機器側の現状について調べてみた

(人側については是非ご意見をお聞かせください)

Page 7: ネットワークAPI のあれこれ (ENOG37)

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 7

ネットワーク機器へのインターフェース(API)アクセスの目的

•変更:設定

•参照:設定&状態&統計&ログ• Configuration

• Status

• Statistics (counter)

• Log (syslog?)

•コマンド実行• Ping, Traceroute, packet capture,

アクセス手段

• CLI / SSH

• SNMP

• NETCONF / RESTCONF

• REST (like) APIs

• JSON/XML + HTTP (RPC)

本日はこれ

⇒ JANOG36 : NETCONF/YANG by 土屋師子生さん@Ciscohttp://www.janog.gr.jp/meeting/janog36/program/netconf

Page 8: ネットワークAPI のあれこれ (ENOG37)

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 8

API対応状況(ネットワーク機器各種)

なせネットワーク運用自動化が進まないのかWhy is it difficult to automate network operationby Biglobe土屋さんhttp://www.slideshare.net/taijitsuchiya5/ss-47398248http://www.slideshare.net/taijitsuchiya5/whitebox-switch-48099814

REST API ??

Page 9: ネットワークAPI のあれこれ (ENOG37)

RESTおさらい

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 9

RESTおさらい

• URI=リソース

• HTTP Method=操作• POST => Create• GET => Read• PUT => Update• DELETE => Delete

• BODYエンコーディング(符号化)• 何でも良い:JSON, XML, CSV etc.• でも JSONが多い

•ステート(セッション)もたない

操作 リソース

Page 10: ネットワークAPI のあれこれ (ENOG37)

RESTおさらい

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 10

RESTな URI

• /interface/ge-0-0-1• /interface/ge-0-0-1/ipv4

• /version

RESTではない URI

• /show-interface/ge-0-0-1• /set-interface/ge-0-0-1/ipv4

• /show-version

操作は REST URIに含まれない!

Page 11: ネットワークAPI のあれこれ (ENOG37)

RESTおさらい

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 11

• HTTP(S) トランスポート

•プログラムしやすい!• コマンド1行でリクエスト作成可能

• curl, wget ..

•様々な言語のライブラリ• Ruby, Python, Go, Perl ...

• (当然)標準化されていない• RESTは規約ではなく思想

• (個人の見解です)

•そもそもRESTfulだとできない事もある• Candidate config + commit とか。

RESTといいながらRESTfulではない実装が多数• JSON-RPC, XML-RPC

• セッション持ったりしている

Page 12: ネットワークAPI のあれこれ (ENOG37)

Brocade vRouter 5600 (Vyatta)

• URI: コマンドを表す(リソースではなく)• Encoding符号化: JSON

•参照・設定、共にセッションを持つ

• Config Workflow• Ops: one-time output• Ops: continuous output• GET /rest/op/<cmd>

• Ops with no session ID will return parameter definitions.• Very different from RESTful concept.

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 12

Brocade vRouter 5600 (Vyatta)

Page 13: ネットワークAPI のあれこれ (ENOG37)

Brocade vRouter 5600 (Vyatta)

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 13

設定投入&適用Workflow1. Begin a configuration session

• Config Session ID named "conf-id" will be generated.

2. make configuration changes• PUT /rest/conf/<conf-id>/set/<path>

• PUT /rest/conf/<conf-id>/delete/<path>

3. commit changes• POST /rest/conf/<conf-id>/<cmd>

4. optional: view config• GET /rest/conf/<conf-id>/<path>

5. save config• POST /rest/conf/<conf-id>/<cmd>

6. Finish configuration session• DELETE /rest/conf/<conf-id>

Page 14: ネットワークAPI のあれこれ (ENOG37)

Brocade vRouter 5600 (Vyatta)

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 14

参照コマンド (One Time)• Begin a ops session

• POST /rest/op/show/version• HTTP/1.1 201 Created• Location: rest/op/137AA3B22A362CA3

• Get output from the command just sent• GET /rest/op/137AA3B22A362CA3• HTTP/1.1 200 OK

• If request 2nd time, it's gone.• GET /rest/op/137AA3B22A362CA3• HTTP/1.1 410 Gone

Page 15: ネットワークAPI のあれこれ (ENOG37)

Brocade vRouter 5600 (Vyatta)

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 15

参照コマンド (継続的)• Begin a ops session (ex: ping)

• POST /rest/op/ping/10.0.0.1

• Get ouput (1st)• GET /rest/op/02B3479CA1522F2A• HTTP/1.1 200 OK• PING 10.3.0.1 (10.3.0.1) 56(84) bytes of

data.• 64 bytes from 10.3.0.1: icmp_seq=1

ttl=64 time=0.839 ms• 64 bytes from 10.3.0.1: icmp_seq=2

ttl=64 time=0.846 ms• ...• 64 bytes from 10.3.0.1: icmp_seq=18

ttl=64 time=0.821 ms

• Get output (2nd) • GET /rest/op/02B3479CA1522F2A• HTTP/1.1 200 OK• 64 bytes from 10.3.0.1: icmp_seq=19

ttl=64 time=0.799 ms• 64 bytes from 10.3.0.1: icmp_seq=20

ttl=64 time=0.807 ms• ...

• Stop a ops session (and the command ping)• DELETE /rest/op/02B3479CA1522F2A

.

Page 16: ネットワークAPI のあれこれ (ENOG37)

Brocade VDX

• URI: リソースを表す• エンコード(符号化):XML• コマンド:HTTP Method (GET, POST, PUT, PATCH, DELETE, OPTIONS, and HEAD)• パラメーター:BODY (XML)

• 設定のための “session-id” や “commit” という概念はない• POST http://host:80/rest/config/running/interface/TenGigabitEthernet/%221/0/5%22/ip• <address>• <address>192.168.10.1/24</address>• <ospf-ignore>true</ospf-ignore>• </address>

• 参照(実行)コマンドには “session-id” があり実行結果をレスポンス• ex: l2traceroute-result,

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 16

Brocade VDX

Page 17: ネットワークAPI のあれこれ (ENOG37)

REST (like) API のタイプ

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 17

JSON RPC 型 (Arista EOS eAPI)

URI: 固定Encoding符号化: JSONコマンド:BODY (JSON)パラメータ:BODY (JSON)

Reference: https://eos.arista.com/arista-eapi-101/

<protocol>://<username>:<password>@<hostname or ip-address>/command-api

ex: http://admin:[email protected]/command-api

Page 18: ネットワークAPI のあれこれ (ENOG37)

• CLIを投入するようにコマンドをシーケンシャルに記述可能

•参考: Arista eAPIの概略を5分で説明してくれます。• https://www.youtube.com/watch?v=9sWux0GCZ78

• Command API Explorer

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 18

JSON RPC 型 (Arista EOS eAPI)

Page 19: ネットワークAPI のあれこれ (ENOG37)

JUNOS: XML RPC Single Method

• CLIに紐づいた RPC MethodをURIに記述• インターフェース名などのパラメータもURI中に?で指定

• scheme://device-name:port/rpc/method[@attributes]?params• scheme: http or https• method: rpc command

• 各コマンドに対してそれぞれRPC methodが定義されている。• params: Optional parameter values (name[=value])

• Response Formatを指定可能• @attributes で指定: @format=json• HTTP header “Accept:” で指定:application/xml, application/json

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 19

JUNOS: XML RPC Single Method

参考:JunosのREST APIを使ってみるhttp://qiita.com/kazubu/items/e5e0941f66f6c6f2f55a

Page 20: ネットワークAPI のあれこれ (ENOG37)

device-name port

JUNOS: XML RPC Single Method

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 20

URI Example

https://198.51.100.1:3000/rpc/get-software-information

... /get-interface-information?terse=&interface-name=ge-0/0/1

method

method parameters

参考:JunosのREST APIを使ってみるhttp://qiita.com/kazubu/items/e5e0941f66f6c6f2f55a

Page 21: ネットワークAPI のあれこれ (ENOG37)

JUNOS: XML RPC Single Method

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 21

CLIコマンドに対応する RPC method 確認方法

参考:JunosのREST APIを使ってみるhttp://qiita.com/kazubu/items/e5e0941f66f6c6f2f55a

Page 22: ネットワークAPI のあれこれ (ENOG37)

JUNOS: XML RPC Single Method

• 1. 設定投入:POST load-configuration•設定内容は BODY に CLI 出力と同様のフォーマットで指定。

• Candidate Configに保存される

• 2.設定適用:POST commit-configuration

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 22

JUNOS 設定投入・適用

参考:JunosのREST APIを使ってみるhttp://qiita.com/kazubu/items/e5e0941f66f6c6f2f55a

Page 23: ネットワークAPI のあれこれ (ENOG37)

REST (like) API のタイプ

• CLIに紐づいたRPC MethodをBODYに複数記述

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 23

XML RPC Multi Method型 (JUNOS Multi RPC)

RequestResponse

Page 24: ネットワークAPI のあれこれ (ENOG37)

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 24

REST (like) API まとめ• Vyatta

• URI = CLI Command• Encode: JSON• Session 設定:有|参照:有• 設定はセッション(conf-id)毎にCandidate configを編集、Commit

• 参照やOpsコマンド実行は2回以上リクエスト投げて結果を受け取る

• 継続的なコマンド(Ping)とか実行可能

• Brocade VDX• URI = Resource• Encode: XML• Session: 設定:無|参照:有(継続コマンドのみ)• HTTP Method で操作を表す• 設定のためのセッションという概念は無い。• 継続的なコマンドにはセッションという概念あり。

• Arista• URI: 固定 /command-api• Encode: JSON• Session: 無• コマンドは Request BODY に JSONで記述• 複数コマンドを1度に送信できる。

• Juniper• URI = CLI mapped RPC method (or 固定URI + RPC method in BODY)

• Encode: XML, JSON, TXT• Session: 無• 設定投入は設定をBODYに記載して /load-

configuration に投入• 適用は commit-configuration を投入

Page 25: ネットワークAPI のあれこれ (ENOG37)

Appendixオープンソースな実装ってあるの?

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 25

Page 26: ネットワークAPI のあれこれ (ENOG37)

• OpenSwitch by HP• REST実装あり。但し現状は OVSDBに対する操作のみ。

• ops-restd : Overview• ------------• OpenSwitch provides a Tornado framework-based application to access

**OVSDB** using RESTful APIs. The ops-restd module provides all the necessary python packages required to add, delete, modify tables in the OVSDB database using ```HTTP``` methods, ```GET, POST, PUT and DELETE```.

• Linux Shellアクセスできる機器増えてるので、Switchに載るGateway作るとか?• OpenFlowでもなんでも、RESTでアクセスできるように。

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 26

Page 27: ネットワークAPI のあれこれ (ENOG37)

Appendixプログラムするのに知っておきたい事

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 27

Page 28: ネットワークAPI のあれこれ (ENOG37)

ベンダーが作成している?ライブラリ• Juniper

• https://github.com/Juniper/net-netconf

• https://github.com/Juniper/netconf-perl

• https://github.com/Juniper/netconf-java

• https://github.com/Juniper/netconf-php

• https://github.com/leopoul/ncclient

• Cisco

• https://github.com/jtimberman/ruby-cisco

• https://github.com/nickpegg/ciscolib

• Brocade

• [https://github.com/brocade/ncclient

• https://github.com/brocade/brocade (OpenStack Plugin)

• https://github.com/BRCDcomm/BVC (VyattaController )

• https://github.com/zapman449/brocade_switchshow_aliases(Fiber switches)

• Alaxala

• https://github.com/sumikawa/netconf

• Cumulus

• https://github.com/CumulusNetworks/cumulus-linux-ansible-modules

• https://github.com/CumulusNetworks/cumulus-linux-chef-modules

• https://github.com/CumulusNetworks/net-next

• https://github.com/CumulusNetworks/quagga

• https://github.com/CumulusNetworks/cumulus-cl-interfaces-puppet

• https://github.com/OpenRTMFP/Cumulus (MonaServer使ったSW)

• https://github.com/cotdsa/cumulus

• http://cumulusnetworks.com/blog/cumulus-linux-2/

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 28

Slide 40, JANOG36, IDCF井上さんhttp://www.janog.gr.jp/meeting/janog36/download_file/view/188/170

Page 29: ネットワークAPI のあれこれ (ENOG37)

まとめ

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 29

Page 30: ネットワークAPI のあれこれ (ENOG37)

• API色々サポートされてるよ

• まだベンダー事に独自だよ• RESTはひどく違うよ。てか、RESTじゃないし。

• 開発のためのライブラリは出てきてるけど、まだまだ足りない?

• Open Sourceも出てきたよ。でも、まだまだ発展途上。

• 違いを吸収する何かが必要• OpenDaylight等、NMS / ミドル?• Linux Shellアクセス可能な機器増えてるので、機器に載るGateway作れば良いのでは?

• ネットワークプログラミング始めるには十分な環境なのでは?

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 30

まとめ

Page 31: ネットワークAPI のあれこれ (ENOG37)

ディスカッション(皆さんに聞いてみたいコト)

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 31

Page 32: ネットワークAPI のあれこれ (ENOG37)

ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 32

ちょっとアンケート(あなたの気持ちは?)

1. システム開発は外注するよ• Do you really want to Program, Write Code?

• NMSはSIerが作ってくれるから。

• お金と時間ある人はこちらで。

2. ミドルウェア経由で作るよ• どうせ機器間の違いを吸収するミドルウェア必要なんじゃない?(ODLとか)

• ミドル作る人が頑張ればAPIの種類はどうでも良い?あれば良い。

• ほんとにODLとか使いたい?やりたい事のわりに複雑じゃない?

3. ライブラリ使ってやります。• 開発はしたいけど、機器毎にライブラリ用意してもらったらAPIは気にしなくてOK?

• Python, Ruby, Go?

• ライブラリは誰が作るんだっけ?

4. API直接使いたい!• システム小さいし。

• APIが必要:既存監視システム、NMSなどに統合したいから。

API使って自動化・プログラミング進めたいと言う人。どのスタンス?