Trema Day #4 参加メモ #tremaday

Trema Day #4 参加してきました。というか発表してきました。毎度のごとく各発表のメモを公開しておきます。


Trema Dayといいつつ他の OFC Framework の話、RyuとかFloodlightとかに広がってみたり、実機ベースの話があったり、OpenStack の話が合ったり、また枠の広い話がいろいろ聞けて楽しかったですね。

あと今回発表してみたわけですよ。まあ思うところ詰め込みまくったので時間がね…。いやでも、思いの外好評だったので満足です。

Ryuの遊び方(Pica8も一緒にもっと楽しく!), 大柴さん

Ryuの遊び方(pica8も併せてもっと楽しく)

  • Ryuをベースにした使い方とかについて。
  • Ryuってどんなもの? というさわりの話 + Pica8を使って遊んでみよう
  • 今日の内容
    • Ryuの使い方、OFCとしての使い方、パケットライブラリ周りの話、REST API周りの話
    • ついでにPica8を使ったRyuの変わった遊び方について
  • Ryu?
    • OF1.0/1.2/1.3, NTTの研究所で作ってる。
    • pythonベースのOFCフレームワーク
    • NETCONF(OF-CONFIG)にも対応してる (けど試してません)
    • OpenStackプラグインもある (けど試してません)
  • 誰が使ってる?
    • NTT Communications がいろいろ発表してる。SDN Japan 2013, ArcStar Universal Oneとか。プライベートクラウドの中で、とか。MPLS/BGP系ライブラリのパケットライブラリがあったりする。
    • そのほか、NTTグループ内(Comwareとか)、CYAN Blueplanetとか
    • どこもプロアクティブな処理で作り込みされてるみたい。Ryu開発側としてももそういう処理でつかう想定があるみたい。
  • Install
    • pip install ryu, あるいは git clone + setup.py
    • ついでにいろいろ入る
      • oslo : INI形式設定データ操作
      • wsgi, routes, webob : REST APIにつかう
      • eventlet : タイマ定義とか
  • 動かす
    • ryu-manager (trema run みたいなの)
      • アプリを複数個一緒に動かしたりできる
    • 標準サンプル
      • ryu/ryu/app
      • REST APIを使ったものが多い
  • どうやってOFCを作るか
    • 基本はイベントハンドリングとOFメッセージの送信
  • イベントハンドラ
    • デコレータを使う。set_ev_cls + イベント名を指定して
  • OFメッセージの生成
    • ofctl_v1_x.py を使う
    • ev.msg.datapath.ofproto_parser をつかう(イベントハンドラが引数として受け取る)
    • メッセージ送信は datapath に対して行うので、プロアクティブにやる場合は保持しておく必要がある。
  • datapath object
    • スイッチごとにインスタンスが準備される。
      • IPアドレスとかDPIDとかの情報
      • 定数、OFメッセージパーサとかのモジュールがくっついてくる
  • ofproto, ofproto_parser はどこにあるのか?
    • ryu/ryu/ofprotoにある
    • メッセージの生成方法等が知りたければこの辺とドキュメントを読めばいいよ
  • 例: L1 Switch を作ってみよう!
  • 便利機能
    • LLDPによるトポロジ管理
      • switches
    • packet library
      • いろいろある。本当にいるのかというものもある…
      • なぜかOSPFがなかったりする。けど今後増えてくるかも。
      • LACP流してLAGくんだり、みたいなサンプルがあったりも。この辺はかなり力を入れているらしい。
  • packet library の使い方
    • parse
      • Packet(data=data)
      • next すると L2 > L3 > L4 の情報が順にとれる。
    • generate
  • REST API の定義
    • mapper.connect でURIとメソッドを指定
    • 追加のルートをつける場合は submapper
  • ドキュメント
    • Ryu: github.com/osrg/ryu/wiki
    • NCLCでも出してるよ
    • 来年頭には Ryu-Book っていう日本語の本が出る? Githubで公開されてる。
  • Pica8 OpenFlow
    • 安い。ポート密度。ハイブリッドスイッチ
    • OVSが乗ってるのでそれを使って遊ぶ (OF1.0/1.2/1.3)
  • 特殊な遊び方
    • PicOS 2.0 から debian base になったので python が動かせる。Ryuをスイッチ上で動かそう
      • ためしてみたら ruby も動いたので trema-edge も (サポートのアレがあるのでアレですが)
    • packet-inをスイッチ内で処理、コントローラの分散、リスク分散
      • 上の全体を統合管理するものがいるはずだけど
  • 実績
    • 海外(pica8)ではやったのがあるらしい
    • NCLCではテストまで。

