Eucalyptus ネットワークの構成 (1.5.2)

はじめに

バージョン 1.5 以降の Eucalyptus に含まれている VM ネットワーク・サブシステムは細かな構成の指定が可能で、さまざまなネットワーク環境に対応できます。具体的には 4 つのハイレベルなネットワーク「モード」が用意されており、各モードには固有の構成パラメータ、機能、利点があり、その一方で、場合によってはローカルネットワークの設定に制限が生じることもあります。管理者はあらかじめ、Eucalyptus コンポーネントを実行する各マシンで設定ファイル 'eucalyptus.conf' を修正し、フロントエンドとノードで Eucalyptus を起動する前にこれら 4 つのモードのうち 1 つを選択しておかなければなりません。以下に示すのは、各モードの簡単な説明です。

SYSTEM モード - 最も単純なモードですが、ネットワーク機能も最も制限されます。SYSTEM モードでは、Eucalyptus は、起動前に VM インスタンスにランダムな MAC アドレスを割り当てるだけで、ノードのローカル Xen ブリッジを介して、VM インスタンスのイーサネットデバイスを物理イーサネットに接続します。通常、VM インスタンスは、VM ではないマシンが DHCP を使ってアドレスを取得するのとまったく同様に、DHCP を使って IP アドレスを取得します。SYSTEM モードでは、Eucalyptus の管理者 (または Eucalyptus のコンポーネントが接続されているネットワークの管理者) が DHCP サーバーをセットアップし、IP アドレスの動的プールの中から、起動した VM に IP アドレスを割り当てることができるようにする必要がある点に注意してください。別の言い方をすれば、ふだん使用しているノートコンピュータ、デスクトップコンピュータ、またはサーバーが、Eucalyptus ノードと同じネットワーク上で、DHCP を使って IP アドレスを取得している場合は、VM も同様にして IP アドレスを取得することができるはずです。SYSTEM モードは、自分のノートコンピュータやデスクトップコンピュータで Eucalyptus を試しに使ってみたい場合に最適なモードです。

STATIC モード - STATIC モードでは、VM への IP アドレス割り当てに関して Eucalyptus の管理者がコントロールできる部分が増えます。STATIC モードでは、管理者は MAC アドレスと IP アドレスのペアからなる「マップ」を使って Eucalyptus を構成します。Eucalyptus は、VM のインスタンスが起動すると、Eucalyptus が管理する DHCP サーバー内にスタティックなエントリを作成し、空いている次の MAC アドレスと IP アドレスのペアを取り出し、このペアを VM に割り当て、(SYSTEM モードの場合と同様に) VM のイーサネットデバイスをノードの Xen ブリッジを介して物理イーサネットに接続します。STATIC モードは、管理者が MAC アドレスと IP アドレスのプールを用意して、これを常に VM に割り当てたい場合に適したモードです。

