floodlightってぶっちゃけどうなの?
DESCRIPTION
TRANSCRIPT
Floodlightって ぶっちゃけどうなの?
2013.11.16 Trema Day #4 関山宜孝 / @moomindani
発表者はこんな人
@moomindani
を開発してるソフトウェアエンジニアです。運用管理OSS
OpenFlow対応ソフト開発してます。
こんな本を書きま
した。
今日のお話
•Floodlightって何? • Floodlightを使ってみる • Floodlightでアプリを作ってみる
RyuTrema
群雄割拠の時代、
到来。
Floodlight って何?
Floodlightとは
•オープンSDNコントローラ • Beaconを起源とし、Javaベースで記述 • Big Switch Networksによって開発され、2012年1月にOSSとして公開
Floodlightの特徴
•Javaベース • Apacheライセンス •オープンなコミュニティ •使いやすい •ハイパフォーマンス • OpenFlow 1.0対応
Floodlightの立ち位置NOX POX Beacon Ryu Trema Floodlight
Open DayLight
Open Contrail
プログラミング言語 C++ Python Java Python
Ruby C Java Java
Python C++ Java
ライセンスGPL v3
GPL v3
GPL v2
Apache 2.0
GPL v2
Apache 2.0 EPL 1.0
Apache 2.0
OpenFlowバージョン 1.0 1.0 1.0
1.01.2 1.3
1.0 1.3 1.0 1.0 ?
Floodlight Javaプロセス
Floodlightのアーキテクチャ
コンソール
物理OpenFlowスイッチ 仮想OpenFlowスイッチ
外部ソフトウェア
Applicationモジュール
ControllerモジュールRES
T AP
IJava API
Floo
dlig
htPr
ovid
er
Applicationモジュール
Controllerモジュール
モジュール機構モジュール 1
モジュール 2
モジュール 3
モジュール N
・・・
モジュール 4
モジュール 1
モジュール 2
モジュール 3
モジュール N
・・・
モジュール 4
Java API
Controllerモジュール•Applicationモジュールに対して汎用的な機能を提供するモジュール
‣ ネットワークの状態やその状態変化を管理する
‣ OpenFlowプロトコルに従ってOpenFlowスイッチとメッセージを交換する
‣ Floodlightプロセスが消費するリソースを管理する
‣ 管理している情報をWebインタフェースで可視化する
Controllerモジュール一覧モジュール名 機能
FloodlightProvider OpenFlowスイッチとの接続を管理し、OpenFlowメッセージを他のモジュールに処理可能な形式に変換する
LinkDiscovery LLDPとブロードキャストパケットによりOpenFlowスイッチ間の接続を検知する
TopologyManager OpenFlowネットワークの物理トポロジ情報を管理する
DeviceManager OpenFlowスイッチ周辺に存在するデバイス情報を管理する
ThreadPool 定期的に実行する処理のスケジュールを管理する
MemoryStorageSource モジュールの動作のために保持する情報を汎用的に管理するNoSQL型のインメモリデータソースを提供する
RestApiServer REST APIを提供する
web Webブラウザからコントローラの状態を確認する機能を提供する
Applicationモジュール
•Controllerモジュールの上位に位置するモジュール
•特定の通信を制御するネットワークアプリケーション
• Floodlightはデフォルトで数種類のモジュールを用意している
•ユーザ独自のモジュールを開発することが可能
Applicationモジュール一覧モジュール名 機能
Forwarding パケットを転送する
VirtualNetworkFilter MACアドレスベースの仮想ネットワーク機能を提供する
Firewall シンプルなACLに基づくファイアウォール機能を提供する
LoadBalancer シンプルなロードバランサ機能を提供する
StaticFlowEntryPusher REST API経由でフローエントリを編集する機能を提供する
Hub ハブとして動作する(サンプル)
LearningSwitch ラーニングスイッチとして動作する(サンプル)
Northbound APIモジュール名 REST API 備考
StaticFlowEntryPusher フローエントリの追加/削除 フローエントリ情報の取得
VirtualNetworkFilter仮想ネットワークの作成 仮想ネットワークへのホストの追加/削除 仮想ネットワーク情報の取得
OpenStack Neutron1
Firewallファイアウォールの状態変更 ルールの追加/削除 ルール一覧の取得
LoadBalancerVIPの作成 プールの作成 プールメンバの作成
OpenStack Neutron LBaaS2
1. https://wiki.openstack.org/wiki/Neutron 2. https://wiki.openstack.org/wiki/Neutron/LBaaS
モジュールローディングシステムモジュールの検知
ロード対象モジュールの 最小セットの探索
モジュールの初期化
モジュールの起動
プロパティファイル
使いたいモジュー
ルだけを
プロパティファイ
ルで指定可能
プロパティファイルfloodlight.modules=\!net.floodlightcontroller.jython.JythonDebugInterface,\!net.floodlightcontroller.counter.CounterStore,\!net.floodlightcontroller.storage.memory.MemoryStorageSource,\!net.floodlightcontroller.core.internal.FloodlightProvider,\!net.floodlightcontroller.threadpool.ThreadPool,\!net.floodlightcontroller.devicemanager.internal.DeviceManagerImpl,\!net.floodlightcontroller.devicemanager.internal.DefaultEntityClassifier,\!net.floodlightcontroller.staticflowentry.StaticFlowEntryPusher,\!net.floodlightcontroller.firewall.Firewall,\!net.floodlightcontroller.forwarding.Forwarding,\!net.floodlightcontroller.linkdiscovery.internal.LinkDiscoveryManager,\!net.floodlightcontroller.topology.TopologyManager,\!net.floodlightcontroller.flowcache.FlowReconcileManager,\!net.floodlightcontroller.debugcounter.DebugCounter,\!net.floodlightcontroller.debugevent.DebugEvent,\!net.floodlightcontroller.perfmon.PktInProcessingTime,\!net.floodlightcontroller.ui.web.StaticWebRoutable,\!net.floodlightcontroller.loadbalancer.LoadBalancer,\!org.sdnplatform.sync.internal.SyncManager,\!net.floodlightcontroller.devicemanager.internal.DefaultEntityClassifier!org.sdnplatform.sync.internal.SyncManager.authScheme=CHALLENGE_RESPONSE!org.sdnplatform.sync.internal.SyncManager.keyStorePath=/etc/floodlight/auth_credentials.jceks!org.sdnplatform.sync.internal.SyncManager.dbPath=/var/lib/floodlight/!
floodlightdefault.properties
Floodlightを 使ってみる
セットアップ
$ git clone git://github.com/floodlight/floodlight.git!$ cd floodlight!$ ant eclipse;!
あとはeclipseを起
動して
生成されたeclips
eプロジェクトを
importするだけ
起動
最新のFloodligh
tなら
自動生成されるec
lipseの実行構成を
実行するだけで起
動できる
WEBインタフェース
デモ環境(インフラ)
Mininet 2.1.0 VM (Ubuntu 13.04)
コンソール
Floodlight
Ubuntu 13.10
デモ環境(OpenFlowネットワーク)Mininet 2.1.0 VM (Ubuntu 13.04)
kvmvm1 kvmvm2
kvm
ofs2
ofs1 ofs3
xen
xenvm1 xenvm2
Mininet / topo-book.py
パケットを転送してみる - Forwarding
Demo
1
kvmvm1 kvmvm2
kvm
ofs2
ofs1 ofs3
xen
xenvm1 xenvm2
Mininet / topo-book.py
送信元 宛先
フローエントリを直接弄ってみる - StaticFlowEntryPusher
Demo
2
kvmvm1 kvmvm2
kvm
ofs2
ofs1 ofs3
xen
xenvm1 xenvm2
Mininet / topo-book.py
送信元 宛先
Drop!! by REST API
Network B
仮想ネットワークを設定してみる - VirtualNetworkFilter
Demo
3
kvmvm1 kvmvm2
kvm
ofs2
ofs1 ofs3
xen
xenvm1 xenvm2
Mininet / topo-book.py
Network A
Floodlightで アプリを作ってみる
モジュールを作るための 3 Steps
1. Applicationモジュール用のインタフェース(IFloodlightModule, IOFMessageListener)を実装する
2. Applicationモジュールをサービス登録する
3. Applicationモジュールをロードする設定ファイルを作成する
1. Applicationモジュール用のインタフェース(IFloodlightModule, IOFMessageListener)を実装する
IFloodlightModuleインタフェース
メソッド名 説明
void init (FloodlightModuleContext context)
モジュールが内部的な初期化処理を実行するためのフック。 (例)・インスタンスの初期化、取得 ・ロガーの初期化
void startUp (FloodlightModuleContext context)
モジュールが外部的な初期化処理を実行するためのフック。 プロアクティブな処理などに使う。 (例)・OpenFlowメッセージのリスナの登録 ・REST APIのルーティングの登録
Collection <Class<? extends IFloodlightService>> getModuleDependencies()
モジュールが依存する対象のモジュールのリストを定義する。 (例)・IFloodlightProviderService ・IRestApiService ・IDeviceService
IOFMessageListenerインタフェース
メソッド名 説明
Command receive (IOFSwitch sw, OFMessage msg, FloodlightContext cntx)
OpenFlowメッセージを受信した際にコールされる。 リアクティブな処理などに使う。 (例)・Packet-Inメッセージのハンドリング ・Flow-Removedメッセージのハンドリング ・Errorメッセージのハンドリング
Command
CONTINUE
STOP
次のモジュールに処理を渡す
このモジュールに処理を終わる
複数モジュール連携
VirtualNetworkFilter
CONTINUE
Firewall
CONTINUE
MyApp
STOP
Packet-In
既存モジュールと
も
自由に連携可能
2. Applicationモジュールをサービス登録するnet.floodlightcontroller.core.module.ApplicationLoader!net.floodlightcontroller.core.internal.FloodlightProvider!net.floodlightcontroller.storage.memory.MemoryStorageSource!net.floodlightcontroller.devicemanager.internal.DeviceManagerImpl!net.floodlightcontroller.linkdiscovery.internal.LinkDiscoveryManager!net.floodlightcontroller.topology.TopologyManager!net.floodlightcontroller.forwarding.Forwarding!net.floodlightcontroller.flowcache.FlowReconcileManager!net.floodlightcontroller.core.OFMessageFilterManager!net.floodlightcontroller.staticflowentry.StaticFlowEntryPusher!net.floodlightcontroller.perfmon.PktInProcessingTime!net.floodlightcontroller.perfmon.NullPktInProcessingTime!net.floodlightcontroller.restserver.RestApiServer!net.floodlightcontroller.learningswitch.LearningSwitch!net.floodlightcontroller.hub.Hub!net.floodlightcontroller.jython.JythonDebugInterface!net.floodlightcontroller.counter.CounterStore!net.floodlightcontroller.counter.NullCounterStore!net.floodlightcontroller.debugcounter.DebugCounter!net.floodlightcontroller.debugevent.DebugEvent!net.floodlightcontroller.threadpool.ThreadPool!net.floodlightcontroller.ui.web.StaticWebRoutable!net.floodlightcontroller.virtualnetwork.VirtualNetworkFilter!net.floodlightcontroller.firewall.Firewall!net.floodlightcontroller.loadbalancer.LoadBalancer!net.floodlightcontroller.l2sw.L2Switch!org.sdnplatform.sync.internal.SyncManager!org.sdnplatform.sync.internal.SyncTorture!net.floodlightcontroller.devicemanager.internal.DefaultEntityClassifier!
net.floodlightcontroller.core.module.IFloodlightModule
3. Applicationモジュールをロードする設定ファイルを作成する
floodlight.modules=\!net.floodlightcontroller.jython.JythonDebugInterface,\!net.floodlightcontroller.counter.CounterStore,\!net.floodlightcontroller.storage.memory.MemoryStorageSource,\!net.floodlightcontroller.core.internal.FloodlightProvider,\!net.floodlightcontroller.threadpool.ThreadPool,\!net.floodlightcontroller.devicemanager.internal.DeviceManagerImpl,\!net.floodlightcontroller.devicemanager.internal.DefaultEntityClassifier,\!net.floodlightcontroller.staticflowentry.StaticFlowEntryPusher,\!net.floodlightcontroller.firewall.Firewall,\!net.floodlightcontroller.forwarding.Forwarding,\!net.floodlightcontroller.linkdiscovery.internal.LinkDiscoveryManager,\!net.floodlightcontroller.topology.TopologyManager,\!net.floodlightcontroller.flowcache.FlowReconcileManager,\!net.floodlightcontroller.debugcounter.DebugCounter,\!net.floodlightcontroller.debugevent.DebugEvent,\!net.floodlightcontroller.perfmon.PktInProcessingTime,\!net.floodlightcontroller.ui.web.StaticWebRoutable,\!net.floodlightcontroller.loadbalancer.LoadBalancer,\!net.floodlightcontroller.l2sw.L2Switch,\!org.sdnplatform.sync.internal.SyncManager,\!net.floodlightcontroller.devicemanager.internal.DefaultEntityClassifier!org.sdnplatform.sync.internal.SyncManager.authScheme=CHALLENGE_RESPONSE!org.sdnplatform.sync.internal.SyncManager.keyStorePath=/etc/floodlight/auth_credentials.jceks!org.sdnplatform.sync.internal.SyncManager.dbPath=/var/lib/floodlight/!
floodlight_l2sw.properties
あとは
この設定ファイル
を読み込んで
Floodlightを起動
するだけ!
TremaもFloodlightも どっちも弄って 楽しいOpenFlow
プログラミングライフを!
Icon Design : Phuzion Icon!http://www.iconspedia.com/pack/phuzion-1825/120.html!
おまけ 本の紹介
1. データセンタネットワークの課題 2. OpenFlowの概要 3. SDN (Software-Defined Networking 4. Open vSwitchを用いたOpenFlowネットワークの構築 5. OpenFlowスイッチ入門 6. OpenFlowコントローラ入門 7. Floodlightを用いたOpenFlowコントローラの実践 8. OpenFlowプロトコルを見る 9. コントローラプログラミング 10. コントローラによるトラフィック制御の活用/運用 11. データセンタオーケストレーションの実現 付録 A. Mininet B. OpenFlow 1.0プロトコル仕様
Kindle版も出たよ
!