【SDNチャレンジ】 第20回 Floodlight編
2015.9.11
いつも読んで頂いている皆さんに支えられ、このSDNチャレンジも20回目を迎えることができました。
今回は新たなOpenFlowコントローラとして、ネットワーク仮想化ベンダであるBig Switch Networks社により開発されたFloodlightをご紹介していきたいと思います。詳細に移る前に、これまでに扱ったOpenFlowコントローラの種類も増えてきましたので、簡単な表を作成してみました。
こうして見ると、OpenFlowコントローラは各主要なプログラミング言語をカバーしているのがお分かり頂けると思います。その中でFloodlightは、OpenDaylightと同様に言語として最も一般的なJavaで記述されています。そのため抵抗なく始められるエンジニアも多く、また開発環境としてEclipseを使用する点で、他言語のコントローラより秀でています(※)。その他の特徴としては、以下といったところでしょうか。
・現在はオープンなコミュ二ティで開発が進められている
・とても容易にビルド・実行が可能
・OpenFlow1.0, 1.1, 1.2, 1.3, 1.4に対応
Floodlightは2012年1月にオープンソースとして公開されて以降、他のOpenFlowコントローラと同様にユーザコミュニティを軸とした開発が進められてきました。Javaを採用している点や、OpenFlowのバージョンにも幅広く対応している事などから、より多くのエンジニアを巻き込み開発や普及活動が進められている様です。
それではFloodlightをインストールし、実際に動作を確認していきましょう!
(※)FloodlightとEclipse
・・・Eclipseとは、IBMが開発し現在はオープンソースとなっている統合開発環境(IDE)の事であり、複数のソフトウェアを使用する事なく、ソースコードの記述やコンパイル、デバッグ等を一括で実現します。プラグインにより、RubyやPythonも含む主要なプログラミング言語での開発も可能となっていますが、Eclipse自体がJavaで開発された経緯もあり、Javaによる開発に特に優れている環境として重宝されています。これまでJavaに精通してきたエンジニアがOpenFlowコントローラの研究開発を始める際、普段から慣れ親しんだEclipseを開発環境として使用できるという点も、Floodlightを選択する1つのメリットと言えそうですね。
まずは環境のご確認をお願いします。
・仮想OS:Ubuntu (ver14.04)
・仮想化ソフトウェア:Virtual BOX (ver4.3.26)
Project Floodlight内にInstallation Guideがありますので、そちらを参考にしてインストールを進めます。システム内パッケージリストの更新、およびFloodlightをインストール/動作させるために必要となる以下パッケージのインストールを行いましょう。(今回は省略しましたが、Eclipseを使用してFloodlightを開発・動作させる際は、ここでsudo apt-get install eclipseの実行が必要です)
・Git(FloodlightのソースコードレポジトリはGitで管理されているため)
・Open JDK
・Apache Ant(Javaベースのビルドツール)
・python-dev
$ sudo apt-get update
$ sudo apt-get install -y git build-essential default-jdk ant python-dev
各インストールが正常に完了しているか、確認しておきましょう。
$ git --version
$ dpkg -l | grep build-essential
$ dpkg -l | grep default-jdk
$ dpkg -l | grep ant
$ dpkg -l | grep python-dev
FloodlightのソースコードはGitから簡単にインストールできます。
$ git clone git://github.com/floodlight/floodlight.git
ダウンロードしたソースコードを確認してみましょう。
$ ls
$ cd floodlight
$ ls
カレントディレクトリを確認した上で、Antでビルドします。
$ ant
Floodlightを置く/var/lib/floodlightディレクトリを新規に作成し、全ユーザーにあらゆる権限を付与する様設定します。
$ sudo mkdir /var/lib/floodlight
$ sudo chmod 777 /var/lib/floodlight
/var/lib/floodlightディレクトリの内容を確認してみましょう。
$ ls -l /var/lib | grep floodlight
さあ、これでインストールが完了しました。想像よりも簡単だったのではないでしょうか?それでは、他のOpenFlowコントローラ同様に動作確認をしていきましょう。
まずは起動したFloodlightとMininetを接続させてみましょう。構成は以下図の通りで、PC1台で仮想的にスイッチとホストを作成しています。なおMininetの詳細やインストール方法については、【SDNチャレンジ】 第10回 OpenDaylight動作編①にてご紹介しておりますので、参考になさって下さい。
UbuntuのIPアドレスを確認し、まだ割り当てられていない状態でしたら、設定をします。(※今回は192.168.137.8としました)
$ ifconfig
$ sudo ifconfig eth0 192.168.137.8
antコマンドによりfloodlight.jarファイルが生成されています。ディレクトリを移動した上でFloodlightを起動させてみましょう。下図の様に、デバッグアウトプットが出力されるはずです。
$ cd ~/floodlight
$ java -jar target/floodlight.jar
新しい端末上でMininetをFloodlightに接続し、pingallコマンドで疎通確認を行います。
$ sudo mn --controller=remote,ip=192.168.137.8,port=6653
mininet> pingall
結果は成功!Mininet内の全ホストとの接続性を確認することができました。
今度はスイッチとホストを物理的に準備し、接続してみます。Raspberry Pi2へのOpen vSwitchインストールがまだお済みでない場合は、【SDNチャレンジ】 第5回 Raspberry Pi2にOpen vSwitchをインストールをご参照頂ければと思います。(※事前にVirtualBoxの「設定」>「ネットワーク」>「アダプター 1」の割当てをブリッジアダプターにすることをお忘れなく!)
まずは、Floodlightを起動させましょう。手順は上記Mininetの場合と同様です。Raspberry Pi2にインストールされているOpen vSwitchをFloodlightに接続します。(Floodlightが使用するポート番号は6653です)
pi@raspberry~$ sudo ovs-vsctl set-controller br1 tcp:192.168.137.8:6653
ポート番号6653が開いていることが確認できます。
$ netstat | more
現時点ではOpen vSwitchにフローが登録されていません。
pi@raspberry~$ sudo ovs-ofctl dump-flows br1
では、Host1とHost2の間でpingによる疎通確認を行った上で、再度フローを確認してみましょう。
pi@raspberry~$ sudo ovs-ofctl dump-flows br1
こちらも成功!これまで扱ってきたコントローラと同様に、Floodlightも様々な動作をさせていけそうです。
新規にOpenFlowコントローラをインストールするのはRyu以来でしたが、インストールの際は時間も大してかからず(平均で2~3分でした)、またFloodlight Projectが正式に公開しているドキュメントの信頼性も高かった(最初から最後まで、マニュアルに従う事でインストールが完了しました)点が特に印象に残りました。特に後者は、より幅広い層が開発や普及に携わっていることの裏付けかもしれませんね。皆さんはどう感じられたでしょうか?
今後はEclipse上でのFloodlight開発にも挑戦できればと考えています。この記事の前半でも触れましたが、Eclipseはプラグインを追加することでJava以外のプログラミング言語を追加できる「開発の共通プラットフォーム」です。TremaやOpenDaylight等、多様なOpenFlowコントローラをEclipse上で扱ってみて、言語毎に比較をしてみるのも面白そうですね。
今回も最後までお付き合いを頂き、ありがとうございました。
文:河合 紀彦

Floodlightと同じカテゴリーの記事
Raspberryと同じカテゴリーの記事
- 【OSC2016】第2回Let'sChat Hubot編
- 【SDNチャレンジ】 第21回 POX編
- 【SDNチャレンジ】 第20回 Floodlight編
- 【SDNチャレンジ】 第19回 Raspberry Piでユースケースに挑戦!
- 【SDNチャレンジ】 第15回 Open vSwitch性能試験編
SDN/NFVと同じカテゴリーの記事
- 【OSC2016】第3回 ChatOpsでOpenStackをAPIから制御する
- 【OSC2016】第1回ChatOpsの構築
- 【OpenStackチャレンジ】 第5回 Ceilometerについて知ろう!
- 【1年間ありがとう!】2015年度エンジニアブログ アクセスランキング発表!
- 【SDNチャレンジ】 第29回 Mininet編
技術関連と同じカテゴリーの記事
- 【次世代通信技術】 第1回 5G入門編
- QNAP紹介(Dockerコンテナ&OpenStack Swift連携)
- 【OpenStackチャレンジ】 第14回 Keystone環境構築編
- 【OSC2016】第2回Let'sChat Hubot編
- 【OpenStackチャレンジ】 第5回 Ceilometerについて知ろう!