OpenStack Folsom構築 on Wheezy (2) Open vSwitch

パッケージリポジトリなどの前準備が終わったので、次は準備運動に入ります。

仮想ネットワークを扱うために、EthernetをOpen vSwitch化します。



ネットワーク構成

Ethernetのクチは一本でも複数でもOpenStackを構築できますし、実際の開発環境用(予定)でも1本にする可能性はありますが、知見を積むために複数Ethernetを利用して構成します。

ネットワークの大まかな分類としては、
  • 管理用ネットワーク(親OSへの接続)
  • VM専用ネットワーク(fixed ip)
  • 外部接続用ネットワーク(floating ip)

  • と3つあり、1つのEthernetで構築するもよし、プロジェクト(テナント)ごとにEthernetを分けるもよし、じゃなくてリンクアグリゲーションするもよし。このネットワーク構成がOpenStackにおいて最も個々に異なる部分になると思われますが、今回はこんな感じでテストしました。
  • 管理用 # eth0 : 192.168.140.0/22
  • VM用 # eth1 : 172.31.0.0/24, 172.31.1.0/24, …
  • 外部用 # eth0 : 192.168.141.208/29, 192.168.141.216/29, …

  • とあるサイトの説明では、floating ip は外部からVMへ接続するための、とありますが、私がここまで調べた限りですと、
  • 外部サーバにおいてVMネットワークのG/WをControllerNodeに設定し、かつControllerNodeでVMネットワークのG/Wをfloating ipのG/Wに設定することで外部から直接fixed ipへ接続可能
  • floating ipをVMに割り当てても経路的には必ずControllerNodeを通る

  • といった点から、floating ipはVMにおける第2のアドレスというよりは、VMと外部の通信を開放するための手段、と捉えています。この辺については後々また触れていくかもしれません。


    FORWARDを有効にする

    仮想環境はいっぱいFORWARDするので ip_forward は親OSで必須の設定です。

    /etc/sysctl.d/local.conf

    反映しておきます。


    Open vSwitchのインストール

    Open vSwitch カーネルモジュール

    Open vSwitchが必要とするカーネルモジュールを入れないで次のステップへ進むと、このようなエラーが発生します。
  • [FAIL] Inserting openvswitch module … failed!
  • Installing Open vSwitch on Debian Sid/Wheezy

  • なので先にモジュールをビルドします。

    Open vSwitchパッケージ

    モジュールが無事入ったら、Open vSwitchパッケージを入れます。


    仮想ブリッジ作成

    仮想ブリッジを作成し、それぞれ物理Ethernetのポートを追加します。

    floating ip用です。

    fixed ip用です。

    確認します。


    ネットワークインターフェースの設定

    元々 eht0 にPrivateAddress、eth1 は無設定だったものをこのように変更します。

    /etc/network/interfaces

    br-exのネットワークに管理用とfloating ip用を混在させたためこのようになりましたが、さらに分けたり、1Ethernetでやる場合はまた変わると思いますので、1例程度に見ておいてください。

    eth0, eth1 のこの書き方は、StaticAddressを割り当てずにインターフェースだけ有効にしておくテクニックです。LVSなどでVirtualAddress(VIP)を扱う時に、無駄なStaticAddressを消費しないためにも使ったりします。

    編集したらネットワークを再起動します。管理用アドレスがまた有効になるまでに数十秒かかります。1発で成功しない可能性のほうが高いので、リモートコンソールを用意しておくのが無難です。

    繋がったら適当に確認します。


    再起動対策

    ここでいったん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

    OpenStack関連のパッケージも入れていくと、networkingが無効な状態では起動しないものもあり、本当はこの rc.local はもっと長いのですが、この投稿には関係ないため後で全体を再掲することにします。


    Open vSwitchについては以上ですが、この辺は

  • 物理Ethernet
  • Open vSwitch
  • Quantum(router,net,subnet,gateway)
  • Keystone(tenant)

  • と関連してくるので、適当に流さず単体でちゃんと理解しておくべきです。
    とか言って、私はネットワークの苦手意識が強いのでだいぶ血反吐を吐いて頑張ったわりに、たいして自信があるわけでもありません!