opendaylightをインストールしてFlowを操作してみる
こんにちわ。
書き溜めていたネタがあったので、先ほどZabbixとMySQLのエントリーを書いたばかりですが続けて書きます。
29 sep 2014 付けでopendaylight heliumがリリースされました。先日はopendaylightベースのBrocade vyatta controllerも発表され少しは盛り上がるのかもしれません。
個人的にはコントローラーもいいのですが・・・という感じなので、ビジネスに使わないで欲しいのが本音ではありますが、仕方ないといえば仕方ないですね。opendaylightは以前にhydrogenで使ってみたことがありますので、記憶を呼び起こすためにブログにまとめておきます。
環境
- MAC OSX 10.9 virtualbox
- MAC book air late 2010
- ubuntsu 13.04(1CPU/2048MB)
初期セットアップ
- mininetインストール・起動
- opendaylightインストール
- 動作確認
- flow操作
virtual box上のubuntsuで簡単に試せますし、セットアップして疎通確認をするまでならすぐできます。今回は導入編としてそこまで実施してみます。
mininetインストール
opendaylight(以下、odl)の管理対象として仮想のNWでバイスをmininetで作成します。mininetはコントローラとしてNOX、スイッチとしてopenvswitchを同梱しています。今回はコントローラとしてodlを使用するため、複数のopenvswitchをエミュレートする役目としてmininetを使用します。
インストールはこちらから。 http://mininet.org/download/
gitでcloneをするか、virtual boxのイメージをそのまま使用してください。
今回、イメージを使用しました。コンソールからmininetユーザで以下の通り起動できます。出力を見るとわかりますが、openflow1.3ベースのスイッチが3台、そこに接続されたホストが4台稼働しています。
mininet@mininet-vm:~¥> integration/vm/scripts/start_mininet_of13.sh *** Creating network *** Adding controller *** Adding hosts: h1 h2 h3 h4 *** Adding switches: have protcol params! s1 have protcol params! s2 have protcol params! s3 *** Adding links: (h1, s2) (h2, s2) (h3, s3) (h4, s3) (s1, s2) (s1, s3) *** Configuring hosts h1 h2 h3 h4 *** Starting controller *** Starting 3 switches s1 OVSswitch opts: protocols=OpenFlow13 s2 OVSswitch opts: protocols=OpenFlow13 s3 OVSswitch opts: protocols=OpenFlow13 *** Starting CLI:
この状態ですとコントローラーは同梱されているNOXです。次はodlをインストールして起動したいと思います。
opendaylightインストール
インストールは簡単です。エディションはvirtualizationを使用してみました。Base Editionと比較して以下の機能が追加されています。
- Affinity Metadata Service
- Defense4All
- Open DOVE
- Virtual Tenant Network
Affinity Metadata ServiceはSDNでいうnorthboundのアプリケーションからodlを操作する機能を担います。APIです。
DOVEはオーバーレイ機能で、VXLANのフォーマットに則っています。Virtual Tenant Networkは読んでその通りです。どんな形で実装されているのでしょうか。
Service ProviderエディションではBGPやLISPの機能が実装されているようです。
最新のダウンロード情報は以下を参照してください。 http://www.opendaylight.org/software/downloads
# cd opendaylight/ # curl -o odl.zip https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distributions-virtualization/0.1.1/distributions-virtualization-0.1.1-osgipackage.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 79 60.9M 79 48.1M 0 0 3864k 0 0:00:16 0:00:12 0:00:04 5416k # unzip odl.zip Archive: odl.zip creating: opendaylight/ creating: opendaylight/configuration/ creating: opendaylight/configuration/initial/ creating: opendaylight/configuration/startup/
javaが入っていないと起動時にエラーがでますのでインストールしてください。
# yum install java-1.7.0-openjdk # java -version java version "1.7.0_55" OpenJDK Runtime Environment (rhel-2.4.7.1.el6_5-x86_64 u55-b13) OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
それでは起動してみましょう。デフォルトでGUIは8080番ポートを使用します。
# ./run.sh -virt ovsdb -Xmx1024m
java.lang.OutOfMemoryError:が出る場合は仮想マシンのメモリの確保と-Xmx1024mの部分を操作してメモリを調整してください。
起動すると以下の画面が表示されます。admin/adminでログインしてください。
動作確認
先ほどインストールしたmininetをコントローラ指定で起動します。ポート番号は6633です。mnコマンドで起動して、その後にPingを使用して確認しています。
mininet@mininet-vm:~¥> sudo mn --controller remote,ip=127.0.0.1,port=6633 *** Creating network *** Adding controller *** Adding hosts: h1 h2 *** Adding switches: s1 *** Adding links: (h1, s1) (h2, s1) *** Configuring hosts h1 h2 *** Starting controller *** Starting 1 switches s1 OVSswitch opts: *** Starting CLI: mininet> pingall *** Ping: testing ping reachability h1 -> h2 h2 -> h1 *** Results: 0% dropped (2/2 received)
ログインして見てみましょう。
スイッチが1台のみの環境なので上記の通りです。これを3階層のトポロジーに変更してみます。
mininet@mininet-vm:~¥> sudo mn --topo=tree,3 --mac --switch=ovsk --controller remote,ip=127.0.0.1,port=6633 *** Creating network *** Adding controller *** Adding hosts: h1 h2 h3 h4 h5 h6 h7 h8 *** Adding switches: s1 s2 s3 s4 s5 s6 s7 *** Adding links: (h1, s3) (h2, s3) (h3, s4) (h4, s4) (h5, s6) (h6, s6) (h7, s7) (h8, s7) (s1, s2) (s1, s5) (s2, s3) (s2, s4) (s5, s6) (s5, s7) *** Configuring hosts h1 h2 h3 h4 h5 h6 h7 h8 *** Starting controller *** Starting 7 switches s1 OVSswitch opts: s2 OVSswitch opts: s3 OVSswitch opts: s4 OVSswitch opts: s5 OVSswitch opts: s6 OVSswitch opts: s7 OVSswitch opts: *** Starting CLI: h1 h1-eth0:s3-eth1 h2 h2-eth0:s3-eth2 h3 h3-eth0:s4-eth1 h4 h4-eth0:s4-eth2 h5 h5-eth0:s6-eth1 h6 h6-eth0:s6-eth2 h7 h7-eth0:s7-eth1 h8 h8-eth0:s7-eth2 s1 lo: s1-eth1:s2-eth3 s1-eth2:s5-eth3 s2 lo: s2-eth1:s3-eth3 s2-eth2:s4-eth3 s2-eth3:s1-eth1 s3 lo: s3-eth1:h1-eth0 s3-eth2:h2-eth0 s3-eth3:s2-eth1 s4 lo: s4-eth1:h3-eth0 s4-eth2:h4-eth0 s4-eth3:s2-eth2 s5 lo: s5-eth1:s6-eth3 s5-eth2:s7-eth3 s5-eth3:s1-eth2 s6 lo: s6-eth1:h5-eth0 s6-eth2:h6-eth0 s6-eth3:s5-eth1 s7 lo: s7-eth1:h7-eth0 s7-eth2:h8-eth0 s7-eth3:s5-eth2 c0
以下の通りodl上でも認識しています。LLDPやARP headerから情報を取得しています。
試しにPingを打ってみましたが疎通も問題なさそうです。
mininet> h1 ping h3 PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data. 64 bytes from 10.0.0.3: icmp_req=1 ttl=64 time=8.85 ms 64 bytes from 10.0.0.3: icmp_req=2 ttl=64 time=0.126 ms ^C --- 10.0.0.3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.126/4.488/8.851/4.363 ms
flow操作
odlでflowを操作してみます。GUIのFlowタブを選択し、Add Flow Entryをクリックしてください。
上の画像ようにNodeやInput portを元にFlowの操作が可能です。画面をスクロールするとSrcPortやDstPort、Protcol、TOS bitなどL3以上の情報が設定できます。Actionも最下層にあり、DropやFlood、Set VLAN IDなど多くのをActionを選択できます。
今回はinput portとNodeをh3の情報に指定してActionをDropにします。先ほどのpingがどう変化するか確認します。
mininet> h1 ping h3 ^CPING 10.0.0.3 (10.0.0.3) 56(84) bytes of data. --- 10.0.0.3 ping statistics --- 6 packets transmitted, 0 received, 100% packet loss, time 4999ms
今回、openflowスイッチをodlを通じて操作してみました。根本的に従来のネットワークとは違う造りになるので、このままではすぐ実用とは行きませんが、netconfでも操作可能ということで現行のネットワークをどう扱うことになるのかは気になります。それより先にオーバーレイですかね。
また、何か検証したら続編を書きたいと思います。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
- 作者: 馬場達也,大上貴充,関山宜孝,?畑知也
- 出版社/メーカー: 翔泳社
- 発売日: 2013/09/13
- メディア: 大型本
- この商品を含むブログ (3件) を見る
- 作者: あきみち,宮永直樹,岩田淳
- 出版社/メーカー: オーム社
- 発売日: 2013/07/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る