連載
» 2015年02月04日 19時00分 公開

いま覚えておくべきOpenStack Neutronの基本(2):OpenStack Neutronの「中」の動きを追いかけよう (1/8)

OpenStack Neutronはどのようにしてネットワークを構築しているのでしょうか? 今回は、順を追ってその挙動を確かめていきます。

[SDNエバンジェリスト吉本昌平,ユニアデックス株式会社]

連載バックナンバー

 こんにちは。ユニアデックス株式会社でSDNエバンジェリストを担当している吉本です。

 連載第1回では、Neutronが作るネットワークの動作を解説しました。今回は、そのネットワークはどう作られるのか――つまりNeutronの内部がどのように動作しているのかを見ていきます。今回は詳細に挙動を探るために「Atlasくん」と「Maiaちゃん」に一つずつ読み解いてもらいます*。具体的にはNeutron内部で実行している処理を、一つずつ、コマンドライン操作で追いかけていくことにします。題材とする環境は、本文中でも出現する、連載第1回で紹介したネットワーク構成を構築するまでの流れです。

 まずは、Network Namespaceの仕組みを確認し、Network Namespace同士の接続、外部ネットワークとの接続を試します。Neutron側の実装もソースコードで確認していきましょう。

 

*本記事は日本仮想化技術主催のOpenStack最新情報セミナー(2014年10月開催)で実施した実機デモを基にしており、前提環境は基本的にOpenStack Icehouseリリースです。今回新たに最新のJunoリリースで変更された部分を記事後半にまとめていますので参考にしてください。



Network Namespaceの中はどうなっている?

ねぇ、Maiaちゃん、この間の「Neutronとは?」って記事、面白かったね


あぁそれ、あたしも読んだ。でもNetwork Namespaceってやつがよく分からなかったなー。「独立したネットワーク」ってどういうことなの?


「Namespace」の中へ

簡単、簡単。使ってみればすぐ分かるるよ! 僕のサーバーにログインしてネットワーク見てみるよ


root@ub1:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:00:2e:9c:00:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.24/24 brd 192.168.100.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::2eff:fe9c:1/64 scope link
       valid_lft forever preferred_lft forever

普通だね。loeth0がある


うん。このままでは、普通の環境だね。早速、第一回の連載で紹介したNetwork Namespaceを作ってみよう


root@ub1:~# ip netns add qrouter
root@ub1:~# 

ほら、できた


何よ、何も起こらないじゃない


作っただけだからね。中に移動するよ


root@ub1:~# ip netns exec qrouter bash
root@ub1:~#

だから、何も起こらないじゃない


まぁまぁ……


root@ub1:~# ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
root@ub1:~# 

あ、eth0がなくなった! どうなってるの?


eth0だけがなくなったわけじゃないよ。loDOWNだし、IPアドレスも付いてないよね?


ホントだー。っていうか、もうできたの? 何かインストールとか、何もしてないじゃない? 中に入るにはログインとか?


インストールもログインも必要ないね


うーん、ますます分かんない。「オーバーヘッドなしに仮想マシンのような効果を」って書いてあったから、コンテナみたいなものかなって思ってたんだけど……?


コンテナって思うと、だいぶぶイメージ違うかもね。そもそも、ファイルシステムは共通だからインストールは必要ないんだよ


ファイルシステムは共通?


そう。もう一回やってみるよ


root@ub1:/tmp# cd /tmp                                       ← /tmpに移動
root@ub1:/tmp# ls
root@ub1:/tmp# touch afo                                     ← afoというファイルを作る
root@ub1:/tmp# ls -l
total 0
-rw-r--r-- 1 root root 0 11月 13 17:07 afo                 ← 今作ったafoが見えている
root@ub1:/tmp# ip netns exec qrouter bash                  ← qrouterの中に移動
root@ub1:/tmp# ls -l
total 0
-rw-r--r-- 1 root root 0 11月 13 17:07 afo                 ← ファイルは見えている

ほらね。ファイルを作ってからNetwork namespaceの中に移動しても、ファイルが見えているでしょ?


おぉぉ!!


ちなみにプロセス番号も共通だよ*1


root@ub2:~# echo $$                              ← 親シェルのpidは1957
1957
root@ub2:~# ip netns exec qrouter bash         ← qrouterの中でbashが子プロセスとして実行される
root@ub2:~# echo $$                              ← 子シェルのpidは1989
1989
root@ub2:~# ps -ef | egrep '1957|1989' | grep -v grep
root      1957  1956  0 15:12 pts/1    00:00:00 /bin/bash    ← pidの管理は共通
root      1989  1957  0 15:14 pts/1    00:00:00 bash
root      2003  1989  0 15:15 pts/1    00:00:00 ps -ef

*1 プロセス番号が共通 Linux Namespaceは、各種のリソースを分割する機能であり、対象となるリソースにはネットワークの他にプロセス番号、マウント、IPCなどがあります(http://man7.org/linux/man-pages/man7/namespaces.7.html)。



親と子は共通のプロセス番号で管理されていて、ファイルも同じものが見えているんだね。「ネットワークだけ独立」っていう意味がちょっと分かったような気がするけれど、どうやって使うのかイメージ湧かないなぁ……。


       1|2|3|4|5|6|7|8 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。