- SYSTEM モードまたは STATIC モードで実行する Eucalyptus では、VM のコレクション (Amazon EC2 のセキュリティ・グループに相当) 間でのイングレスルールの定義をはじめ、起動時または実行時のインスタンスへの IP アドレスの割り当てをユーザーが管理して動的に行う機能 (Amazon EC2 の Elastic IP に相当)、VM 間のネットワークトラフィックの分離 (すなわち、VM 内の root ユーザーがほかの VM からのネットワークトラフィックを調べ、必要に応じてこれに干渉することができる機能)、さらにメタデータ・サービスの利用 (http://169.254.169.254/ という URL を使ってインスタンス固有の情報を取得する機能) といった、いくつかの重要な機能を利用することができません。

MANAGED モード - MANAGED モードは、これまでのモードの中で最も機能の豊富なモードですが、その一方で、Eucalyptus 管理者によるネットワーク設定にもさまざまな制限が生じる可能性があります。MANAGED モードでは、Eucalyptus 管理者は大規模なネットワーク (通常は、プライベートでルーティングができないネットワーク) を定義し、VM インスタンスはこのネットワークから IP アドレスを取り出します。STATIC モードの場合と同様、Eucalyptus は、作成された各 VM インスタンスに対して静的なマッピングを行う DHCP サーバーを実行します。Eucalyptus ユーザーは、複数の「名前付きネットワーク」(すなわち「セキュリティ・グループ」)を定義することができ、これらのネットワークに対しては、それぞれの「ネットワーク」内で実行されるすべての VM に対して適用されるネットワーク・イングレスルールを有効にすることができます。ユーザーが VM インスタンスを実行するときに、その VM がメンバーとして所属するネットワークの名前を指定すると、Eucalyptus は、同じ「ネットワーク」内のほかの VM が存在することのできる IP アドレスの範囲の中から、そのサブセットを取り出して割り当てます。ユーザーは特定の「ネットワーク」に適用されるイングレスルール、たとえば特定ネットワーク内の VM に対する ping (ICMP) や ssh (TCP ポート 22) のトラフィックを許可するといったイングレスルールを指定できます。この機能によって、Eucalyptus は Amazon の「セキュリティ・グループ」に相当する機能を提供しています。また管理者はパブリック IP アドレスのプールを指定することができ、ユーザーはこれらのパブリック IP アドレスを割り当て、VM の起動時または実行中に VM にパブリック IP アドレスを動的に関連付けることができます。この機能は、Amazon の「Elastic IP」に相当する機能です。セキュリティ・グループや Elastic IP、VM ネットワークの分離を必要とする Eucalyptus 管理者は、MANAGED モードを使う必要があります。

MANAGED-NOVLAN モード - MANAGED-NOVLAN モードは、機能面 (動的な IP 割り当ておよびセキュリティ・グループ) では MANAGED モードと同じですが、VM ネットワークの分離は利用できません。動的に割り当て可能な IP とセキュリティ・グループは利用したいけれど、「VLANクリーン」なネットワークを運用していない管理者、またはネットワーク上で VM を互いに分離する必要がない管理者は、MANAGED-NOVLAN モードを使うとよいでしょう。

上に説明した Eucalyptus の各ネットワークモードには、それぞれに異なるインフラの必要条件、構成パラメータ、および注意事項があります。これらの点については、以下のセクションでさらに詳しく説明します。

ブリッジ名について

ほとんどのネットワークモードでは、システムのブリッジ名を知る必要があります。バージョン 3.0 以前の Xen を使用している場合 (場合によってはその他のバージョンを使用している場合も)、 ブリッジ名は一般に次のようになっています。

xenbr0

Xen 3.2 を使っている場合のブリッジ名は次のとおりです。

eth0

kvm を使っている場合は、ディストリビューションによってブリッジ名が異なる場合があります。ほとんどのディストリビューションでは、ブリッジ名は次のとおりです。

br0

次のコマンドを実行すると、システムで利用可能なすべてのブリッジの一覧が表示されます。

brctl show

上のコマンドの出力をもとに、システムが Eucalyptus の実行に適した構成になっているかどうか調べてください。

注: 次のブリッジ名は libvirt によって作成されたものです。

virbr0

このブリッジ名は使用しないでください。

このページでは、これ以降、ブリッジ名が正しく特定されていて、ブリッジ名が次の名前になっているという前提で説明を行います。

br0

SYSTEM モード

SYSTEM モードでは、VM ネットワークの面から言って Eucalyptus はほとんど果たす役割がないので、このモードを使うために設定することはほとんどありません。SYSTEM モードで正しく設定する必要がある 'eucalyptus.conf' のオプションは、以下のとおりです。

フロントエンドでは次のとおりです。

VNET_MODE="SYSTEM"

各ノードでは次のとおりです。

VNET_MODE="SYSTEM"
VNET_BRIDGE

各ノードコントローラ (NC) の 'eucalyptus.conf' ファイルでは、パラメータ 'VNET_BRIDGE' に、ローカルネットワークに接続されているブリッジデバイスの名前が設定されていることを確認します。

VNET_BRIDGE="br0"

ここで指定されているデバイスが実際にブリッジであること、さらにこのブリッジが、IP アドレスを動的に割り当てるよう構成されている DHCP サーバーが稼働しているイーサネットネットワークに接続されているブリッジであることを確認します。フロントエンドマシンはブリッジを持つ必要がない点に注意してください (VNET_BRIDGE はノードコントローラだけに関係するパラメータなので、フロントエンドマシンにこのパラメータが存在していても、フロントエンドのコンポーネントからは無視されます)。

実行時に SYSTEM モードが適切に動作しているかどうか確認するには、ノード上でインスタンス実行の前と後のブリッジをチェックします。たとえば、Xen 3.2 を実行しているノードコントローラでは、次のように新しいインタフェースがブリッジに関連付けられているのがわかります。

; brctl show eth0
bridge name  bridge id          STP enabled     interfaces
eth0         8000.000c29369858  no              peth0
                                                vif18.0

上の出力では、VM の 'eth0' インタフェース (vif18.0) が、VM をローカルイーサネットにつなぐ ('peth0') ために使われているブリッジ ('eth0') に正しく接続されていることを確認できます。

kvm を使っている場合、出力はたとえば次のようになります。

; brctl show br0
bridge name	bridge id		STP enabled	interfaces
br0		8000.00005a00083d	no		eth0
							vnet0

この時点で、VM はローカルイーサネットに DHCP リクエストを送信し、ローカルネットワーク上の DHCP サーバーは応答を返すことができるようになっているはずです。

注意事項 - すでに説明したように、SYSTEM モードでは、ネットワークトラフィックの分離は行われず、VM は自身のイーサネットインタフェースがローカルイーサネットに接続された状態で起動します。つまり実質的には、ネットワーク上で実行されている非 VM マシンとまったく同様に、VM を扱えることになります。Eucalyptus は、実行中の VM に対してサードパーティの DHCP サーバーから割り当てられた IP アドレスを見つけようとしますが、使用しているネットワークの特性 (スイッチのタイプや構成、ネットワーク上のクラスタコントローラの位置など) によっては、IP アドレスを見つけられない場合があります。実際に、Eucalyptus が VM の IP アドレスを決定できない場合は、'describe-instances' からの出力のプライベートアドレスとパブリックアドレスの両方のフィールドに '0.0.0.0' が表示されます。このようなエラーを回避する最善の方法は、VM の起動時に (IP アドレスを取得した後で) VM からフロントエンドに何らかのネットワークトラフィックを送信するよう設定することです。たとえば、起動時に何度かフロントエンドに対して ping を実行するよう VM を設定すれば、Eucalyptus は VM の IP アドレスを見つけることができます。

STATIC モード

STATIC モードでは、各 VM に対して静的なエントリを割り当てる DHCP サーバーを Eucalyptus が自前で稼働させることによって、VM の IP アドレスを管理します。STATIC モードで正しく設定する必要がある 'eucalyptus.conf' のオプションは、以下のとおりです。

フロントエンドでは次のとおりです (アスタリスク '*' の付いているパラメータは、どのようなインストールを行ったかによって必要になります。詳細については、あとで説明します)。

VNET_MODE="STATIC"
VNET_INTERFACE
VNET_DHCPDAEMON
*VNET_DHCPUSER
VNET_SUBNET
VNET_NETMASK
VNET_BROADCAST
VNET_ROUTER
VNET_DNS
VNET_MACMAP

各ノードでは次のとおりです。

VNET_MODE="STATIC"
VNET_BRIDGE

Eucalyptus 管理者は、Eucalyptus のノードと同じ物理イーサネットネットワークに接続されている構成済みの有効なイーサネットデバイスを使って、まずフロントエンドの 'eucalyptus.conf' ファイルを設定する必要があります。

VNET_INTERFACE="eth0"

次に、Eucalyptus 管理者は、フロントエンドに DHCP サーバーのバイナリがインストールされていることを確認し、バイナリのある場所を Eucalyptus に教える必要があります。

VNET_DHCPDAEMON="/usr/sbin/dhcpd3"

DHCP デーモンのバイナリが 'non-root' で実行するよう構成されている場合 (たとえば Ubuntu >= 8.10 では ユーザー 'dhcpd' で実行されます)、どのユーザーでバイナリを実行するかを Eucalyptus に教える必要があります。

VNET_DHCPUSER="<dhcpusername>"

次に、Eucalyptus 管理者は、上のイーサネットデバイスの IP サブネット情報を入力する必要があります。たとえば、フロントエンドの 'eth0' インタフェースの IP アドレスが '192.168.1.254' で '192.168.1.0/24' ネットワーク上にあり、DNS サーバーが '192.168.1.2' である場合、'eucalyptus.conf' を次のように設定します。

VNET_SUBNET="192.168.1.0"
VNET_NETMASK="255.255.255.0"
VNET_BROADCAST="192.168.1.255"
VNET_ROUTER="192.168.1.1"
VNET_DNS="192.168.1.2"

最後に、Eucalyptus 管理者は、VM インスタンスに割り当てる MAC アドレスと IP アドレスの静的なマッピングのリストを用意する必要があります。このリストは、最初のエントリから順に割り当てられていきます。各 IP アドレスは、上で定義したサブネット上に存在するものでなければならず、ネットワーク上のほかのマシンが使用していないものでなければなりません。

VNET_MACMAP="AA:DD:11:CE:FF:ED=192.168.1.3 AA:DD:CE:FF:EE=192.168.1.4"

ノードでは、ブリッジが設定されていることを確認します。

VNET_BRIDGE="br0"

Eucalyptus を適切に構成したら、ノードコントローラとフロントエンドコンポーネントを起動します。実行時に STATIC モードが適切に動作しているかどうか確認するには、上の SYSYTEM モードの最後のブリッジをチェックする手順に従ってください。

フロントエンドで DHCP サーバーが適切に起動されていることを確認します ('ps axww | grep -i dhcpd | grep -i euca')。この時点で、VM はローカルイーサネットに DHCP リクエストを送信し、フロントエンド上の DHCP サーバーは、管理者が 'eucalyptus.conf' で定義した MAC アドレスと IP アドレスの静的なマッピングのリストのうち 1 つを選んで、応答を返すことができるようになっているはずです。

注意事項 - すでに説明したように、STATIC モードでは、ネットワークトラフィックの分離は行われず、VM は自身のイーサネットインタフェースがローカルイーサネットに接続された状態で起動します。つまり実質的には、ネットワーク上で実行されている非 VM マシンとまったく同様に、VM を扱えることになります。Eucalyptus は管理者の設定が有効化どうかチェックしないので、VM が適切に IP アドレスを取得できるよう正しい設定を入力する必要があります。最後に、Eucalyptus では、インストールされている DHCP デーモンが ISC DHCP Daemon バージョン 3.0.X か、またはこれと互換性のある DHCP デーモンであるを前提としています。DHCP デーモンがこの条件に該当しない場合は、ISC DHCP Daemon バージョン 3.0.X (ほとんどのディストリビューションのデフォルト) をインストールするか、または使用している DHCP サーバーを利用できるようなラッパースクリプトを書いて、Eucalyptus に DHCP デーモンの場所を教えてください ('eucalyptus.conf' の VNET_DHCPDAEMON で設定します)。

MANAGED モード

MANAGED モードでは、Eucalyptus がローカルの VM インスタンスネットワークを完全に管理し、Eucalyptus が現在サポートしているネットワーク機能のすべて (VM ネットワークの分離、ユーザーが管理できる VM ファイアウォール (イングレスルール/セキュリティ・グループ)、動的なパブリック IP アドレスの割り当て) を利用できます。MANAGED モードで正しく設定する必要がある 'eucalyptus.conf' のオプションは、以下のとおりです。

フロントエンドでは次のとおりです (アスタリスク '*' の付いているパラメータは、どのようなインストールを行ったかによって必要になります。詳細については、あとで説明します)。

VNET_MODE="MANAGED"
VNET_INTERFACE
VNET_DHCPDAEMON
*VNET_DHCPUSER
VNET_SUBNET
VNET_NETMASK
VNET_DNS
VNET_ADDRSPERNET
*VNET_PUBLICIPS

各ノードでは次のとおりです。

VNET_MODE="MANAGED"
VNET_INTERFACE

なお、MANAGED モードで Eucalyptus を実行するには、使用しているローカルネットワークやその構成が一定の条件を満たす必要がある点に注意してください。

MANAGED モードを実行するための必要条件

MANAGED モードを使用する前に、以下の点を確認する必要があります。

1.) ネットワーク上で完全に未使用の IP アドレス範囲があること (192.168...、10.....、その他)。

