OpenStackの仮想ネットワーク管理機能「Quantum」の基本的な設定
OpenStack 2012.2(「Folsom」)で新たに追加された新コンポーネント「Quantum」は、クラウド環境内での仮想ネットワーク作成や管理を行うためのサービスだ。柔軟に仮想ネットワークを作成でき、またネットワーク仮想化に対応したハードウェアとの連携機能も搭載している。今回はこのQuantumの導入方法や、シンプルな仮想ネットワーク環境の構築方法について解説する。
OpenFlowにも対応、物理ネットワーク上に仮想ネットワークを柔軟に構築できる
最近のクラウド環境では、マシンだけでなくネットワークについても仮想化が行われている。たとえば仮想マシンをユーザーごとに独立したネットワークに接続したり、仮想マシンに割り当てられたグローバルIPアドレスを動的に変更する、といった機能などは仮想ネットワークの機能を利用して実現されている。クラウド環境を構築するソフトウェアであるOpenStackでもこのような機能の実装が進んでおり、2012年にリリースされたOpenStack 2012.2(「Folsom」)では仮想ネットワーク機能を提供するための独立したコンポーネント「Quantum」が新たに追加されている。
Quantumは、ソフトウェアで柔軟に構成を変更できるネットワークの構築を目的として開発されたコンポーネントだ。ユーザーからの操作によるプライベートネットワークの作成やネットワークへの仮想マシンの接続、ネットワーク同士の仮想ルーターでの接続、などの機能を提供している。QuantumもOpenStackのほかのコンポーネントと同様にプラグイン構造を取っており、ネットワークを操作する部分はプラグインとしてQuantum本体から切り離されている。Linuxのブリッジ機能(LinuxBridge)を利用して仮想ネットワークを作成するものや仮想スイッチ「Open vSwitch」を利用するもの、OpenFlowを利用するもの、Ciscoのスイッチを利用するものといったプラグインが提供されており、さまざまな構成が実現できる。
Webブラウザ経由でアクセスできるGUI管理コンソール「OpenStack Dashboard(Horizon)」との連携機能もあり、GUIによる仮想ネットワークの管理も可能だ(図1)。
Quantumを利用した仮想ネットワーク構成の概念
Quantumでは仮想ネットワークや仮想ルーター、仮想ポートを使い、さまざまなネットワーク構成を仮想的に実現できる。図2はQuantumを使って作成した仮想ネットワーク構成の一例だ。図中の「テナント」は仮想マシンや仮想ネットワークなどの管理単位で、OpenStackのユーザーにはテナントごとにアクセス権限を割り当てることができる。ユーザーは権限のないテナント内の仮想マシンや仮想ネットワークについては操作・閲覧できない。これにより、1つのOpenStack環境内に複数のユーザーを収容できる仕組みになっている。
1つのテナント内には複数の仮想ネットワークを作成でき、仮想マシンは複数の仮想ネットワークに接続可能だ。仮想マシンと仮想ネットワークを接続すると仮想ネットワーク側に「ポート」と呼ばれる仮想インターフェイスが作成され、IPアドレスが割り当てられる。このとき、仮想マシンの仮想NICには対応するポートに付与されたIPアドレスを割り当てる必要がある。また、仮想ネットワークから外部ネットワークにアクセスするには、仮想ルータを作成して外部ネットワークと仮想ネットワークを接続する必要がある。
仮想ルータには静的NATを行う機能があり、指定した外部IPアドレス(フローティングIPアドレスと呼ばれる)宛ての通信を、特定の仮想マシンに割り当てられたローカルIPアドレス宛てに変換することができる。この機能を利用することで、外部から仮想マシンに直接アクセスすることが可能になる。
Quantumのコンポーネント
Quantumは4つのコンポーネントから構成されている(表1)。
名称 | EPELでのサービス名 | 説明 |
---|---|---|
Quantum Server | quantum-server | Quantum全体の管理や統制を行う |
L3 Agent | quantum-l3-agent | L3レベルでのネットワーク設定を実行する |
DHCP Agent | quantum-dhcp-agent | 仮想マシン向けのDHCPサーバーを提供する |
Plugin Agent | quantum-*-agent(*部分にはプラグイン名称が入る) | 仮想ネットワークの作成・管理や仮想マシンと仮想ネットワークを接続するための設定を実行する |
まずQuantum Serverは、ユーザーからの操作を受けてネットワーク構成を設定したり、各種設定管理などを行うサーバーだ。ユーザーはこのサーバーが提供するAPIを利用して各種操作を実行する。次のL3 Agentは、L3(TCP/IP)レベルでのネットワーク設定を実行するサービスだ。iptablesによるパケット転送ルールの設定や、ルーター設定などを行う。DHCP Agentは仮想マシンにIPアドレスを割り当てるためのDHCPサーバーを提供する。前述のとおり、仮想マシンのNICには仮想ポートに割り当てられたIPアドレスを割り当てる必要がある。DHCPエージェントは仮想マシンのMACアドレスをチェックし、対応するIPアドレスをDHCPで割り当てる処理を行う。最後のPlugin Agentは、プラグイン固有のネットワーク設定処理を行うサービスだ。
これらのサービスは、必ずしも1つのホスト(ノード)ですべてを実行させる必要はない。たとえば図3は、Quantumの各コンポーネントや関連コンポーネントの一般的な構成例だ。
ここでは制御用のサービスを稼働させる「制御ノード」上でQuantum Serverを稼働させ、外部ネットワークに接続されているインターフェイスを持つ「ネットワークノード」上でL3 AgentおよびDHCP Agent、Plugin Agentを稼働させている。いっぽう、nova-computeサービスを使って仮想マシンを稼働させる「計算ノード」上では、Plugin Agentを稼働させておく必要がある。これらのノード間は制御/管理用のネットワークで接続され、それぞれのサービスはこのネットワーク経由でサービス間の通信を行う。ネットワークノードと計算ノードは制御/管理用ネットワークとは異なるネットワークで接続され、このネットワーク経由で仮想マシンは通信を行う。仮想マシンが外部ネットワークと通信したい場合は、ネットワークノードを経由して行う仕組みだ。
制御ノードとネットワークノードをまとめて1つのノードとして実行させたり、データベースやメッセージサービスを別のホスト上で実行させる、といった構成も可能だ。このあたりは要件に応じて柔軟に変更できるようになっている。なお、この構成ではネットワークノードにNICが3つ必要となる点には注意が必要だ。NICが2つまでのさくらの専用サーバのようなサービスでは、構成を工夫する必要がある。