2013年8月27日火曜日

Tremaを試す ~hello trema その1~

こんにちは、鯵王です。

今回はTremaで作ったOpenFlowコントローラを動かしてみます。

Tremaのパッケージにはいくつかのサンプルプログラムがついていますので、今回はその中の一つ、hello_tremaを使ってみます。

私はgemでTremaをインストールしたため、インストールに使用したパッケージがどこにあるかわかりませんでした。
findで検索したところ、パッケージは以下の場所に展開されてました。

/var/lib/gems/1.8/gems/trema-0.3.##
※##にはバージョンが入る

サンプルプログラムは上記ディレクトリ配下の以下のディレクトリにあります。

./src/examples/examples

examplesの中のhello_tremaというディレクトリにhello_trema.rbという名前のファイルがありますので、catなどで中身を見てください。
プログラム部分だけ抜粋すると以下のような内容になっています。

(hello-trema.rb)
class HelloTrema < Controller
  def switch_ready datapath_id
    info "Hello %#x!" % datapath_id
  end
end

TremaのプログラムはHTMLファイルのようにテキストファイルに書けばよく、コンパイルなどは不要です。
このプログラムをログインユーザのホームディレクトリ等に用意してください。

プログラムを実行するにはコマンドラインで以下のように打ちます。

trema run ./hello-trema

以下のように、画面にはなにも表示されないと思います。

$ trema run ./hello-trema


フォアグラウンドで実行されているので、Ctl-Cで終了します。

実はこのhello_tremaのサンプルプログラムはOpenFlowスイッチと接続すると画面にメッセージが表示されるようになっています。

ではOpenFlowスイッチが無いと確認できないのかと言うとそうではありません。

Tremaというフレームワークはこの辺りも便利にできていて、OpenFlowスイッチを用意しなくても作ったプログラムを動かせるネットワークエミュレータ ツールを持っています。

このネットワークエミュレータツールは仮想OpenFlowスイッチの他に仮想ホストも設定できるので、Tremaで作ったプログラムはこの仮想環境で動作を確認する事ができるのです。

先ほど見たhello_tremaディレクトリの中には、hello_trema.rbの他にsample.confというファイルがあります。
このconfファイルはネットワークエミュレータツールの環境を定義するファイルです。

中身はテキストで以下のように書いてあります。

(sample.conf)
vswitch { datapath_id "0xabc" }

この内容で構成される仮想環境は、OpenFlowスイッチが一つあるだけという状況です。
このsample.confも先ほどのhello_trema.rbと同じディレクトリに用意してください。

仮想環境でプログラムを動かすにはコマンドラインに以下のように打ち込みます。

trema run ./hello-trema.rb -c ./sample.conf

画面には以下のように表示されたでしょうか。

$ trema run ./hello-trema.rb -c ./sample.conf
Hello 0xabc!
※Ctl-Cで終了します。

今回は以下の2点を試しました。
・tremaのプログラムを実行する
・ネットワークエミュレータツールを使う

次回はもう少しプログラムの内容を掘り下げたいと思います。

2013年8月26日月曜日

SDN/OpenFlowのイメージ図


どもども。

やんだ@蝉ノイローゼ です。

近所で大量発生、道にちらばる大量のセミ爆弾。
怖い…セミ怖い…。

さて、本題。

SDN/OpenFlowのイメージ図を作ってみました。
少し、それぞれの関係性を整理したかったとです。



項目ごとに簡単な説明を。

◆SDNコントローラ
 TremaやNoxなどのコントローラです。
 OpenFlowコントローラとも呼ばれる事がありますね。
 文字通り、ネットワーク全体のコントロールを行います。

◆Southbound API
 SDNコントローラと各ネットワーク機器をつなぐAPIです。
 代表格としてOpenFlowがこれにあたりますが、ベンダーによっては
 独自のAPIやプロトコルでこの部分を補填している場合があります。
 (新たなプロトコルの登場も??)
 
◆Northbound API
 ここがちょっと曲者。
 ネットワークの制御自体はSDNコントローラで完結しています。
 ただ、実際に運用する時はSDNコントローラと他のアプリケーションとを
 連携させていかなければいけません。
 その為のAPI達を総称してNorthbound APIと呼びます。
 
 接続先は盛りだくさん。
 ・SDNコントローラをGUIで使用する為のアプリケーション。
 ・負荷分散装置やFWとの連携用API。
 
Northbound APIに関しては、性質上、標準化すべきという議論もされています。
OpenDayLightプロジェクトでどこまで標準化されていくかも気になるところです。

SDNが単体ではなく、クラウドオーケストレーションという形で、
他のアプリケーションと連携する以上、Northbound APIが様々な意味での
キーワードになってくるのでしょうかね。

ここら辺が標準化されずにベンダー独占のような形になると、
正直、枠組みが少し広くなっただけで、結局ネットワークはベンダー依存のまま
なんて事になりかねませんからね。

それではまた次回!

2013年8月22日木曜日

Tremaのインストール

こんにちは。鯵王です。

今回はいよいよTremaのインストールをします。


Ubuntuのコンソール画面を開き、以下のコマンドを実行します。(Ubuntu12.04の場合)

$ sudo apt-get install gcc make ruby1.8 rubygems1.8 ruby1.8-dev libpcap-dev libsqlite3-dev
$ sudo gem install trema