2.) ネットワークが「VLANクリーン」であること。言い換えると、Eucalyptus コンポーネントが接続されているすべてのスイッチポートが、VLAN タグ付きパケットを許可・転送すること。

3.) フロントエンド (CC) でファイアウォールを実行していないこと、または使用しているファイアウォールが、 フロントエンドの netfilter ルールに対して Eucalyptus が加える動的な変更に対応していること。

MANAGED モードを使用するには、上の 3 つの条件がすべて満たされている必要があります。必要条件が満たされているかどうかを確認しないと、VM インスタンスは少なくともネットワーク上では利用できなくなります。

必要条件の 1 を満たすには、ネットワーク上で完全に未使用であることがわかっている IP アドレス範囲を選択します。可能な限り広い範囲を選択してください。一般的な例を次に示します。

もしネットワーク 10.0.0.0 - 10.255.255.255 が完全に未使用である場合は、次のようにします。

VNET_MODE="MANAGED"
VNET_SUBNET="10.0.0.0"
VNET_NETMASK="255.0.0.0"
VNET_DNS="<your DNS>"
VNET_ADDRSPERNET="128"

または、もしネットワーク 192.168.0.0 - 192.168.255.255 が完全に未使用である場合は、次のようにします。

VNET_MODE="MANAGED"
VNET_SUBNET="192.168.0.0"
VNET_NETMASK="255.255.0.0"
VNET_DNS="<your DNS>"
VNET_ADDRSPERNET="64"

