floodlightってぶっちゃけどうなの?

40
Floodlightって ぶっちゃけどうなの? 2013.11.16 Trema Day #4 関山宜孝 / @moomindani

Upload: noritaka-sekiyama

Post on 15-Jan-2015

3.001 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Floodlightってぶっちゃけどうなの?

Floodlightって ぶっちゃけどうなの?

2013.11.16 Trema Day #4 関山宜孝 / @moomindani

Page 2: Floodlightってぶっちゃけどうなの?

発表者はこんな人

@moomindani

を開発してるソフトウェアエンジニアです。運用管理OSS

OpenFlow対応ソフト開発してます。

Page 3: Floodlightってぶっちゃけどうなの?

こんな本を書きま

した。

Page 4: Floodlightってぶっちゃけどうなの?

今日のお話

•Floodlightって何? • Floodlightを使ってみる • Floodlightでアプリを作ってみる

Page 5: Floodlightってぶっちゃけどうなの?

RyuTrema

群雄割拠の時代、

到来。

Page 6: Floodlightってぶっちゃけどうなの?

Floodlight って何?

Page 7: Floodlightってぶっちゃけどうなの?

Floodlightとは

•オープンSDNコントローラ • Beaconを起源とし、Javaベースで記述 • Big Switch Networksによって開発され、2012年1月にOSSとして公開

Page 8: Floodlightってぶっちゃけどうなの?
Page 9: Floodlightってぶっちゃけどうなの?

Floodlightの特徴

•Javaベース • Apacheライセンス •オープンなコミュニティ •使いやすい •ハイパフォーマンス • OpenFlow 1.0対応

Page 10: Floodlightってぶっちゃけどうなの?

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 ?

Page 11: Floodlightってぶっちゃけどうなの?

Floodlight Javaプロセス

Floodlightのアーキテクチャ

コンソール

物理OpenFlowスイッチ 仮想OpenFlowスイッチ

外部ソフトウェア

Applicationモジュール

ControllerモジュールRES

T AP

IJava API

Page 12: Floodlightってぶっちゃけどうなの?

Floo

dlig

htPr

ovid

er

Applicationモジュール

Controllerモジュール

モジュール機構モジュール 1

モジュール 2

モジュール 3

モジュール N

・・・

モジュール 4

モジュール 1

モジュール 2

モジュール 3

モジュール N

・・・

モジュール 4

Java API

Page 13: Floodlightってぶっちゃけどうなの?

Controllerモジュール•Applicationモジュールに対して汎用的な機能を提供するモジュール

‣ ネットワークの状態やその状態変化を管理する

‣ OpenFlowプロトコルに従ってOpenFlowスイッチとメッセージを交換する

‣ Floodlightプロセスが消費するリソースを管理する

‣ 管理している情報をWebインタフェースで可視化する

Page 14: Floodlightってぶっちゃけどうなの?

Controllerモジュール一覧モジュール名 機能

FloodlightProvider OpenFlowスイッチとの接続を管理し、OpenFlowメッセージを他のモジュールに処理可能な形式に変換する

LinkDiscovery LLDPとブロードキャストパケットによりOpenFlowスイッチ間の接続を検知する

TopologyManager OpenFlowネットワークの物理トポロジ情報を管理する

DeviceManager OpenFlowスイッチ周辺に存在するデバイス情報を管理する

ThreadPool 定期的に実行する処理のスケジュールを管理する

MemoryStorageSource モジュールの動作のために保持する情報を汎用的に管理するNoSQL型のインメモリデータソースを提供する

RestApiServer REST APIを提供する

web Webブラウザからコントローラの状態を確認する機能を提供する

Page 15: Floodlightってぶっちゃけどうなの?

Applicationモジュール

•Controllerモジュールの上位に位置するモジュール

•特定の通信を制御するネットワークアプリケーション

• Floodlightはデフォルトで数種類のモジュールを用意している

•ユーザ独自のモジュールを開発することが可能

Page 16: Floodlightってぶっちゃけどうなの?

Applicationモジュール一覧モジュール名 機能

Forwarding パケットを転送する

VirtualNetworkFilter MACアドレスベースの仮想ネットワーク機能を提供する

Firewall シンプルなACLに基づくファイアウォール機能を提供する

LoadBalancer シンプルなロードバランサ機能を提供する

StaticFlowEntryPusher REST API経由でフローエントリを編集する機能を提供する

Hub ハブとして動作する(サンプル)

LearningSwitch ラーニングスイッチとして動作する(サンプル)

Page 17: Floodlightってぶっちゃけどうなの?

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

Page 18: Floodlightってぶっちゃけどうなの?

モジュールローディングシステムモジュールの検知

ロード対象モジュールの 最小セットの探索

モジュールの初期化

モジュールの起動

プロパティファイル

使いたいモジュー

ルだけを

プロパティファイ

ルで指定可能

Page 19: Floodlightってぶっちゃけどうなの?