QA

  • ハンドラにデータパスがイベント経由で入ってきて、そっちにパーサーが紐付けられてる。意図、スイッチごとにOFバージョンが違ってもいいってこと?
    • Yes, スイッチ複数バージョンで動いててもその辺の違いはメッセージごとに入ってるので対応できる
  • コンテキスト、ほかのアプリはプロセスとして動いてる?
    • プロセスは一つだったはず。スレッド的なもので動いている?
    • Eventlet が動いていたので疑似スレッドライブラリみたいなのが動いてるんじゃ
  • デコレータってどういうもの?
    • メソッドの前後に必要な処理を定義する場合。
    • メソッドを引数にとるメソッド。"@" つけてメソッドにデコレータをつけると、"@" つけたデコレータの引数にその下の関数が渡される、高階関数

OpenVNetリリースと開発へのお誘い, あくしゅ 山崎さん

OpenVNet Updates 2013/11 in TremaDay#04

  • wakamae-vnet と言ったな。アレは嘘だ → 名前を改めました。そろそろまじめな名前をつけないと…
    • openvnet.com とかも取ったよ
    • trema-edge をつかって OF1.3をつかった仮想NWソフトウェア
    • Github: axsh/openvnet
    • テスト抜くとまだ1万行ない。
    • Edge Overlay 型
    • Wakame-vdc IaaS に入っていた機能をスピンアウト。仮想DC(VDC)を実現する目的で開発。
  • できること
    • 物理L2/L3 NW 上に仮想L2/L3 NW を overlay できる
    • CLIで管理(GUIとかは今はない)
    • 物理NWを仮想NWへ延伸できる (openvnet gateway)
  • DCのNWモデル
    • 外のNWの引き込み
      • WAN Edge (DNAT/LB)
      • LAN Edge (Tunnel, SnAT, DHCP, DNS)
    • Edge Network -> Agent(vna) で処理 → Agentは相互にキューネットワークで連携
      • vna : OVS1.10 + OFC(Trema Edge)
      • vnapi : northbound api
      • vnmgr : 全体の制御, vnaへの指示
      • vnctl ;
  • 進捗どうですか
    • openvnet-testspec project
    • 仮想L3 routingもできるようになったよ
      • V2V(仮想スライス間, P2V(物理と仮想スライス間)
    • ゲートウェイ
  • 仮想L3 Routing
    • L2 Slice Switching <=> Routing <=> Transport (GRE/Mac2Mac)
    • Vyattaみたいな仮想ルータとかが必要なものではなくて、ルータ機能もエッジに埋め込んである形。分散ルータと呼んでいる。
  • VDC以外のユースケース
    • NWのダウンサイジング
      • 複雑な多段L2をNW込みで仮想化して単純化させる
  • 段階的ダウンサイジングのアプローチ
    • Gatewayをおいて物理リソースを仮想環境側で巻き取っていく(移行)
    • 仮想環境への移行が終わったら、Security Groupやそのほかオンデマンドな機能を
  • 今後
    • VXLAN対応(今はGRE,M2M)、もうすぐ
    • Security Group (12月中には?)
    • Floating IP

開発のお誘い

  • 足りてないもの
    • ドキュメント、Getting Start もない…
      • 希望があればインストール方法をハンズオン的にやる場を作りたい。希望があればツイッターとかで書き込んで!
    • 開発
      • 実際のDC運用経験がこのプロダクトについてはない。運用を便利にする機能についてはまだ手薄
      • 複雑なテスト環境がほしい…。どうしても物理NWが必要なんだけどお金の問題が。余裕がある大きな企業とかで是非ご一緒したい。
  • 参加?
    • github issueにやりたいことを書いてください(日本語でおk)
    • fork on github + 機能追加
    • pull request
      • あまり大きくならないうちに是非。

QA

  • OpenVNetで既存環境移行 -> wakame-vdc へのマイグレ。
    • やりようにも寄るけどできないって事は無いんじゃないか
  • 物理機材がないといけないとか、まず動かすところが大変というのがある。できればPC1台で、一回りぐるっと動かせる環境があるといいなあ。OpenStackとかはどうなんだろ
    • いつもKVMの上でいろいろ。VMイメージとかあるとやりやすいんじゃ。昨日 OpenStackユーザ会で OpenContrail の話あったけどUSBメモリ焼いてきて配ったりしてた。
    • 開発環境は考えましょう
    • 実機でもテストしたいなあと思って貸してくれる人が…といったら自宅ラックの人がとか
  • P2Vとvnet-edge-gateway, PとVつなぐ話、違いは?
    • あんまりかわらない。
  • Mac2 Mac, Gateway 間のNW構成がわかっている前提で実行できるもの?
    • yes, 同一L2セグメントの時だけになるけど。ユーザからは見えないけど、内部的には仕組みを使い分けてる。
  • Gateway, 物理に置く上では冗長化?
    • NIC2枚にするとかの仕組みは必要だろう。ソフトウェア的には特に何もない。
    • Loop?
    • Gatewayは一時的に…というのがある。恒久的に使う上での仕掛けはまだこれから。
  • Edge gateway, 実際の物理サーバに gateway 機能を入れる(トポロジとしてはサーバが間に入る)
    • 仮想化物理かはあるけど、何かのマシンが間に入る。
    • 冗長性、ポート数の問題とかがちょっと気になった。
    • gateway の冗長性にはちょっと悩んでるところがあるので、アドバイスをください。
  • アーキテクチャ、すべての環境に適用できるわけではないけど、みたいな話。得意なもの、不得意なものってどの辺?
    • 仮想NWのためだけに用意されたセグメントがないと難しいだろうなというのはある。L2のレベルを混ぜて一部だけ仮想化、みたいな話、Broadcast制御や既存への影響みたいなのがあるので。できれば単一の仮想環境用セグメントを用意してBroadcastを縛るのが前提としてあるだろう。
  • vnmgr/vnaの役割分担。
    • 全体の構造を知らなければいけないものは vnmgr, 個別に(その場で)対応できるものはvnaにまかせる。

PIO盛り 〜Tremaで簡単に使えるパケットパーサいろいろ〜, 近藤さん

Trema day#4 Pio盛り ~Tremaのパケットパーサ~

  • Pio
    • "Pioおじさん" 見たことありますか?
    • パケットの生成・解析を簡単に!
  • 基本三種
    • 最近 ARP と ICMP が追加されました。
    • LLDPは Trema Day #3 にて
  • ARP
  • ICMPも
    • 細かいフィールドも扱えます
  • 特徴
    • 短くかける。もともと router-utils.rb を置き換え!
    • #to_s とかやらんで packet_in 直とか
  • icmpについては ip sla 的な使い方とかの応用なんかもあるよね。
    • オブジェクトトラッキング的なものへの応用とかも簡単。
  • 実は
    • trema をインストールすると pio が入る
    • 割と使われている? gem download 数が結構ある
  • 今後
    • dhcp
    • 802.1Q対応
    • など。いろいろやりたい。
  • いろいろ高宮さんに教わりました!

QA

  • LLDPのdestination変えられるか?
    • 変えられます。
    • スイッチによっては食べちゃうものがあるので。
  • Ryuだとレイヤごとに分けてくっつけるみたいな話。PioはL2/L3までまとめてって言う感じ。どっちがいいんだろう? MPLSはいったり、IPinIPみたいになったり。どこで割り切るか、汎用的にフルか、どうしようかな…
    • 試しに作ってたときはヘッダごとに分けてたんだけど、どうも使いにくいという感じがあったので、1行でまとめて読ませてしまおうとかそういう感じに。
    • いまは割り切ってこういう形。ユースケースとしてレイヤ分ける方が合理的なケースがあれば対応できるだろう。コード見ればわかると思うけど、内部的には宣言的に書いてあるので、今のままでもヘッダをブロック的に分けるのはできるだろう。後は使い方次第なので言ってもらえれば検討します。
    • 簡単なのはこういう方式なので、別のヘッダのボディに渡したときだけ…と乾けて使えればいいのかな
    • trema-edgeではまだ…。Tremaっぽいイメージは今の方式じゃないか。あまりコントローラが送るものがそんなに多種多様になるのだろうか? VLANとかMPLSは後でタグ追加できるくらいでもいいんじゃないかな? #add_vlan_tag(tag)とか
  • PIOが扱うパケットってどの辺が対象? Ethernetに入っているものを充実させる?
    • 正直その辺はあまり考えてない。よく使いそうなものを増やしていこうかな。
    • いまは trema に入ってくるもののパースをしたいので。arp, icmp, dhcp... みたいなところ。packet-inにはいってくるものと、packet_outするものが対象
    • OFのバージョンが上がるときに、bindata で定義するのが楽かと思うけどそういうのは?
    • いまOFメッセージ処理もPIOでやろうと思ってる。DHCPのあといくつかやった後で。計画はいろいろあるけど、ゆくゆくはOFのメッセージング自体もPIOでやれるようにしたい。trema/trema-edgeの共通部分としてPIOに取り出していくというのが最終目標。

Floodlightってぶっちゃけどうなの?, 関山さん

  • 自己紹介
    • Hinemosの開発やってます。
      • Hinemos仮想ネットワークオプション(VNC)の開発。
  • OpenFlow徹底入門という本を書きました

OpenFlow徹底入門 SDNを実現する技術と知識

OpenFlow徹底入門 SDNを実現する技術と知識

  • OFC Framework
    • 群雄割拠の時代
  • Floodlight って何?
    • Open SDN Controller
    • Beacon起源、Javaベース。
    • Big Switch Networks が開発, 2012/1月にOSSとして公開
  • Floodlightの特徴
    • javaベース
    • OF1.0対応。いまは1.0のみ。1.3対応は今年3月までと言っていたけどさっぱり。
    • 開発は活発
  • OFC Framework におけるFloodlightの立ち位置
  • Floodlightのアーキテクチャ
    • アプリケーションモジュールとコントローラモジュール
    • REST APiの提供
  • モジュール機構
    • 使うモジュールをチョイスして動かす。複数モジュールを前提にした作り。
  • controller module
    • アプリケーションモジュールに対して汎用的な機能を提供する。よく使う機能をモジュール単位にまとめたもの。OFメッセージのやりとりとか。
  • application module
    • controller module の上位。特定の通信制御を行うNWアプリケーション。ユーザ独自のモジュールを開発できる。
    • default で用意されてるモジュール: forwarding, virtualnetworkfilter, firewall, loadbalancer など
  • Northbound API
    • StaticFlowEntryPusher
    • VirtualNetworkFilter (Newtron準拠)
    • Firewall
    • LoadBalancer (Newtron LBaaS準拠)
  • モジュールローディング
    • property file
  • Floodlight を使ってみる + demo
  • Setup
    • git clone
    • 開発環境必要であれば eclipse 用にビルドを
  • 起動
    • 実行構成のファイルが最近同梱されるようになりました。
    • 起動するとWebUIとかでいろいろ情報が見れる
  • Demo
    • VM1(OFC), Ubuntu13.10, Floodlight + eclipse
    • VM2, Ubuntu13.04, Mininet2.1.0
  • Demo1, パケット転送のデモ
    • Web UI
      • スイッチ情報、ホストとかフローの情報とか。
      • トポロジ情報、図(グラフ)が出せる
  • Demo2, StaticFlowEntryPusher によるフロー情報操作
  • Demo3, VirtualNetworkFilterによる仮想ネットワーク設定
  • Floodlightアプリを作る
    • アプリケーションモジュール用のインタフェースを実装する。
    • インタフェースクラスの継承
      • IFloodlightModule インタフェース
      • IOFMessageLisnet インタフェース, OFメッセージをlistenするためにつかう (りアクティブな処理)
      • command continue, stop : 複数のモジュールをどう連携させるか?
 packet-in => [module] conitnue => [module] continue => [module] stop
    • アプリケーションモジュールをロードする設定ファイルを作成する
  • いろいろOFC Framework使うといろんな思想とか考え方の違いに気づいたりします。いろいろ使って楽しいOFプログラミングを!
    • 触って理解する、というところを重視してます。
      • 最初から全部やると仮想マシンが10個くらいできます。(ちゃんと逃げ道があるので大丈夫。)
      • 最近 Kindle 版も出ました。

QA

  • continue/stop, いろんなアプリがロードされてる。あるアプリがストップするというのを使ったことがなくて、いつ使うもの物なのか?
    • Usecase, 仮想NWで、同じ仮想NWじゃないからこのパケットはSTOPとかそういうのはあるかも。
    • LLDPとかはLLDPモジュールが使ったらSTOPとかはある?
    • でもほかにどんなモジュールがロードされてるのかわからない
    • 実際には確かにContinueばかり。
  • (メモ漏れ)
  • いま0.9がタグ付けされてるのが最後だけどこれはかなり前。Floodlightフォークしたい場合にどこのポイントを使えばいい?
    • あんまりないです。基本的には最新のものを追いかけることになると思います。
  • モジュール、パケット員の処理、それぞれのモジュールでやってる処理をシーケンシャルにするだけじゃなくていろいろ順序混ざるようなのになるんじゃないか。Tremaもモジュール的な機能提供したいが、いまのfloodlightのモデルでうまくいってるのだろうか
    • 自分の観測範囲ではそういった議論があるかどうかは不明。モジュール、依存関係と深さ優先探索(依存関係定義がどう読まれていくか、モジュールローディングシステムでの探索のところ)。基本的には標準でモジュール間のやりとりみたいなのはない。共通する処理があるとすると、それをコントローラモジュールにするとかはあるかも。
  • curl で REST 打ち込む、人が読むものじゃないなあ、と。簡単な wrapper とか CUI 的なものは?
    • 今はないと思います。基本的には外部ツール使うか生で使うか。商用のbig congroller の方ではもうちょっと何かあるのかも。
  • floodlight, OF1.0のみ、OF1.3開発版とかもない?
    • 少なくとも見える範囲にはない。FAQ, 1.2/1.3 の対応については不明な状態という回答だった。
    • OF1.3対応は去年末くらいからMLにはちょくちょく出てるけど、やってるけど決まってないという話。メッセージが変わりすぎたのでそれをうまいこと扱うための対応をやっている(roxygen?)→使い方がよくわからない。その成果がいつか入るかも。
    • roxygen とかWebには乗ってるので情報あったらください。

Tremaで試すFirewall, @stereocat

発表してきました。資料はコレ。しゃべるのにいっぱいいっぱいでメモとかはないです。

LT

自分の番が終わった後なのでこっからはそんなにちゃんと記録取ってないです…

RouterBoard(RB750GL)でOpenFlow動作を確認してみました, 坪井さん

RouterBOARD with OpenFlow

  • RouterBoard
  • どのていどOpenFlowの機能が使えるか試してみました。
    • ARP Requestに対してうまく処理ができない…
    • features reply みてると、 max packet buffere 0 になってる。
      • OF1.3の使用見ると書いてある。
      • Routerboard ではパケットインできないっぽい。
  • テスト変えてみる
    • うまくいかない
    • Flowエントリは正しく設定されてる。
    • ICMP送信側のフレームがそのまま準側に流れてる…フロールールに従った書き換えができてない。
  • L2処理に落として再度チャレンジ
    • やっぱりFlowエントリのカウントが変わらない…
  • まとめ
    • セキュアチャネルは確立できる
    • パケットインとかフローエントリベースのパケット転送が対応してない
      • 今のところ実験レベル。今後対応してくれれば。
OpenStack Neutron のネットワークサービス 〜XaaS系のAPIの今〜, 元木さん
  • OpenStack Networking : Neutron
    • NaaSを提供する
      • APIは物理レイヤを見せずに論理操作のみを提供する。
      • 物理操作はバックエンドのプラグインがやる。
  • openstack の仮想ネットワークモデル
    • ネットワークの定義、サブネットの設定、ルータの接続、というのがやれる。AWS VPCとかWakame-VDCとかでもできる。
    • 仮想ネットワークモデルを定義して、自由にネットワークを作ろう。
  • Network API
    • ユーザ向け
    • 管理ユーザ向け
  • Advanced Network Service
    • LBaaS
      • Grizzlyで追加
    • FWaaS
    • VPNaaS
    • 論理モデルで定義しているのがおもしろい。共通APIになる可能性。
  • VPNaaSデモ
    • 退行のIPアドレス知らないいけないけど、IPSecでのつなぎ込みとかができるようになってきた。
  • Network Service Insertion
  • 機能分担
    • OpenStackのAPIはいろんなレイヤがあってわかりにくい
    • 一番下、L2/L3, Router, VM
    • 一番上、オーケストレーション層, Horizon etc
    • 間, LBaaS APIとか。どっちの機能に入るのがいいのか? というのは議論がある
    • OpenStack が提供するのは abstraction と integration (not equal Virtualization)
      • L2/L3 APIとサービス系は分けて考える。