次に、Eucalyptus コンポーネントを実行しているマシン間で、ローカルネットワークが VLAN タグ付きパケットを許可・転送するかどうかを確認します。具体的には、次のようなテストを行います。

フロントエンドで、ローカルイーサネット上にあるインタフェースを選択し (このインタフェースを 'eucalyptus.conf' で VNET_INTERFACE に設定します)、次のコマンドを実行します。

vconfig add <interface> 10
ifconfig <interface>.10 192.168.1.1 up

上のコマンドの '192.168.1.1' の部分は、実際に選択した IP アドレスで置き換えてください。

ノードで、ローカルイーサネット上にあるインタフェースを選択し (このインタフェースを 'eucalyptus.conf' で VNET_INTERFACE に設定します)、次のコマンドを実行します。

vconfig add <interface> 10
ifconfig <interface>.10 192.168.1.2 up

ここでも、上のコマンドの '192.168.1.2' の部分は、実際に選択した IP アドレスで置き換えてください。

次に、2 つのホスト間で ping を実行します。フロントエンドでは次のようにします。

ping 192.168.1.2

ノードでは次のようにします。

ping 192.168.1.1

ping が通らない場合には、使用しているスイッチが VLAN タグ付きパケットを転送するよう設定する必要があります (マネージドスイッチの場合は、スイッチのマニュアルを参照して操作方法を調べてください)。

最後に、フロントエンド上のファイアウォールを注意深く調べ、ファイアウォールが Eucalyptus に干渉していないこと、また逆に Eucalyptus がファイアウォールに干渉していないことを確認します。MANAGED モードでは、Eucalyptus は起動時に 'filter' テーブルと 'nat' テーブルをフラッシュしますが、管理者が定義した特別なルールを Eucalyptus の起動時にロードするようにすることもできます (詳細については、あとで説明します)。

MANAGED モードの構成

Eucalyptus 管理者は、Eucalyptus のノードと同じ物理イーサネットネットワークに接続されている構成済みの有効なイーサネットデバイスを使って、まずフロントエンドの 'eucalyptus.conf' ファイルを設定する必要があります。

VNET_INTERFACE="eth0"

次に、Eucalyptus 管理者は、フロントエンドに DHCP サーバーのバイナリがインストールされていることを確認し、バイナリのある場所を Eucalyptus に教える必要があります。

VNET_DHCPDAEMON="/usr/sbin/dhcpd3"

DHCP デーモンのバイナリが 'non-root' で実行するよう構成されている場合 (たとえば Ubuntu >= 8.10 では ユーザー 'dhcpd' で実行されます)、どのユーザーでバイナリを実行するかを Eucalyptus に教える必要があります。

