オープンソースのSDN「OpenDaylight」を実際に使ってみる

1.前置き

こんにちは。TDCソフトでプログラマーとして日々奮闘している「うま」と申します。
タイトルで少し触れていますが、当記事ではプログラマー視点からネットワーク分野で話題となっているSDN(Software-Defined Networking)について触れます。
「プログラマーがネットワーク」というと、分野が違う、敷居が高い、などと感じる方もいらっしゃるかもしれません。でも、SDNではプログラマブル(programmable)という言葉がしばしば使われるように、プログラマーが活躍できる可能性が充分にあると感じています。

そこで、ネットワークのスペシャリストではない私が、あえて、SDNを通してネットワーク分野へ踏み込み、その奮闘記を残していこうと思います。

SDNでは、SDN対応スイッチとSDNコントローラーが必要です。当記事ではSDNコントローラーについて触れていきます。SDNコントローラーといえば多くの製品やオープンソースソフトウェアが世に出ております。その中から、誰でも入手でき、実際に動作させる環境を作れるオープンソースソフトウェアを選択します。中でも注目度が高いOpenDayLight(以下、ODLと略す)を選択します。

2.実施すること

  1.  ODLをCentOS 7にインストール。
  2.  mininetをubuntuにインストール

3.使用環境について

  •  CentOS + OpenDaylight Berrylium-SR3
  •  Ubuntsu + mininet

CentOSとUbuntsuを使用して、ODLとmininetをインストールします。ODLからmininetに対してOpenflowプロトコルを使い、ネットワークフローの書き換えを行います。ODLの操作は全てRESTインターフェースを使用します。

odl1

4.構築してみよう

4.1. ODLをCentOS 7にインストール

[CentOS]
ODLを構築するにはJAVA環境が必要となります。今回はOpenJDKを使用します。バージョンは1.7です。

1)yumを使ってJAVAパッケージを確認+インストールします。

yum list \*java-1\* | grep open
yum install java-1.7.0-openjdk.x86_64
yum install java-1.7.0-openjdk-devel.x86_64

1.1JAVAの環境変数を設定します。

vi ~/.bash_profile

1.2ファイル末尾に以下を追記

export JAVA_OPTS="-Xmx4096m -XX:MaxPermSize=1024m"
export JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.111-2.6.7.2.el7_2.x86_64/jre"
export PATH=$PATH:$JAVA_HOME/bin

1.3インストール確認

java -version

2)ODLリリースファイルを以下のURLからwgetでダウンロードします。

wget https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/0.4.3-Beryllium-SR3/distribution-karaf-0.4.3-Beryllium-SR3.zip

3)ダウンロードしたファイルを展開します。

unzip distribution-karaf-0.4.3-Beryllium-SR3.zip

4)ODLをバックグラウンドで起動します。

cd distribution-karaf-0.4.3-Beryllium-SR3 ; ./bin/start

5)バックグラウンドで起動したODLにコンソールログインします。

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no karaf@localhost -p 8101

OpenDaylightのロゴが表示されます。(この記事だとロゴがぐちゃぐちゃですが。。。)

Warning: Permanently added '[localhost]:8101' (DSA) to the list of known hosts.
Password authentication
Password:

