OpenStack Neutronとは何か?:いま覚えておくべきOpenStack Neutronの基本(1)(2/3 ページ)
オープンなIaaSプラットフォーム構築の本命といわれるOpenStack。そのネットワーク部分の管理を担うコンポーネントであるNeutronはどのようなものでしょうか。基本的な構成や内部の動作、実践的なネットワークの構成方法を解説します。
Neutronの実装
さて、いままで見たように、複数のテナントがそれぞれ独立性を保ったネットワークを持つように構成する、という機能は、従来の物理環境であれば、ごく当たり前に設計してきたものであることはお分かりいただけたかと思います。
従来のネットワーク設計と異なるのは、OpenStack環境では、これらの機能を動的に提供する必要がある、という点です。こうした要件を、Neutronでは以下に示すソフトウェアや技術を使って実現しています。
機能 | 実装に使用されているソフトウェア/技術 |
---|---|
ネットワーク分割 | Network Namespace、VLAN、GRE、VXLAN |
テナント内でのDHCPサーバー、DNSサーバー | Network Namespace内で実行されるdnsmasq |
ルーター、NAT | Network Namespace内で実行されるiptables(NAT)、Linux ip forwarding |
各サーバー、ルーター間の接続 | Open vSwitch、veth pair、TAP |
前節「OpenStackネットワークが実現すべき機能」で示した環境を、仮想環境に置き換える最もシンプルな方法は、ルーター、DHCPサーバー、DNSサーバーを全て仮想マシンとして実装してしまうことです。仮想マシンであれば、その中で任意のプロセスを実行することができますし、仮想マシンのNICに任意のIPアドレスを割り当てることで、ネットワーク分割も実現できます。
しかしながら、仮想マシンに必要なリソースは決して小さくありません。ルーターやDHCPサーバー、DNSサーバーは、テナントごとにそれぞれ用意する必要がありますから、そのリソースも決して無視できないものになります。また、ここで必要となる処理は主にネットワークI/Oです。ネットワークI/Oのような割り込みを伴う処理を仮想マシンで実行することのオーバーヘッドも懸念されます。
そこで登場するのがNetwork Namespaceです。Network Namespaceとは、Linuxカーネル2.6.24で導入されたネットワーク仮想化機構です。単一のホスト上で、複数の独立したネットワーク環境を作ることができます。これを使うと、最小限のオーバーヘッドで動作させることができます。
またインスタンスや、Network Namespaceにより実装されたルーター、DHCPサーバーなどを接続するためのスイッチやケーブルも、やはりソフトウェア的に実現しなければなりません。これらは、Open vSwitch、Linux bridge、veth pair、TAP deviceといった技術が使われています。
Neutronが作るネットワークの内部構造
下図はNeutronが生成するネットワークの構成を表しています。左の図は、最初に要件として示した物理ネットワークから単一テナントを取り出したものです。右の図は、Neutronが生成したネットワークです。
ネットワークの接続を強調するため、左の物理ネットワークの絵とは少し様子が変わってしまっていますが、Open vSwitchによるブリッジ(赤)の中の正方形はポートを表しています。
ルーターやDHCP/DNSサーバーが、それぞれNetwork Namespaceで実装されているのが分かると思います。これらの内部構造はこの後、解説していきます。これらとインスタンス(仮想サーバー)を互いに接続しているスイッチやケーブルの役割を果たしているのが、Open vSwitchで実装されているブリッジとveth pairです。
では次に、いくつか特定の場面を取り上げて、具体的な動作、通信の流れを追うことで、もう少し詳しくNeutronのネットワーク構成を見ていきます。
Neutronの動作(1)インスタンスの起動
インスタンスの起動に伴うDHCPサーバーの作成とIPアドレス割当の動作を見てみます。OpenStackからNeutronへネットワーク作成が指示されると、Neutronのプロセス「neutron-dhcp-agent」がDHCPサーバー用のNamespaceを作成します。次に作成したNamespace内でdnsmasqを起動します。dnsmasqは、簡易的なDNS/DHCPサーバー機能を持ったソフトウェアです。
DHCPサーバーとインスタンスの動作は以下の通りです。
- インスタンスが起動すると、DHCPサーバーへIPアドレス割当のリクエストを送信します
- DHCPリクエストはインスタンスから内部接続用ブリッジを経由して、DHCPサーバーへ届きます
- DHCPサーバーNamespaceで動作しているdnsmasqが内部IPアドレスを割り当てます
Copyright © ITmedia, Inc. All Rights Reserved.