Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

4.223 visualizaciones

Publicado el

REST (like) な API を中心に各機器の実装を比較。
* Brocade vRouter
* Brocade VDX
* Arista EOS
* Juniper JUNOS
ENOG37 発表資料です。
http://enog.jp/archives/1404

Publicado en: Tecnología
  • Sé el primero en comentar

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

  1. 1. ネットワーク API のあれこれ Network Node API How do you wan to talk with your Network Node? Twitter: @ebiken | ebiken.g@gmail.com ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 1
  2. 2. ネットワーク 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
  3. 3. ネットワーク自動化・アプリケーション連携への動き 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
  4. 4. ネットワーク自動化・アプリケーション連携への動き 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
  5. 5. ネットワーク自動化・アプリケーション連携への動き 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
  6. 6. 機器側の課題 • 機器毎に違うから? • NETCONF/YANG難しい? • REST/WebAPI の手軽さが欲しい? ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 6 発表・BLOG・資料などがまだ沢山存在!? でも、いまひとつ加速してない気がする?(注:個人の見解です) 人側(開発・運用)の課題 • ネットワーク&プログラミング両方 分かってる人少ない? • 日常忙しすぎて時間無い? ⇒ 機器側の現状について調べてみた (人側については是非ご意見をお聞かせください)
  7. 7. ネットワーク 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 土屋 師子生さん@Cisco http://www.janog.gr.jp/meeting/janog36/program/netconf
  8. 8. ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 8 API対応状況(ネットワーク機器各種) なぜネットワーク運用自動化が進まないのか Why is it difficult to automate network operation by Biglobe 土屋さん http://www.slideshare.net/taijitsuchiya5/ss-47398248 http://www.slideshare.net/taijitsuchiya5/whitebox-switch-48099814 REST API ??
  9. 9. 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 が多い • ステート(セッション)もたない 操作 リソース
  10. 10. 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に含まれない!
  11. 11. 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 • セッション持ったりしている
  12. 12. 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)
  13. 13. Brocade vRouter 5600 (Vyatta) ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 13 設定投入&適用 Workflow 1. 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>
  14. 14. 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
  15. 15. 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 .
  16. 16. 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
  17. 17. 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:pAssW0rd@198.51.100.1/command-api
  18. 18. • 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)
  19. 19. 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
  20. 20. 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
  21. 21. JUNOS: XML RPC Single Method ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 21 CLIコマンドに対応する RPC method 確認方法 参考:JunosのREST APIを使ってみる http://qiita.com/kazubu/items/e5e0941f66f6c6f2f55a
  22. 22. 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
  23. 23. REST (like) API のタイプ • CLIに紐づいたRPC Method をBODYに複数記述 ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 23 XML RPC Multi Method型 (JUNOS Multi RPC) Request Response
  24. 24. ネットワーク 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 を投入
  25. 25. Appendix オープンソースな実装ってあるの? ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 25
  26. 26. • 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
  27. 27. Appendix プログラムするのに知っておきたい事 ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 27
  28. 28. ベンダーが作成している? ライブラリ • 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
  29. 29. まとめ ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 29
  30. 30. • API色々サポートされてるよ • まだベンダー事に独自だよ • RESTはひどく違うよ。てか、RESTじゃないし。 • 開発のためのライブラリは出てきてるけど、まだまだ足りない? • Open Sourceも出てきたよ。でも、まだまだ発展途上。 • 違いを吸収する何かが必要 • OpenDaylight等、NMS / ミドル? • Linux Shellアクセス可能な機器増えてるので、機器に載るGateway作れば良いのでは? • ネットワークプログラミング始めるには十分な環境なのでは? ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 30 まとめ
  31. 31. ディスカッション (皆さんに聞いてみたいコト) ネットワーク API のあれこれ|ENOG37@燕三条 2016/02/19|@ebiken 31
  32. 32. ネットワーク 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使って自動化・プログラミング進めたいと言う人。どのスタンス?

×