VNET_DHCPUSER="<dhcpusername>"

ノードでは、VNET_INTERFACE を適切に設定する必要があります。たとえば、現行バージョンの Xen を使用している場合 (ノードの Xen ブリッジが 'eth0' である場合) の設定例は、次のとおりです。

VNET_INTERFACE="peth0"

一方、kvm を使用している場合の設定例は、次のとおりです。

VNET_INTERFACE="eth0"

ネットワーク構成が、MANAGED モードで実行するための必要条件を満たしていることを確認したら、あとの作業は簡単です。たとえば、使用しているネットワークで 192.168.0.0/16 ネットワークが空いていて未使用である場合には、次のようにします。

VNET_MODE="MANAGED"
VNET_SUBNET="192.168.0.0"
VNET_NETMASK="255.255.0.0"
VNET_DNS="<your dns>"
VNET_ADDRSPERNET="64"
VNET_PUBLICIPS="<publicIPa> <publicIPb> ... <publicIPn>"

SUBNET、NETMASK、および DNS については、すでに説明しました。VNET_ADDRSPERNET は、個々のユーザーの名前付きネットワーク (Amazon EC2 の「セキュリティ・グループ」に相当) に同時に参加できる VM インスタンスの数を管理するのに使われます。このパラメータに適切な値を設定するには、VNET_SUBNET/VNET_NETMASK でどれだけの IP アドレスを利用可能にしているか、使用しているネットワークが同時にサポートしている VLAN はいくつか、さらに、同時にアクティブなユーザーネットワークをどれだけサポートする予定かを把握する必要があります。上に示した例では、利用可能なアドレスは 65536 個です (192.168.0.0/16)。これをネットワークごとのアドレス数 (上の例では 64 に設定) で割ると、ある時点で使用可能な、同時にアクティブなユーザーネットワークの最大数がわかります (65536 / 64 == 1024)。インストールした Eucalyptus を使用するユーザーが 100 人である場合、各ユーザーはある時点で最大 10 のアクティブなセキュリティ・グループを持つことができることになります (もちろん、ユーザーは好きなだけセキュリティ・グループを定義できますが、最大で 10 のネットワークでしか VM を実行することができない、ということです)。各セキュリティ・グループでは、最大 61 のインスタンスをサポートできることになります (64 個のアドレスから、サブネット、ブロードキャスト、およびルーター IP のアドレスを引くと、 残りは 61 個)。もし、ネットワークあたりの VM の数をさらに増やして、ユーザーごとのアクティブなセキュリティ・グループの数を減らしたければ、目的の値に応じてパラメータ VNET_ADDRSPERNET を調整します。たとえば、VNET_ADDRSPERNET を 256 に設定すれば、アクティブなユーザーのセキュリティ・グループはそれぞれ 253 までの VM インスタンスをサポートし、100 人のユーザーのそれぞれが同時に 2 つのアクティブなセキュリティ・グループを利用できることになります。

クラスタやクラスタのフロントエンドの外部からユーザーが各自のインスタンスにログインできるようにする場合は、未使用の一連のパブリック IP アドレスを用意し、さらに、インスタンスの起動時、または実行時に動的に、Eucalyptus がこれらの IP アドレス宛のトラフィックを VM インスタンスに動的にルーティングできるようにする必要があります。フロントエンドは、選択した各 IP アドレスについて、この IP アドレスを使って構成できるようになっている必要があります。実際にそうなっているかどうか調べるには、空いているパブリック IP アドレスをいくつか選び、それぞれのアドレスについて以下のテストを実行します。

フロントエンドで次のコマンドを実行します。

ip addr add <publicIP>/32 dev <interface>

ユーザーが VM インスタンスにログインすることになる外部の代表的なマシンのいくつかから、次のコマンドを実行します。

ping <publicIP>

ping が通れば、VM インスタンスへの動的な IP アドレスの割り当ては機能します。テストで割り当てたアドレスは、次のコマンドで削除します。

ip addr del <publicIP>/32 dev <interface>

利用可能なパブリック IP アドレスのリストを用意したら、これらの IP アドレスを 'eucalyptus.conf' に記述して Eucalyptus が使用できるようにします。

VNET_PUBLICIPS="<publicIPa> <publicIPb> ... <publicIPn>"