________ ________ .__ .__ .__ __
 \_____ \ ______ ____ ____ \______ \ _____ ___.__.| | |__| ____ | |___/ |_
 / | \\____ \_/ __ \ / \ | | \\__ \< | || | | |/ ___\| | \ __\
 / | \ |_> > ___/| | \| ` \/ __ \\___ || |_| / /_/ > Y \ |
 \_______ / __/ \___ >___| /_______ (____ / ____||____/__\___ /|___| /__|
 \/|__| \/ \/ \/ \/\/ /_____/ \/


Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown OpenDaylight.

opendaylight-user@root>

6)VTNコンポーネントをインストールします。

ODLはbundle方式を採用しており、使用するコンポーネントは都度インストールをすることになります。今回はネットワークフローの書き換えをREST-API経由で簡単に行ってくれるVTNコンポーネントを使用します。

opendaylight-user@root gt;feature:install odl-vtn-manager odl-vtn-manager-rest odl-vtn-manager-neutron odl-dlux-all

7)インストール結果の確認をします。

opendaylight-user@root>feature:list | grep vtn
odl-nic-renderer-vtn | 1.1.3-Beryllium-SR3 | | odl-nic-1.1.3-Beryllium-SR3 | OpenDaylight :: Network Intent Composition :: VTN
odl-vtn-manager | 0.4.3-Beryllium-SR3 | x | vtn-manager-0.4.3-Beryllium-SR3 | OpenDaylight :: VTN Manager :: Java API
odl-vtn-manager-rest | 0.4.3-Beryllium-SR3 | x | vtn-manager-0.4.3-Beryllium-SR3 | OpenDaylight :: VTN Manager :: REST API
odl-vtn-manager-neutron | 0.4.3-Beryllium-SR3 | x | vtn-manager-0.4.3-Beryllium-SR3 | OpenDaylight :: VTN Manager :: Neutron Interface

opendaylight-user@root>feature:list | grep dlux
odl-snbi-dlux | 1.2.3-Beryllium-SR3 | | odl-snbi-1.2.3-Beryllium-SR3 | OpenDaylight :: SNBI :: Dlux
odl-dlux-all | 0.3.3-Beryllium-SR3 | x | odl-dlux-0.3.3-Beryllium-SR3 | Opendaylight dlux all features
odl-dlux-core | 0.3.3-Beryllium-SR3 | x | odl-dlux-0.3.3-Beryllium-SR3 | Opendaylight dlux minimal feature
odl-dlux-node | 0.3.3-Beryllium-SR3 | x | odl-dlux-0.3.3-Beryllium-SR3 | Enable nodes in Opendaylight dlux
odl-dlux-yangui | 0.3.3-Beryllium-SR3 | x | odl-dlux-0.3.3-Beryllium-SR3 | Enable Yang UI in Opendaylight dlux
odl-dlux-yangvisualizer | 0.3.3-Beryllium-SR3 | x | odl-dlux-0.3.3-Beryllium-SR3 | Enable Yang visualizer in Opendaylight dlux

8)WEBブラウザでアクセスしてみます。

「http://10.210.70.1/index.html」にアクセスし、topページが表示されたらOKです。

odl2

4.2. mininetをUbuntuにインストール

mininetは、仮想ホスト、スイッチ、コントローラ、およびリンクのネットワークを作成するネットワークエミュレータです。研究、開発、学習、プロトタイピング、テスト、デバッグ、およびラップトップや他のPC上で完全な実験ネットワークを構築できます。
mininet本体は以下のサイトから入手可能です。

http://mininet.org

インストール方法は大きく分けて2種類あります。

  • 構築済みのVMテンプレートを使用
  • githubからソースコードを入手、インストール

今回は、githubからソースコードを入手し、インストールする手順を紹介します。バージョンは2.2.1を使用します。

apt-get -y install git
git clone git://github.com/mininet/mininet
cd mininet
git checkout -b 2.2.1 2.2.1

mininetのパッケージにはSDNコントローラであるNOXも備えられています。今回は、SDNコントローラはODLを使用しますのでNOXのパッケージはインストールしません。

./util/install.sh -nfv
$ mn --version

以上で環境構築は終わりです。

ここまで読んで頂きありがとうございました。これまでに紹介した手順は簡易なもので、もっと詳しく紹介されているサイトもあります。
ネットワークスペシャリストの方にとっては陳腐な内容になってしまったかもしれませんが、次回はmininetとODLを接続し、ネットワークの可視化に挑戦します。
その後、プログラマーちっくにネットワークをプログラムでコントロールすることに挑戦します。

うま について

新しいことが大好き。考えるよりまずはやってみろ精神の持ち主。