なんと!これでインストール完了です。

次のコマンドでバージョンを確認してみます。

$ trema --version
trema version 0.3.19
trema version 0.3.19と表示されました。
※このブログの公開時点では、最新バージョンは既に0.3.20でした

Rubyのバージョンが1.8ではない場合は、「OpenFlow環境準備の補足」を参考にRuby1.8を インストールして下さい。

OSがUbuntu12.04以外の場合は以下を参考にして下さい。

https://github.com/trema/trema/blob/develop/README.md


Tremaのインストールはこれだけですが、ここで登場するコマンドについて触れておきます。

sudo
別のユーザでコマンドを実行します。通常はスーパーユーザ(root)の権限でコマンドを
実行しなければならない時に使用します。
ここではapt-getをスーパーユーザ権限で実行しています。

apt-get
パッケージの取得&インストール/アップデートをするコマンドです。
ここでは"install"オプションが付いているので、その後に続くgcc make等をインストールしています。

gem
RubyGemsというパッケージ管理システムからgemパッケージのビルド、アップデート、
ダウンロード、インストールするのに使用します。
ここではTremaのインストールをしています。

次回からTremaを使ってみます。

2013年8月14日水曜日

OpenFlow環境準備の補足

こんにちは。鯵王です。

今回は以前の「OpenFlowを試そう(準備編)」の補足をしておきます。

■Rubyのバージョン

自分はUbuntu12.04をインストールしたので、もとからRubyは入っていませんしたが、
Ubuntu12.10をインストールした場合、デフォルトでRubyのバージョン1.9が入っています。

TremaがサポートするのはRuby1.8(1.8.7)なので、別途Ruby1.8をインストールしなければ
なりません。
以下のコマンドでRuby1.8 のインストールをします。

$ sudo apt-get install ruby1.8 rubygems1.8 ruby1.8-dev

またRuby1.8と1.9の両方インストールされている場合、標準で使用するRubyおよびgemの
バージョンを設定する必要があるようです。

詳しい事は以下のページに書いてありました。

http://ranosgrant.cocolog-nifty.com/blog/2013/01/open-a72e.html

ここではコマンドだけ載せておきます。
$ sudo update-alternatives --config ruby
$ sudo update-alternatives --config gem

■VirtualBoxのバージョン

すでに古いバージョンになりますが、VirtualBoxのバージョン4.2.12にゲストOS(Ubuntu12.04)
をインストールし、そこにGuestAddtionsをインストールしたところ、以下の様なメッセージが
表示され、ゲストOSを起動してもGUI画面にならなくなりました。

the system is running in low-graphics mode

こちらについても、詳しい事は以下のページに書いてありました。

https://forums.ubuntulinux.jp/viewtopic.php?pid=98026

そこにはGuestAdditionsをアンインストールする対処方法が載っていますが、自分は
VritualBoxを4.2.14にバージョンアップして、GuestAdditionsをインストールしたところ
GUIが表示されるようになりました。

参考までにGuestAdditionsのアンインストール方法を載せておきます。

$ sudo /opt/VBoxGuestAdditions-#.#.##/uninstall.sh
※ "#"にはバージョン番号を入れる

古いVirtualBoxを使用する場合は注意が必要です。


以上です。

2013年8月9日金曜日

SDNのライバル?!NFVって何者?


どもども。
やんだ@渋谷を歩くと緊張する です。

なんですかね、あのアウェイ感。
震える足で必死に歩きながら秋葉原に帰りたいと思うこの心境。

さて、今回はNFVについて、
簡単に触れようかと思います。
「NFV」(Network Function Virtualization)

直訳すると「ネットワーク機能の仮想化」となります。
こやつ、何者かというと、「通信事業者のネットワーク機器網の仮想化」
を目的としたアーキテクチャや、その標準化グループの事を指します。
「通信事業者」というくくりがキモですね。

高性能で高価な機器を大量に利用している通信事業者の方々。

機器の費用、規模、そして高い可用性が求められるのは
想像に難くないですよね。

そんな通信事業者の高級ネットワーク機器を全部仮想化して、
物理サーバにぶち込んでしまえ!という事ですね。

仮想化されたネットワーク機器を使用することにより、
設備コストや運用コスト、そしてリソースの自動追加などによる
耐障害性の向上も大きなメリットを生みます。

つまり、ネットワーク機器は実機では持たぬ!
全て仮想アプライアンスで動かすぜ!ということでしょう。

「未来のネットワーク機能はx86サーバで動作する」
by 某ネットワーク機器ベンダーのCEO様

このお言葉が、NFVの目指すところそのものなのでしょう。

冷静に考えてみればまぁ、仮想アプライアンスという存在が出現した以上、
壊れるし、高いし、実機なんていらないよね?という考え方に行きつきますよね。

ある意味、必然の流れといったところですか。
でもそうなったら、機器ベンダーさん達の商品売れなくなっちゃうよなぁ。

って、流れを踏まえての各ベンダーさんの動きなのかなぁ(OpenDaylight参加とか)
機器を売るんじゃねぇ、ソリューションを売るんだ!みたいな。

いやいや、ほんとに地殻変動ってやつが起きてるんですかね。

変動した結果、プレイヤーが変わるのか、はたまたそのままなのか。
コレは…、ネットワーク戦国時代の始まりなのか!?(言ってみたかっただけ)