注意事項 - Eucalyptus を MANAGED モードで実行する場合、現時点では Eucalyptus 全体を 1 台のマシンにインストールして実行することはできません。その理由は、MANAGED モードでは名前付きネットワーク間のトラフィックが (ループバックデバイス経由ではなく) フロントエンドルーターを経由することを前提としているためです。Eucalyptus を 1 台のマシン (ノートコンピュータ) で実行したい場合は、SYSTEM モードまたは STATIC モードを使わなければなりません。MANAGED モードでは、Eucalyptus はフロントエンドの iptables ルールのうち、'filter' テーブルと 'nat' テーブルの両方をフラッシュします。次に、'filter' テーブルの 'FORWARD' チェインのデフォルトポリシーを 'DROP' に設定します。実行時には、アクティブなセキュリティ・グループに対してユーザーがイングレスルールを追加または削除すると、フロントエンドは 'FORWARD' チェインに対してルールを追加または削除します。また、'nat' テーブルは、VM が IP マスカレードを使って外部ネットワークにアクセスできるように設定され、インスタンスの起動時または実行時にユーザーがパブリック IP アドレスを VM に割り当てると、それに応じて 'nat' テーブルに対して動的にルールが追加または削除されます。管理者がフロントエンドに対して適用したいルールがある場合には、Eucalyptus が起動する前か、または Eucalyptus が実行されていないときに、フロントエンドで以下の手順を実行する必要があります。警告 管理者が以下の手順���実行して、Eucalyptus の起動時にロードする特別な iptables ルールを定義した場合、設定が適切でないと Eucalyptus の VM ネットワークが機能しなくなるおそれがあります。以下の手順は、Eucalyptus の動作と干渉しないことが確実にわかっている場合にのみ、実行するようにしてください。

<iptables を使って iptables ルールを設定します>
iptables-save > $EUCALYPTUS/var/run/eucalyptus/net/iptables-preload

MANAGED モードに関するトラブルシューティング

インスタンスを起動し、実行されているはずなのに、ネットワーク上で利用できない場合は、以下の点をチェックしてみてください。

まず、MANAGED モードを実行するための必要条件が、上に説明したとおりに満たされているかどうか確認します (未使用の IP アドレス範囲、VLAN 対応のネットワーク、ノードまたはフロントエンドでファイアウォール・ルールが干渉していないこと)。インスタンスのプライベートアドレス (指定した範囲内のアドレス) を使って、フロントエンドからインスタンスにアクセスできるかどうかテストします。アクセスできない場合は、フロントエンドとノードのインタフェースをチェックします。

フロントエンドでは次のようにします。

ifconfig -a

IP アドレスの割り当てられた '<interface>.<vlan>' というインタフェースがアップしていて実行中であることが表示されるはずです。たとえば、'eth0.10' のようなインタフェース名が表示されます。もしコマンドからの出力にこのような表示がない場合は、VNET_INTERFACE の設定をチェックし、Eucalyptus のログファイルにエラーが記録されていないかどうか調べてください。

ノードでは次のようにします。

brctl show

'eucabr<vlan>' という名前のブリッジがいくつか表示されるはずです。ここで、'<vlan>' は通常、'10' から始まる数値です。出力例を次に示します (VNET_INTERFACE="peth0" の場合)。

; brctl show eucabr10
bridge name  bridge id          STP enabled     interfaces
eucabr10     8000.000c29369858  no              peth0.10
                                                vif18.0

このように表示されない場合は、VNET_INTERFACE の設定をチェックし、Eucalyptus のログファイルを調べてください。

フロントエンドに戻り、'dhcpd' が実行されていることを確認します。

ps axww | grep <dhcpd>

ここで、'<dhcpd>' は VNET_DHCPDAEMON に設定した DHCP デーモンの名前です。'ps' からの出力を見て、DHCP デーモンが上の VLAN タグ付きインタフェース (<interface>.<vlan>) でリスンしているかどうか確認します。DHCP デーモンが実行されていない場合は、Eucalyptus のログファイルをチェックし、原因を調べてください (コマンドの実行に失敗している場合は、'cc.log' にその情報が記録されます)。実行時に DHCP デーモンが停止した場合は、'http-cc_error_log' に記録される DHCP デーモンからの出力を見て、原因を調べてください。

フロントエンドからインスタンスのプライベート IP アドレスにはアクセスできるのに、パブリック IP アドレスについては転送が適切に行われていない場合は、まず、'euca-describe-groups <group of instance>' を実行し、ユーザーのセキュリティ・グループが適切に設定されているかどうか確認します。'<group of instance>' はデフォルトでは 'default' に、また、インスタンスの起動時に指定されなかった場合も、'default' に設定されています。グループに適切なイングレスルールが設定されている場合は、このルールがフロントエンドで有効になっているかどうかチェックします。

iptables -L <username>-<groupname>

このとき、ルールがまったく表示されない場合は、テーブルに関するルールを適用する際にエラーが発生していないかどうか、'cc.log' をチェックしてください。次に、'nat' テーブルをチェックします。

iptables -L -t nat

パブリック IP アドレスからインスタンスの IP アドレスへのトラフィックをルーティングする DNAT ルールが 1 つ、さらに、インスタンスから出ていくパケットの送信元 IP アドレスを設定する SNAT ルールが 1 つ表示されるはずです。もしコマンドからの出力にこのような表示がない場合は、'cc.log' をチェックし、原因を調べてください。

以上のチェックをすべてパスしたにもかかわらず、インスタンスのネットワークの問題が解消されない場合は、以下に示す情報を収集し、これを添えて Eucalyptus のディスカッション・フォーラムに報告してください。

フロントエンドと代表的なノードで、下記のコマンドからの出力を記録します。

netstat -rn
ifconfig -a
brctl show
iptables-save

さらに、'cc.log'、'nc.log'、'httpd-cc_error_log'、および 'httpd-nc_error_log' も添えてください。

MANAGED-NOVLAN モード

