物理ノード1台+IPアドレス1個でCloudStack

本記事はCloudStack Advent Calendar 2014のために書いたものです.「CloudStackをサスペンドしてみる」という内容で書く予定でしたが,そちらの内容はろまのふさん(@kamiya344)にお願いすることになりました.本記事では1台構成のCloudStackをIPアドレス1個で実現する方法について紹介します.

概要

サーバ1台でCloudStackを構築します.通常,CloudStackでクラウドを構築する際は,(1)クラウド管理サーバ,(2)VMを動作させるコンピューティングホスト,(3)VMのHDDを格納するNFSサーバの3つが必要になります.しかし,(1)〜(3)を1台に集約することで,物理サーバ1台でCloudStackを構築することもできます.

CloudStackを使って物理サーバ1台構成のクラウドを構築する方法(http://bit.ly/AutoInstallCloudStack)が既にあります.しかし,この方法では(作成するVM数にもよりますが)IPアドレスが10-30個程度必要になります.既存のネットワークで利用できるIPアドレスが少ない場合や,利用申請が必要など手続きが煩雑な環境において,IPアドレス1個でCloudStackを構成する方法を考えてみました.この記事では,基本ネットワーク構成のCloudStackを構築する方法を紹介します.

ネットワーク構成の概要

通常,1台構成のCloudStackのネットワーク(基本ネットワーク構成)は下図のようになっています.物理サーバで稼働しているVMNIC(vnet0, vnet1, …)は,cloudbr0という名前のブリッジに追加されています.eth0は外部ネットワークと接続されていて,各VMには外部ネットワークと同じネットワークセグメントのIPアドレスが割り当てられます.その結果,外部ネットワークのIPアドレスVMで使用するだけ必要になるので,十分な数のIPアドレスが用意できない場合,クラウドを構築できません.

外部ネットワークのIPアドレスが1個しか利用できない場合,物理サーバ内部でVM用のネットワークを用意することで,クラウドを構成できます.先ほどと同じようにcloudbr0にVMNICが追加されますが,このブリッジにはeth0を追加しません.eth0とcloudbr0を別系統で用意してNATすることで,VMと外部のネットワークを分離します.

1台構成クラウドの構築手順

ここからは,上で示した構成のクラウドの構築手順を説明します.ネットワークの設定方法を変更するだけなので,CloudStack自体のインストール方法は公式のインストール手順とほぼ同じです.なお,ネットワーク情報は以下の内容で設定します.

外部ネットワークのCIDR 192.168.0.0/24
VMIPアドレスのCIDR 10.100.0.0/24
物理サーバのIPアドレス(eth0) 192.168.0.101
物理サーバのIPアドレス(cloudbr0) 10.100.0.1

今回対象とする物理サーバのスペックは以下のとおりです.

CPU Intel Core i7-3770
RAM 32GB
HDD 2TB
NIC 1GbE x 1
CentOSのインストール

構築対象とするサーバは,CentOS 6.5 のディスクでminimal構成でインストールしました.インストール後,外部からSSHできるようにネットワーク設定を済ませておきます.なお,OSインストール後にパッケージの更新を行ったため,CentOS 6.6になっています.

ネットワークの設定

この記事で最も重要となるネットワークの設定を行います.

bridge-utilsのインストール

yum install bridge-utils tunctl -y

NICの設定
/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="static"
UUID=“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
HWADDR=“XX:XX:XX:XX:XX:XX"
IPADDR="192.168.0.101"
NETMASK="255.255.255.0"
BROADCAST="192.168.0.255"
GATEWAY="192.168.0.1"
DNS1="192.168.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"

/etc/sysconfig/network-scripts/ifcfg-cloudbr0

DEVICE="cloudbr0"
BOOTPROTO="static"
BROADCAST="10.100.0.255"
IPADDR="10.100.0.1"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
NETMASK="255.255.255.0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Bridge"

ネットワークを再起動して適用

service network restart

NATとFORWARDの設定を行います.

iptables -I FORWARD -o eth0 -j ACCEPT
iptables -I FORWARD -o cloudbr0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -d 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 10.100.0.0/24 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables

CloudStackでは,VMが起動するタイミングでNIC間の転送がOFFになってしまうため,/proc/sys/net/ipv4/ip_forwardに1を書き続けるように設定します./etc/rc.localに以下を追記してくことで,1秒毎にNIC間転送をONにするようにします.

while true; do echo 1 > /proc/sys/net/ipv4/ip_forward; sleep 1; done &

CloudStackのインストール

既存の1台構成CloudStackのインストールスクリプトhttp://bit.ly/AutoInstallCloudStack)と公式マニュアルを参考に,CloudStackのインストールを行います.インストール対象ホストが1台に集約されるだけで,手順および設定内容は通常と変わりません.

SystemVM,仮想ルータ,CentOSテンプレートのダウンロード,テンプレート/ISOイメージからのインスタンスの作成,各VMからのネットワーク接続について確認済みです.1台構成のためライブマイグレーションはできませんが,CloudStackの基本的な機能は問題なく使用できると思います.

まとめ

  • 1台構成のCloudStackでは,通常多数のIPアドレスが必要になります
  • ネットワークの構成を工夫することで,IPアドレス1個でクラウドを構築できるようになります