ネットワークプログラマビリティ勉強会 #4 参加メモ
久しぶりに勉強会行ってきました。
- ネットワークプログラマビリティ勉強会 #4@GMO Yours - connpass
- 発表資料はこちらにあがってますね。
- ネットワークプログラマビリティ勉強会#4に参加してきた | ぽぽぽぽーんのNWとOSS
個人的にはテスト自動化の話聞きたかったんですよね。いろいろ面白そうなツールがありそうだというのはわかったので試してみたいところです。
あとGMOさんの会場今回初めて行ったんですがイイですね。イス・机・Wifi・電源がそろっているのでPCでメモ取るのが非常にやりやすいです。
- [追記 2015-05-11] 「ネットワークプログラマビリティ勉強会 #4@GMO Yours」潜入レポート! - ConoHa VPS(仮想専用サーバー)
はじめに
ネットワークプログラマビリティ勉強会、目的と方針
- 過去来たことがある、今回始めてきた: 半々くらい
- NWの世界、SDN/NFVがはやってきて、実際どうなるかはともかく検討している。
- ソフトウェア(OSS)系のスキルが必要だけど、そういうのをカバーしている勉強会ってなかなかないですよね。
- 2ヶ月おきくらいで開催中
- タイトル、ネットワークプログラマビリティといいつつ、もうちょっと広い範囲のネタを扱っています。
- 発表のネタに困ってる。ネタを探しています!
- 酒を飲むと結構しゃべってくれる…
- 本当に困ってるからしゃべりたいとか誰か紹介してもらうとか大歓迎です。
- 企画・運営とかで、受付とか手伝っていただける片も大歓迎です。
- 会場、今回GMOさんから提供。いろんなところでできた方が特定の色がつかなくていいかなと思っているので、会場提供可能な片も大歓迎です。
GMOさんからConoHa紹介
ソフトウェア SDN/OpenFlow スイッチ Lagopus とそのプログラミング(hibitomo)
- LagopusというOpenFlowソフトウェアスイッチを作っている。
- OpenFlowで皆さん遊びましょう!
lagopusの概要
SDN, OpenFlow ってなんなのか。
- 一般的なNW機器の中身、コントロールプレーンとデータプレーン
- デバイスごとに各ベンダが作ってる → 自分たちで欲しい機能が入れにくい
- SDN: コントロールプレーンとデータプレーンをわける + コントロールプレーンを一つにして集中制御する。ステートを持つような頭のいいことはコントローラへ。集中制御で統合的に。
- OpenFlowはデータプレーンとコントロールプレーンのやりとりを標準化したもの。
OpenFlow?
- データプレーン
- フローテーブルがいくつか、テーブルの中にはフローが入ってる。
- こういうパケットが来たら(flow pattern) + こういうことをしてください(action) + counter
- 一般的なルータも経路とMACのテーブル2つ持ってたりする。OpenFlowでは任意個数のテーブルがある
Lagopus?
- OpenFlow Switchをソフトウェアで作ったもの。
- 高速なパケット処理: > 10Gbpx
- OF仕様準拠
- OSS
OpenFlow、汎用的すぎて具体的なユースケースが見えにくい(のであまりはやってない…
SDN Japan 2014での実証実験
- 前の席は広帯域、後ろの席は低帯域、みたいな実験。APの位置ごとにVLAN分割、VLAN情報を元に帯域制御
NTT, ワールドカップ中継の経路制御
- ブラジル→日本
- 学術系NWなので間にOFSとか入れられない。OpenFlowでルータをだまして経路制御してみた。
- ブラジル→日本で2つの経路。IP書き換えて通る経路を書き換えて、受ける側で元のIPに戻す
iPoP2015での実証実験
- Lagopusでビデオストリームをながす。Fujitsu IP900, ユニキャストでのストリーム送受信する機械。
- OFS(Lagopus)でストリームをコピー。MAC/IPを書き換えて別な機械に届ける
ターゲット
- SDN/NFVのあしまわり
- 異種NW間ゲートウェイ(vlan/mplsとか)
Lagopusの中身の話
設計の概要
- (ネットに出てるよ!)
機能評価
- Ryu Certification
性能評価(WAN-DC gateway)
- 最近Oで始まるスイッチも結構早い
最近のLagopusの活動
- 2月にvNIC対応をリリース。
- 早い→DPDK使うので
- virtio-net PMD で仮想マシン〜Lagopus間を高速化。dpdk2.0にマージされてる。
- lagopus.github.io
- 日本語のMLもできました。
Lagopus(OpenFlow)で遊んでみよう
- NW屋はpingが飛んだら興奮する、という前提でデモを作りました!!
- Flowを設計して動かしてみる
- OpenFlowっぽいことをやってみる
つかうもの
- Lagopus, Ryu (ofctl_rest.py: RESTをたたいてryuからopenflow messageをlagopusにいれる)→ ofctl_script
デモ
- namespace で node: ns0-4 をつくって
- つなぐ・ふやす(VLAN)・フロールールのリファクタ+デバッグ(ミラーリング)・だます(dhcpサーバの共有)
- つなぐ
- ns1-2, ns3-4
- ポート番号レベルで直結させるflowをいれると2-3/4-5がそれぞれ通信できるようになる。(in_port→Output双方向*2で4フロー)
- match/action
- ns1-2, ns3-4
- 増やしてみる
- 複数のポートに出す: group table があるけどここでは複数actionで。
- タグ操作いろいろやれる: 好きなトンネリングプロトコルに対応できる
- リファクタリング
- デバッグ
- デバッグ用のテーブル: ポートミラー、VLANミラー
- モニタリング用ポートへのoutput
- だます(DHCPサーバの共有)
先に挙げた事例でどういうフロールールがあったのかをちょっと考えてみましょう
- SDN Japanの事例は meter を使っている
職場の上司の足下にOFS置いてごにょごにょするとおもしろそうですよね
自分の手の届く範囲から遊んでみるといいと思います。
Flow設計の注意
まとめ
- Lagopus はやい・やすい・うまい (x86/Linux, OSS, 10Gbps,1MFlow,そのほか機能あれこれ)
- OpenFlow気持ち悪い
- 何でも書き換えまくり
- だがそれがいい
- かゆいところに手が届かないところでは使えるかも
QA
- マルチテーブルで機能分割、それが関数とかのイメージに見えた。テーブルの名前とか定義の仕方とか個数とか、プログラムっぽくかけたりするの?
- プログラム(コントローラ)で名前をある程度書くことはできる。が、スイッチはテーブルは番号でしか見てない。そこはプログラム側とかでデバッグしやすいように情報マッチしてやるとかがいる。
- NFVの話が少しあった。さっきの例だとdhcp使ってたけど、一般的にはFWとかLBとかほしいよね。LagopusはいまL3だとおもう。OFのバージョン上がるとTCPフラグとか見れると思うけど、レイヤ上の方見ていくとかあるの?
- LagopusはOF標準へ追従という方針。SDN/NFVの話考え得と、セッション情報をデータプレーンには持たさないようになるんじゃないかと思っている。FW/LBなどの重要な機能、Lagopusが必要なものだけ投げ先をねじ曲げてアプライアンスとかに投げるみたいな話はあるだろう。OpenFlowにすべてを求めるとでかくなって使いにくくなるのでは。適材適所で使い分けしていくんじゃないかと思っている。
SDNを導入してみて思ったこと(Clorets8lack)
某ユーザ企業情シス、NWを中心とした国際インフラ全般、ひょんなことからSDN運用をすることに。
導入の背景
- 社内のSDN機器やろうとしている事業部がスポンサーになって、ソリューション開発してよって無茶ぶりが
- 国際NW運用で問題になっていたことを解決してみようか
- プログラム作って、現地に行って、機械設置して、運用
- 国際Internet VPNの品質改善を目的とした動的経路制御
国際通信の問題
- 某(中)国と日本の間の通信は品質がいまいち
- 数時間から数日のネットワークダウンが年20回以上とか。
- ちゃんと改善しようとするとお金がかかる
- SDNを使ってコストパフォーマンスを改善しよう
- 2014/2月に中国〜日本間の海底ケーブルが一度に2カ所切れるという大規模障害とかがあったりした。
施策
- 落ちないネットワークを作ろう
つかったもの
- Centec V330, あらゆる線をさして全部ミラー
- 日本に機材持ってきてキッティングして逆輸入
- 税関で2週間止められた…
バックエンド
既存技術比較
- ルーティング制御、分散処理なので問題発生時の見通しが悪い(どこが・どういう状態で、など調べる箇所が多い)
- SDNで中央集権。問題発生時の代替経路はあらかじめ決めておく(すべての組み合わせを試す、とかはしてない)
- メリット
- 中央集権なので可視化、現在の状態がわかりやすい。
- 切り替えが高速。enterpriseの人からするとOpenFlowは得体の知れない技術。ボタン一つで戻せますよ、というと通る。
工夫したところ
- 本社→北京のスイッチに司令が行かないといけない。両方の経路を使って指令を出してる。
- 北京〜本社のなかにfirewallがはいったりする。
- handshake 後に切り替わりがあるとstateがないので通らなくなる。TCPでホールパンチングみたいな状態。
- 両方にパケットを出していて、エンド側でサブの方では落とす、みたいな話を入れてたりする。
プログラム実装時のポイント
- enterprise network, 構成がほとんど変化しない。影響範囲最小。コード重複も許容。特定拠点でここだけ変えたい、みたいなこともやれるようにしていて過度な共通化をしていない
- シンプルかつ機能的なコンソール
- 部長がボタン操作でやれること。
- 役員に見せて説明できるレベルで。
導入後の感想
- enterprise への SDN 導入事例ってまだあまりないと思う
- 実装・テスト・運用を一人でやってる。トラブルあるとどう動かないといけないか、緊張感がある。毎回避難区連みたいになる。強いオペレータになる。
- 何でもできるので、入れてみて初めて、使いどころ・アイデアができてくる。
- 試験環境自分で組まないと、どれくらい便利なのかが予想できない。鶏が先か卵が先か。やってんみないと良さが見えない。
- 入れてみるといろんなアイデアが出てくる。管理者として夢が広がる。
- NWの常識を無視することができる。
- 無視したとしても、最終的には戻ってこないといけない。仕組みを理解しないと手が出せない。
- 現状の仕組みに習熟して、脳内シミュレーションできるような人は、かなり混乱するのでは。そういうところでロックインするのでは。コード読めない人は手が出せない領域、扱い方は要注意かな
QA
- テスト、本番系で?
- 実際入れてみないとやれないので、上海と北京にスイッチ持って行って。サーバと実際に通信するところは宛先IPがわかるのでそこ外して、テストサーバの通信だけをOFSでだけ扱う、みたいな形。試験用通信経路と本番通信経路と分けて、大切な通信に影響与えないようにテストをした。
- 中国の有名なFW、このシステムでは障害とかなかった?
- ルーティング、ルータで分散制御するのとSDNで集中制御するのとどっちがいいか。今回だと集中管理の通いという話。そこの根拠とかってどの辺にあったのか? ルータ台数の問題なのか、ほかの運用上の問題、感想とか。
- 好みの問題もあるし、分散制御のほうが使い慣れてる人もいる。最終的には好き好きだと思う。internet, 分散・冗長性、そういうのが下にある状態。その上に独自の方針で拡張していく、という意味合いが今回はある。いいとこ取りをする。もともと分散制御の上のものに、別な制御方式をかぶせることで冗長性をあげる、ということが今回の活動の本質では、と思う。
- いまの規模は?
- 中国5拠点くらいは管理してる
- コントローラとスイッチのあいだの二重か。コントローラ自体の可用性は?
- コントローラがVMになって二つある。モニタとコントローラは別サーバで二重化。DCの中、ラックの中での二重化は、なるべく既存のものに影響与えないように、二重化するようになってる。
- 品質ベースの経路切り替え、品質としてみているものってどういうもの?
LOOM OpenFlow Controller (shun159)
OpenFlowコントローラの話をします。
普段はtrema/pioのサポートをしています。
LOOM OpenFlow Controller?
OFCっていろんな言語バインディングがありますよね。
- SDNの話: 分散、並行、障害の局所か、とか。
- 生のパケット触るコトって…あるよね
Erlang/OTP
- 動作しながらコードを変えられる
- スーパーバイザで監視、非同期メッセージング、クラスタ…
- バイナリパターンマッチが素敵
- 並行プログラミングもやりやすい
- 分散プログラミングを支援するためのモジュールや関数がたくさんある。
Erlang/OTPの能力を活かしたOpenFlowプログラミング?
- なんかたのしそうだよね
LOOMP OFC
- バイナリパターンマッチ、スーパーバイザ、並行プログラミング
- sync_send/2
- マルチテナントL2みたいなのを作るのに200行くらいでかけたりする
Erlang/OTP は独特で難しいけど文法的には覚えることはそうない
やりたいことが最短でできるのであれば触れてみる価値はあるはず
ネットワークのテスト自動化(otahi)
network test automation - reduce double check -
otahi
network programmability?
- SDN
- config自動化
- テストの自動化
SDN?
- agility, flexibility, ...
- 古いNWがずっとあって入れられる範囲が局所的だったり、日々の運用に負われてやる時間がなかったり。
Config Automation
- 手順チェックが減ったり、設定ミスが減ったりするので自動化できるとうれしいよね。
- telnet しかないみたいな機械のは難しいね。
- 状態管理どうしようね (もし途中で失敗したら?
テストの自動化
- 設定変更して上手くいくか、ほかのところに影響がないか、そこに自信を持って設定できるとうれしいよね。
- 再発防止、ダブルチェックします!! というのを減らせる。テスト通せばミスがすぐ見つかるから。
- 設定変更のハードルが下がる、古いNWでも関係なく通信で切ればてすとになる、etc
どうやってテスト?
テストツールいろいろ
シンプルでリグレッションテストが必要なものは自動化
重要でクリティカルなところは人手やる
開いたと時間でもっと先のことをやろう
TDD with SDN
- 試験環境で全部上手くいったらプロダクションに持って行こうとかやりたい!!
Openflow 超解釈(kwi)
kwi
- 神戸在住
- Stratosphere
- ワイヤレスとオープンフローの開発やってるよ
なにが超解釈?
役には立ちません!
OpenFlow1.5がリリースされました。
- what's new
- packet type TYPE
- OXMの一つ: match指定、set field 指定子、packet-inのときにメタデータとして入れたり。
- 中身は4バイトの構造体(仕様としてこういうのは初めて出てきた)
- OXM列の先頭にないといけないとか。
packet type namespace
つまり
よし。jsonをスイッチしてみよう!!
ネットワークはどこに行った?
そんなこんなで
- OpenFlowたのしいよ!
- no header も raspi GPIO + no-header でやれるんじゃないの?
- gopenflow やってます!
- 無線 + OpenFlowやりたいひと募集中です!
おわりに
次回はinteropおわったあたりで考えています。