プロパティファイル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

Page 20: Floodlightってぶっちゃけどうなの?

Floodlightを 使ってみる

Page 21: Floodlightってぶっちゃけどうなの?

セットアップ

$ git clone git://github.com/floodlight/floodlight.git!$ cd floodlight!$ ant eclipse;!

あとはeclipseを起

動して

生成されたeclips

eプロジェクトを

importするだけ

Page 22: Floodlightってぶっちゃけどうなの?

起動

最新のFloodligh

tなら

自動生成されるec

lipseの実行構成を

実行するだけで起

動できる

Page 23: Floodlightってぶっちゃけどうなの?

WEBインタフェース

Page 24: Floodlightってぶっちゃけどうなの?

デモ環境(インフラ)

Mininet 2.1.0 VM (Ubuntu 13.04)

コンソール

Floodlight

Ubuntu 13.10

Page 25: Floodlightってぶっちゃけどうなの?

デモ環境(OpenFlowネットワーク)Mininet 2.1.0 VM (Ubuntu 13.04)

kvmvm1 kvmvm2

kvm

ofs2

ofs1 ofs3

xen

xenvm1 xenvm2

Mininet / topo-book.py

Page 26: Floodlightってぶっちゃけどうなの?

パケットを転送してみる - Forwarding

Demo

1

kvmvm1 kvmvm2

kvm

ofs2

ofs1 ofs3

xen

xenvm1 xenvm2

Mininet / topo-book.py

送信元 宛先

Page 27: Floodlightってぶっちゃけどうなの?

フローエントリを直接弄ってみる - StaticFlowEntryPusher

Demo

2

kvmvm1 kvmvm2

kvm

ofs2

ofs1 ofs3

xen

xenvm1 xenvm2

Mininet / topo-book.py

送信元 宛先

Drop!! by REST API

Page 28: Floodlightってぶっちゃけどうなの?

Network B

仮想ネットワークを設定してみる - VirtualNetworkFilter

Demo

3

kvmvm1 kvmvm2

kvm

ofs2

ofs1 ofs3

xen

xenvm1 xenvm2

Mininet / topo-book.py

Network A

Page 29: Floodlightってぶっちゃけどうなの?

Floodlightで アプリを作ってみる

Page 30: Floodlightってぶっちゃけどうなの?

モジュールを作るための 3 Steps

1. Applicationモジュール用のインタフェース(IFloodlightModule, IOFMessageListener)を実装する

2. Applicationモジュールをサービス登録する

3. Applicationモジュールをロードする設定ファイルを作成する

Page 31: Floodlightってぶっちゃけどうなの?

1. Applicationモジュール用のインタフェース(IFloodlightModule, IOFMessageListener)を実装する

Page 32: Floodlightってぶっちゃけどうなの?

IFloodlightModuleインタフェース

メソッド名 説明

void init (FloodlightModuleContext context)

モジュールが内部的な初期化処理を実行するためのフック。 (例)・インスタンスの初期化、取得    ・ロガーの初期化

void startUp (FloodlightModuleContext context)

モジュールが外部的な初期化処理を実行するためのフック。 プロアクティブな処理などに使う。 (例)・OpenFlowメッセージのリスナの登録    ・REST APIのルーティングの登録

Collection <Class<? extends IFloodlightService>> getModuleDependencies()

モジュールが依存する対象のモジュールのリストを定義する。 (例)・IFloodlightProviderService    ・IRestApiService    ・IDeviceService

Page 33: Floodlightってぶっちゃけどうなの?

IOFMessageListenerインタフェース

メソッド名 説明

Command receive (IOFSwitch sw, OFMessage msg, FloodlightContext cntx)

OpenFlowメッセージを受信した際にコールされる。 リアクティブな処理などに使う。 (例)・Packet-Inメッセージのハンドリング    ・Flow-Removedメッセージのハンドリング    ・Errorメッセージのハンドリング

Command

CONTINUE

STOP

次のモジュールに処理を渡す

このモジュールに処理を終わる

Page 34: Floodlightってぶっちゃけどうなの?

複数モジュール連携

VirtualNetworkFilter

CONTINUE

Firewall

CONTINUE

MyApp

STOP

Packet-In

既存モジュールと

自由に連携可能

Page 35: Floodlightってぶっちゃけどうなの?

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

Page 36: Floodlightってぶっちゃけどうなの?

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を起動

するだけ!

Page 37: Floodlightってぶっちゃけどうなの?

TremaもFloodlightも どっちも弄って 楽しいOpenFlow

プログラミングライフを!

Icon Design : Phuzion Icon!http://www.iconspedia.com/pack/phuzion-1825/120.html!

Page 38: Floodlightってぶっちゃけどうなの?

おまけ 本の紹介

Page 39: Floodlightってぶっちゃけどうなの?
Page 40: Floodlightってぶっちゃけどうなの?

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版も出たよ