パッケージリポジトリなどの前準備が終わったので、次は準備運動に入ります。
仮想ネットワークを扱うために、EthernetをOpen vSwitch化します。
ネットワーク構成
Ethernetのクチは一本でも複数でもOpenStackを構築できますし、実際の開発環境用(予定)でも1本にする可能性はありますが、知見を積むために複数Ethernetを利用して構成します。ネットワークの大まかな分類としては、
と3つあり、1つのEthernetで構築するもよし、プロジェクト(テナント)ごとにEthernetを分けるもよし、じゃなくてリンクアグリゲーションするもよし。このネットワーク構成がOpenStackにおいて最も個々に異なる部分になると思われますが、今回はこんな感じでテストしました。
とあるサイトの説明では、floating ip は外部からVMへ接続するための、とありますが、私がここまで調べた限りですと、
といった点から、floating ipはVMにおける第2のアドレスというよりは、VMと外部の通信を開放するための手段、と捉えています。この辺については後々また触れていくかもしれません。
FORWARDを有効にする
仮想環境はいっぱいFORWARDするので ip_forward は親OSで必須の設定です。/etc/sysctl.d/local.conf
1 |
net.ipv4.ip_forward = 1 |
反映しておきます。
1 |
/etc/init.d/procps restart |
Open vSwitchのインストール
Open vSwitch カーネルモジュール
Open vSwitchが必要とするカーネルモジュールを入れないで次のステップへ進むと、このようなエラーが発生します。なので先にモジュールをビルドします。
1 2 3 4 |
apt-get install linux-headers-amd64 openvswitch-datapath-source module-assistant auto-install openvswitch-datapath # 確認 ls -l /lib/modules/3.2.0-4-amd64/kernel/openvswitch_mod.ko |
Open vSwitchパッケージ
モジュールが無事入ったら、Open vSwitchパッケージを入れます。
1 |
apt-get install openvswitch-switch |
仮想ブリッジ作成
仮想ブリッジを作成し、それぞれ物理Ethernetのポートを追加します。floating ip用です。
1 2 |
ovs-vsctl add-br br-ex ovs-vsctl add-port br-ex eth0 |
fixed ip用です。
1 2 |
ovs-vsctl add-br br-int ovs-vsctl add-port br-int eth1 |
確認します。
1 |
ovs-vsctl show |
ネットワークインターフェースの設定
元々 eht0 にPrivateAddress、eth1 は無設定だったものをこのように変更します。/etc/network/interfaces
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# Open vSwitch bridge for floating ip and admin network auto br-ex iface br-ex inet static address 192.168.140.3 netmask 255.255.252.0 network 192.168.140.0 broadcast 192.168.143.255 gateway 192.168.143.254 # The primary network interface for cloud public auto eth0 iface eth0 inet manual up ifconfig $IFACE 0.0.0.0 up up ip link set $IFACE promisc on down ip link set $IFACE promisc off down ifconfig $IFACE down # The secondary network interface for cloud private auto eth1 iface eth1 inet manual up ifconfig $IFACE 0.0.0.0 up up ip link set $IFACE promisc on down ip link set $IFACE promisc off down ifconfig $IFACE down |
br-exのネットワークに管理用とfloating ip用を混在させたためこのようになりましたが、さらに分けたり、1Ethernetでやる場合はまた変わると思いますので、1例程度に見ておいてください。
eth0, eth1 のこの書き方は、StaticAddressを割り当てずにインターフェースだけ有効にしておくテクニックです。LVSなどでVirtualAddress(VIP)を扱う時に、無駄なStaticAddressを消費しないためにも使ったりします。
編集したらネットワークを再起動します。管理用アドレスがまた有効になるまでに数十秒かかります。1発で成功しない可能性のほうが高いので、リモートコンソールを用意しておくのが無難です。
1 |
/etc/init.d/networking restart |
繋がったら適当に確認します。
1 2 3 4 |
ifconfig ip addr show route -n ping -c1 google.co.jp |
再起動対策
ここでいったんrebootして、ネットワークが正常に立ち上がるか確認しておきます。問題ないならここはスルーしてOKですが、私の場合は正常にネットワークが起動しなかったので色々試すハメになりました。解決策としては、/etc/init.d/opwnvswitch-switch restart または /etc/init.d/networking restart をすることでbr-exのIP Addressが有効になりました。
これは update-rc.d の起動順序が原因と思われますが、手動で優先順位を変えたり、initスクリプトの Required-Start をいじることでは簡単に修復できない & 後のパッケージ管理で忘れそう だったので今は原始的な対策を仕込んでいます。
/etc/rc.local
1 2 3 4 5 6 7 8 |
ping -c 1 google.co.jp > /dev/null 2>&1 if [ $? != 0 ]; then /etc/init.d/openvswitch-switch restart sleep 5 /etc/init.d/networking restart sleep 5 fi |
OpenStack関連のパッケージも入れていくと、networkingが無効な状態では起動しないものもあり、本当はこの rc.local はもっと長いのですが、この投稿には関係ないため後で全体を再掲することにします。
Open vSwitchについては以上ですが、この辺は
と関連してくるので、適当に流さず単体でちゃんと理解しておくべきです。
とか言って、私はネットワークの苦手意識が強いのでだいぶ血反吐を吐いて頑張ったわりに、たいして自信があるわけでもありません!