MANAGED-NOVLAN モードでは、Eucalyptus がローカルの VM インスタンスネットワークを完全に管理し、Eucalyptus が現在サポートしているネットワーク機能のすべて (ユーザーが管理できる VM ファイアウォール (イングレスルール/セキュリティ・グループ)、動的なパブリック IP アドレスの割り当て) を利用できますが、VM ネットワークの分離は利用できません。MANAGED-NOVLAN モードで正しく設定する必要がある 'eucalyptus.conf' のオプションは、以下のとおりです。

フロントエンドでは次のとおりです (アスタリスク '*' の付いているパラメータは、どのようなインストールを行ったかによって必要になります。詳細については、あとで説明します)。

VNET_MODE="MANAGED-NOVLAN"
VNET_INTERFACE
VNET_DHCPDAEMON
*VNET_DHCPUSER
VNET_SUBNET
VNET_NETMASK
VNET_DNS
VNET_ADDRSPERNET
*VNET_PUBLICIPS

各ノードでは次のとおりです。

VNET_MODE="MANAGED-NOVLAN"
VNET_BRIDGE

なお、MANAGED-NOVLAN モードで Eucalyptus を実行するには、使用しているローカルネットワークやその構成が一定の条件を満たす必要がある点に注意してください。

MANAGED-NOVLAN モードを実行するための必要条件

MANAGED-NOVLAN モードを使用する前に、以下の点を確認する必要があります。

1.) ネットワーク上で完全に未使用の IP アドレス範囲があること (192.168...、10.....、その他)。

2.) フロントエンド (CC) でファイアウォールを実行していないこと、または使用しているファイアウォールが、 フロントエンドの netfilter ルールに対して Eucalyptus が加える動的な変更に対応していること。

MANAGED-NOVLAN モードを使用するには、上の 2 つの条件の両方が満たされている必要があります。必要条件が満たされているかどうかを確認しないと、VM インスタンスは少なくともネットワーク上では利用できなくなります。

必要条件の 1 を満たすには、ネットワーク上で完全に未使用であることがわかっている IP アドレス範囲を選択します。可能な限り広い範囲を選択してください。一般的な例を次に示します。

もしネットワーク 10.0.0.0 - 10.255.255.255 が完全に未使用である場合は、次のようにします。

VNET_MODE="MANAGED-NOVLAN"
VNET_SUBNET="10.0.0.0"
VNET_NETMASK="255.0.0.0"
VNET_DNS="<your DNS>"
VNET_ADDRSPERNET="128"

または、もしネットワーク 192.168.0.0 - 192.168.255.255 が完全に未使用である場合は、次のようにします。

VNET_MODE="MANAGED-NOVLAN"
VNET_SUBNET="192.168.0.0"
VNET_NETMASK="255.255.0.0"
VNET_DNS="<your DNS>"
VNET_ADDRSPERNET="64"

最後に、フロントエンド上のファイアウォールを注意深く調べ、ファイアウォールが Eucalyptus に干渉していないこと、また逆に Eucalyptus がファイアウォールに干渉していないことを確認します。MANAGED-NOVLAN モードでは、Eucalyptus は起動時に 'filter' テーブルと 'nat' テーブルをフラッシュしますが、管理者が定義した特別なルールを Eucalyptus の起動時にロードするようにすることもできます (詳細については、あとで説明します)。

MANAGED-NOVLAN モードの構成

Eucalyptus 管理者は、Eucalyptus のノードと同じ物理イーサネットネットワークに接続されている構成済みの有効なイーサネットデバイスを使って、まずフロントエンドの 'eucalyptus.conf' ファイルを設定する必要があります。

VNET_INTERFACE="eth0"

次に、Eucalyptus 管理者は、フロントエンドに DHCP サーバーのバイナリがインストールされていることを確認し、バイナリのある場所を Eucalyptus に教える必要があります。

VNET_DHCPDAEMON="/usr/sbin/dhcpd3"

DHCP デーモンのバイナリが 'non-root' で実行するよう構成されている場合 (たとえば Ubuntu >= 8.10 では ユーザー 'dhcpd' で実行されます)、どのユーザーでバイナリを実行するかを Eucalyptus に教える必要があります。

VNET_DHCPUSER="<dhcpusername>"

ノードでは、VNET_INTERFACE を適切に設定する必要があります。

VNET_BRIDGE="br0"

ネットワーク構成が、MANAGED-NOVLAN モードで実行するための必要条件を満たしていることを確認したら、あとの作業は簡単です。たとえば、使用しているネットワークで 192.168.0.0/16 ネットワークが空いていて未使用である場合には、次のようにします。

VNET_MODE="MANAGED-NOVLAN"
VNET_SUBNET="192.168.0.0"
VNET_NETMASK="255.255.0.0"
VNET_DNS="<your dns>"
VNET_ADDRSPERNET="64"
VNET_PUBLICIPS="<publicIPa> <publicIPb> ... <publicIPn>"

