OpenStackディストリビューション「RDO」を用いて、実際に動作するOpenStack環境を構築しながら、OpenStackの利用方法や内部構造を学ぶ特集の第7回です。今回は、Neutronが仮想ネットワークを実現する仕組みを解説します。Neutronが標準で提供するOVSプラグインに加えて、外部のSDNコントローラーと連携する使い方も紹介します。

Neutronのプラグイン方式

 「基礎編」第4回の図1に示したように、Neutronが構成する仮想ネットワークには、大きくは、仮想ルーターと仮想スイッチの機能が含まれます。その他には、仮想マシンインスタンスにIPアドレスを割り当てるためのDHCPサーバーの機能もあります。Neutronは、これらの機能を個別の「エージェント」によって実現します(図1)。例えば、Neutronサービスが仮想ルーター作成のAPIリクエストを受け取ると、メッセージングサーバーを経由して、「L3エージェント」に仮想ルーターの作成を依頼します。同様に、仮想スイッチの作成は「L2エージェント」、DHCPサーバーの作成は「DHCPエージェント」が担当します。

図1●Neutronのエージェントによるプラグイン構造
図1●Neutronのエージェントによるプラグイン構造
[画像のクリックで拡大表示]

 そして、これらのエージェントが仮想ルーターや仮想スイッチを作成する方法は、使用するプラグインによって変わってきます。さらに、各エージェントが稼働するサーバーもプラグインによって変わります。図2は、OpenStackが標準で提供するOVS(Open vSwitch)プライグインの例になります。OVSプラグインでは、仮想ルーターとDHCPサーバーは、コンピュートノードとは別のネットワークノード上に用意されるため、L3エージェントとDHCPエージェントは、ネットワークノードに配置されます。仮想スイッチについては、各コンピュートノードとネットワークノードにまたがった形で作成する必要があるので、全てのノードにL2エージェントが配置されています。

図2●OVSプライグインのエージェント配置
図2●OVSプライグインのエージェント配置
[画像のクリックで拡大表示]

 図2では、物理ネットワークの構成にも注意が必要です。L2エージェントが作成する仮想スイッチは、プライベートネットワークを経由してパケットを送受信します。外部ネットワーク(パブリックネットワーク)と通信する際は、プライベートネットワークを経由してネットワークノードに到達した後、ネットワークノード上の仮想ルーターを通って、パブリックネットワークへと出ていきます。コンピュートノードから直接にパブリックネットワークに出られるわけではありません。