SUBNET、NETMASK、および DNS については、すでに説明しました。VNET_ADDRSPERNET は、個々のユーザーの名前付きネットワーク (Amazon EC2 の「セキュリティ・グループ」に相当) に同時に参加できる VM インスタンスの数を管理するのに使われます。このパラメータに適切な値を設定するには、VNET_SUBNET/VNET_NETMASK でどれだけの IP アドレスを利用可能にしているか、使用しているネットワークが同時にサポートしている VLAN はいくつか、さらに、同時にアクティブなユーザーネットワークをどれだけサポートする予定かを把握する必要があります。上に示した例では、利用可能なアドレスは 65536 個です (192.168.0.0/16)。これをネットワークごとのアドレス数 (上の例では 64 に設定) で割ると、ある時点で使用可能な、同時にアクティブなユーザーネットワークの最大数がわかります (65536 / 64 == 1024)。インストールした Eucalyptus を使用するユーザーが 100 人である場合、各ユーザーはある時点で最大 10 のアクティブなセキュリティ・グループを持つことができることになります (もちろん、ユーザーは好きなだけセキュリティ・グループを定義できますが、最大で 10 のネットワークでしか VM を実行することができない、ということです)。各セキュリティ・グループでは、最大 61 のインスタンスをサポートできることになります (64 個のアドレスから、サブネット、ブロードキャスト、およびルーター IP のアドレスを引くと、 残りは 61 個)。もし、ネットワークあたりの VM の数をさらに増やして、ユーザーごとのアクティブなセキュリティ・グループの数を減らしたければ、目的の値に応じてパラメータ VNET_ADDRSPERNET を調整します。たとえば、VNET_ADDRSPERNET を 256 に設定すれば、アクティブなユーザーのセキュリティ・グループはそれぞれ 253 までの VM インスタンスをサポートし、100 人のユーザーのそれぞれが同時に 2 つのアクティブなセキュリティ・グループを利用できることになります。

クラスタやクラスタのフロントエンドの外部からユーザーが各自のインスタンスにログインできるようにする場合は、未使用の一連のパブリック IP アドレスを用意し、さらに、インスタンスの起動時、または実行時に動的に、Eucalyptus がこれらの IP アドレス宛のトラフィックを VM インスタンスに動的にルーティングできるようにする必要があります。フロントエンドは、選択した各 IP アドレスについて、この IP アドレスを使って構成できるようになっている必要があります。実際にそうなっているかどうか調べるには、空いているパブリック IP アドレスをいくつか選び、それぞれのアドレスについて以下のテストを実行します。

フロントエンドで次のコマンドを実行します。

ip addr add <publicIP>/32 dev <interface>

ユーザーが VM インスタンスにログインすることになる外部の代表的なマシンのいくつかから、次のコマンドを実行します。

ping <publicIP>

ping が通れば、VM インスタンスへの動的な IP アドレスの割り当ては機能します。テストで割り当てたアドレスは、次のコマンドで削除します。

ip addr del <publicIP>/32 dev <interface>

利用可能なパブリック IP アドレスのリストを用意したら、これらの IP アドレスを 'eucalyptus.conf' に記述して Eucalyptus が使用できるようにします。

VNET_PUBLICIPS="<publicIPa> <publicIPb> ... <publicIPn>"

注意事項 - Eucalyptus を MANAGED-NOVLAN モードで実行する場合、現時点では Eucalyptus 全体を 1 台のマシンにインストールして実行することはできません。その理由は、MANAGED-NOVLAN モードでは名前付きネットワーク間のトラフィックが (ループバックデバイス経由ではなく) フロントエンドルーターを経由することを前提としているためです。Eucalyptus を 1 台のマシン (ノートコンピュータ) で実行したい場合は、SYSTEM モードまたは STATIC モードを使わなければなりません。MANAGED-NOVLAN モードでは、Eucalyptus はフロントエンドの iptables ルールのうち、'filter' テーブルと 'nat' テーブルの両方をフラッシュします。次に、'filter' テーブルの 'FORWARD' チェインのデフォルトポリシーを 'DROP' に設定します。実行時には、アクティブなセキュリティ・グループに対してユーザーがイングレスルールを追加または削除すると、フロントエンドは 'FORWARD' チェインに対してルールを追加または削除します。また、'nat' テーブルは、VM が IP マスカレードを使って外部ネットワークにアクセスできるように設定され、インスタンスの起動時または実行時にユーザーがパブリック IP アドレスを VM に関連付けたり、関連付けを解除したりすると、それに応じて 'nat' テーブルに対して動的にルールが追加または削除されます。管理者がフロントエンドに対して適用したいルールがある場合には、Eucalyptus が起動する前か、または Eucalyptus が実行されていないときに、フロントエンドで以下の手順を実行する必要があります。警告 管理者が以下の手順を実行して、Eucalyptus の起動時にロードする特別な iptables ルールを定義した場合、設定が適切でないと Eucalyptus の VM ネットワークが機能しなくなるおそれがあります。以下の手順は、Eucalyptus の動作と干渉しないことが確実にわかっている場合にのみ、実行するようにしてください。

<iptables を使って iptables ルールを設定します>
iptables-save > $EUCALYPTUS/var/run/eucalyptus/net/iptables-preload

注: 'eucalyptus.conf' でネットワークに関係する値を変更した場合、変更内容を有効にするには CC を再起動する必要があります ($EUCALYPTUS/etc/init.d/eucalyptus-cc restart)。


管理者ガイドに戻る
イメージの管理に進む