OpenStack について学ぶ: ネットワーキング関連コンポーネントの Neutron

この記事では、OpenStack Networking (Neutron) プロジェクトを紹介し、OpenStack のアーキテクチャー全体の中でこのプロジェクトがどのような位置を占めており、どのような機能を実現するのかを説明します。また、Neutron コンポーネントをインストール、構成、使用する上での要件についても説明します。

John Rhoton, Cloud Computing Strategist, Recursive

Author photoJohn Rhoton は、パブリック・クラウド、プライベート・クラウド、ハイブリッド・クラウド・コンピューティングに焦点を絞り、世界の企業を顧客としたコンサルティングを専門とする技術ストラテジストです。彼はさまざまな業界イベントで、モバイル、ソーシャル・ネットワーキング、仮想化などの新興技術に関する講演を頻繁に行っており、また『Cloud Computing Explained』(2009年)、『Cloud Computing Architected』(2011年) など、6 冊の著作があります。



2014年 2月 06日

この記事で取り上げるのは、他の OpenStack プロジェクト間の接続を管理する OpenStack Networking です。

弾力的にスケーリングできるワークロード管理システムを、ネットワーク固有の機能を一切組み込まずに開発することは可能です。コンピュート・ノードが他のコンピュート・ノードに接続したり、外部にアクセスしたりする必要があるのは確かですが、既存のネットワーキング・インフラストラクチャーを利用して IP アドレスを割り当てたり、ノード間でデータを中継したりすることができます。このような手法をマルチテナント環境で使用する場合に最大の問題となるのは、環境内に配置されたネットワーク管理システムが、ユーザー間のトラフィックを効率的かつセキュアな方法で分離できないことです。これは、パブリック・クラウドを構築する組織にとっても、プライベート・クラウドを構築する組織にとっても、大きな問題となります。

この問題に対処する 1 つの方法は、ネットワーク関連のすべてのリクエストを処理する精巧なネットワーク管理スタックを OpenStack で構築することです。この方法で課題となるのは、他の多様なツールやソフトウェアとの統合を含めた要件一式が実装ごとに固有のものになりがちであることです。

このことから、OpenStack では OpenStack Networking と呼ばれる抽象化層を作成する方法を採ることで、他のネットワーキング・サービスとの統合に対処する多種多様なプラグインに対応できるようにしています。OpenStack Networking では、クラウドのテナント向けに API (アプリケーション・プログラミング・インターフェース) を提供しており、テナントはこの API を使用して、(例えば、多層 Web アプリケーションをサポートするために) 柔軟なポリシーの構成と高度なネットワーキング・トポロジーの構成をすることができます。

OpenStack Networking を導入すると、L2-in-L3 トンネリングやエンドツーエンドの QoS (サービス品質) サポートなどといった高度なネットワーク機能を導入するためのプラグインとして、サード・パーティーが作成したプラグインを使用することができます。また、サード・パーティーが作成したネットワーク・サービス (ロード・バランシング、VPN (仮想プライベート・ネットワーク)、またはファイアウォールなど) を OpenStack のテナント・ネットワークに統合して使用することもできます。

OpenStack のネットワーキング・コンポーネントは、かつて OpenStack Nova (Compute) プロジェクトの一部となっていましたが、Folsom リリースで、そのほとんどが個別の 1 つのプロジェクトとして分離されました。その新しいプロジェクトは当初 Quantum と呼ばれていましたが、その後、Quantum Corporation 社の商標と混同されないように Neutron と改名されました。このため、OpenStack Networking を指すときの名前が Nova、Quantum、Neutron とで混在している場合もありますが、驚かないでください。

モデル

OpenStack Networking API は、ネットワーキング・リソースを表現するための、仮想ネットワーク、サブネット、およびポートの各抽象化からなる単純なモデルに基づきます。この場合の仮想ネットワークは分離されたレイヤー 2 セグメントであり、物理ネットワーキングにおける VLAN (仮想 LAN) と似ています。さらに具体的に言うと、このレイヤー 2 セグメントは、このネットワークを作成したテナント用に確保されたブロードキャスト・ドメインであるか、共有ドメインとして明示的に構成されたブロードキャスト・ドメインです。ネットワークは、Neutron API のプライマリー・オブジェクトでもあります。つまり、ポートとサブネットは、常に特定のネットワークに割り当てられます。

サブネットは IPv4 アドレスまたは IPv6 アドレスのブロックと、これらのアドレスに関連付けられた構成からなり、OpenStack はこのアドレス・プールから IP アドレスを VM (仮想マシン) に割り当てることができます。各サブネットは、CIDR (Classless Inter-Domain Routing) による範囲として指定され、ネットワークに関連付けられていなければなりません。テナントはサブネットに加え、オプションでゲートウェイ、DNS (Domain Name System) ネーム・サーバーのリスト、および一連のホスト・ルートを指定することもできます。サブネット上の VM インスタンスは、そのサブネットの構成を自動的に継承します。

ポートは仮想スイッチ接続ポイントのことであり、VM インスタンスはポートを介して、ネットワーク・アダプターを仮想ネットワークに接続することができます。ポートは作成時に、指定されたサブネットのいずれか 1 つから固定 IP アドレスを受け取ります。API ユーザーは、アドレス・プール内の特定のアドレスを要求することも、使用可能な IP アドレスの割り当てを Neutron に任せることもできます。OpenStack は、インターフェースが使用する MAC (メディア・アクセス制御) アドレスも定義することができます。ポートの割り当てが解除されると、ポートに割り当てられていた IP アドレスは解放されて、アドレス・プールに戻されます。


プラグイン

当初の OpenStack Compute ネットワーク実装が前提としていたのは、あらゆる分離を一貫して Linux VLAN と IP テーブルによって行うという基本モデルです。一方、OpenStack Networking ではプラグインの概念を導入しています。プラグインは OpenStack Networking API のバックエンド実装であり、プラグインであれば、多種多様なテクノロジーを使用して論理 API リクエストを実装することができます。

OpenStack Networking プラグインのなかには、基本的な Linux VLAN と IP テーブルを使用するものもあります。一般に、小規模で単純なネットワークには Linux VLAN と IP テーブルで十分ですが、大口の顧客となると、要件がより高度になりがちであり、多層構造の Web アプリケーションや複数のプライベート・ネットワーク間の内部分離が必要になってくる可能性もあります。大口の顧客は、例えば IP アドレスを変更せずにアプリケーションをクラウドにマイグレーションするために、(他のテナントが使用しているアドレスと重複する可能性がある) 独自の IP アドレッシング・スキームを要求することも可能であるため、そのような場合には、L2-in-L3 トンネリングや OpenFlow などといった、さらに高度なテクノロジーが必要になるかもしれません。

プラグイン・アーキテクチャーの場合、クラウド管理者はネットワークの機能を極めて柔軟にカスタマイズすることができ、サード・パーティーが API 拡張機能という形で提供する追加の API 機能を使用することもできます。サード・パーティーが提供する機能は、最終的に OpenStack Networking API のコアに統合される可能性もあります。

Neutron API は、ユーザーや他のサービスに対して仮想ネットワーク・サービス・インターフェースを公開していますが、これらのネットワーク・サービスは、実際には、分離された仮想ネットワークをテナントや他のサービス (アドレス管理など) に提供するプラグインの中に実装されています。この API ネットワークには、インターネット上の誰もがアクセスできる必要がありますが、実際のところ、この API ネットワークが外部ネットワークのサブネットである場合もあります。前述したように、Neutron API はネットワーク、サブネット、ポートからなるネットワーク接続モデルを公開しますが、この API が実際に処理を行うわけではなく、基礎となるインフラストラクチャーとやりとりして、この論理モデルに従ってトラフィックがルーティングされるようにするのは、Neutron プラグインです。

さまざまな機能とパフォーマンス・パラメーターを提供する多数のプラグインが用意されており、その数は次第に増えています。現在使用可能なプラグインには、以下のものが含まれます。

  • Open vSwitch
  • Cisco UCS/Nexus
  • Linux Bridge
  • Nicira Network Virtualization Platform
  • Ryu OpenFlow Controller
  • NEC OpenFlow

どのプラグインを選択するかは、クラウド管理者次第です。クラウド管理者が選択肢を評価して、特定のインストール要件に従ったプラグインを選択することができます。


アーキテクチャー

OpenStack Networking サーバーのメイン・プロセスは neutron-server です。neutron-server は、OpenStack Networking API からのユーザー・リクエストを構成済みのプラグインに中継する Python デーモンです。OpenStack Networking には、このメインの Neutron プロセスとメッセージ・キューまたは標準 OpenStack Networking API を介してやりとりする以下の 3 つのエージェントも組み込まれています。

  • neutron-dhcp-agent: すべてのテナント・ネットワークに DHCP (Dynamic Host Configuration Protocol) サービスを提供します。
  • neutron-l3-agent: L3 でのフォワーディングや NAT (ネットワーク・アドレス変換) によるフォワーディングを行うことで、テナント・ネットワーク上の VM が外部ネットワークへアクセスできるようにします。
  • オプションのプラグイン固有のエージェント (neutron-*-agent): 各ハイパーバイザー上でローカル仮想スイッチ構成を行います。

OpenStack Networking と他の OpenStack コンポーネントとの間のやりとりを理解しておくことは重要です。他の OpenStack プロジェクトと同じく、管理者およびテナントは、OpenStack Dashboard (Horizon) が提供する GUI (グラフィカル・ユーザー・インターフェース) を使用して、OpenStack Networking の機能 (この場合、各種ネットワーク・サービスを作成および管理する機能) にアクセスします。また、各種ネットワーク・サービスは、あらゆる API リクエストの認証および認可を OpenStack Identity (Keystone) に任せます。

一方、OpenStack Compute (Nova) との統合は限定的です。Nova は仮想インスタンスを起動するときに、各仮想ネットワーク・インターフェースを特定のポートに接続するために OpenStack Networking とやりとりします。


セットアップ

OpenStack のコンポーネントを実際にインストールする手順は、ディストリビューションによっても OpenStack のリリースによっても大きく異なります。通常、OpenStack のコンポーネントはディストリビューションの一部として提供されますが、これらのコンポーネントを使用するには、基本的な作業を完了しておかなければなりません。このセクションでは、必要となる作業の概要を説明します。

システム要件

OpenStack では、x86-64 アーキテクチャーを利用しますが、それ以外の点では、一般商品化されたハードウェア用に設計されているため、最小システム要件は厳しいものではありません。8GB の RAM を搭載した単一システム上で、一連の OpenStack プロジェクトのすべてを実行することができます。ただし、真剣な取り組みである場合には、少なくとも 8GB の RAM、2 つの 2TB のディスク、2 つのギガビット・ネットワーク・アダプターを備えた専用のコンピュート・ノードを使用する価値はあります。通常は、コントローラー・ホストを使用して、OpenStack Compute コンポーネントを中央に集めて実行します。その場合、OpenStack Networking サーバーをその同じホスト上で実行することもできますが、別のサーバー上にデプロイすることも同じく可能です。

インストール

インストール手順はディストリビューションによって異なります。さらに具体的に言うと、どのパッケージ管理ユーティリティーを選択するかによって変わってきます。ほとんどの場合に共通して必要となるのは、リポジトリーの宣言です。例えば、Zypper の場合には、zypper ar を使用して libzypp を宣言します。

リスティングを見るにはここをクリック

# zypper ar -f http://download.opensuse.org/repositories/Cloud:/OpenStack:/Grizzly/SLE_11_SP3/Cloud:OpenStack:Grizzly.repo

例として、以下に Ubuntu、Red Hat (Red Had Enterprise Linux、CentOS、Fedora)、および openSUSE の場合に使用する主要なコマンドを記載します。

  • Ubuntu: neutron-server のインストールと、API にアクセスするためのクライアントのインストールを実行するには、以下のコマンドを使用します。
    $sudo apt-get install neutron-server python-neutronclient

    プラグインをインストールするには、以下のコマンドを使用します。

    $sudo apt-get install neutron-plugin-<plugin-name>

    例:

    $sudo apt-get install neutron-plugin-openvswitch-agent
  • Red Hat: Ubuntu と同様に、Neutron サーバーとプラグインの両方をインストールする必要があります。以下は一例です。
    $sudo yum install openstack-neutron
    $sudo yum install openstack-neutron-openvswitch
  • openSUSE: 以下のコマンドを使用します。
    $sudo zypper install openstack-neutron
    $sudo zypper install openstack-neutron-openvswitch-agent

構成

大半のプラグインにはデータベースが必要です。Fedora の OpenStack Networking パッケージに含まれているサーバー・セットアップ・ユーティリティー・スクリプトは、データベースのインストールと構成を完全に行います。

$sudo neutron-server-setup --plugin openvswitch

一方、データベースを手動で構成することも可能です。例えば Ubuntu では、以下のコマンドを使用してデータベースをインストールすることができます。

$sudo apt-get install mysql-server python-mysqldb python-sqlalchemy

すでに他の OpenStack サービス用にデータベースがインストールされている場合は、Neutron データベースを作成するだけで済みます。

$mysql -u <user> -p <pass> -e "create database neutron"

使用するデータベースをプラグインの構成ファイルの中で指定する必要があります。それには、/etc/neutron/plugins/<plugin-name> に置かれているプラグイン構成ファイルを見つけて (例えば、/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini)、そのファイルに接続文字列を設定します。

sql_connection = mysql://<user>:<password>@localhost/neutron?charset=utf8

使用シナリオ

OpenStack Networking の標準的なセットアップは、最大 4 種類の物理ネットワークによって複雑化することがあります。OpenStack コンポーネント間の内部通信には、管理ネットワークが使用され、インスタンス間のデータ通信は、データ・ネットワークで処理されます。すべての OpenStack API は、API ネットワークによってテナントに公開され、VM がインターネットへアクセスできるようにするための外部ネットワークが必要になることも多々あります。

これらの物理ネットワーク上には、テナントが必要とする仮想ネットワークをさまざまな方法で構成することができます。最も単純なシナリオは、単一のフラットなネットワークです。また、複数のフラットなネットワークを構成することや、テナントごとにプライベート・ネットワークを構成すること、あるいはプロバイダーとテナントごとのルーターを組み合わせた構成で、ネットワーク間のトラフィックを管理することもできます。

実際に考えられる OpenStack Networking の使用法を把握するために、単純なシナリオを検討してみましょう。このシナリオでは、テナントが、ネットワークの作成、そのプライベート・ネットワークからのトラフィックを転送するためのルーターの定義、サブネットとネットワークの関連付け、そしてネットワークに関連付けるインスタンスの起動を行います。

  1. メンバー・ロールが割り当てられたユーザーとして、OpenStack Dashboard にログインします。ナビゲーション・ペインで、「Manage Network (ネットワークの管理)」の下に表示されている「Networks (ネットワーク)」をクリックし、表示されたページで「Create Network (ネットワークの作成)」をクリックします。
    図 1. 「Networks (ネットワーク)」ウィンドウにアクセスする
    「Networks (ネットワーク)」ウィンドウでのネットワークの作成方法を示す画像

    クリックして大きなイメージを見る

    図 1. 「Networks (ネットワーク)」ウィンドウにアクセスする

    「Networks (ネットワーク)」ウィンドウでのネットワークの作成方法を示す画像
  2. ネットワークの名前と最初のサブネットを入力します。
    図 2. ネットワークを作成する
    「Create Networks (ネットワークの作成)」ウィンドウで、サブネットとしての名前を入力する方法を示す画像

    ここで言う「サブネット」とは、ネットワーク・アドレスの範囲 (例えば、10.2.0.0/16) とデフォルト・ゲートウェイを意味します。

    図 3. サブネットを作成する
    「Create Networks (ネットワークの作成)」ウィンドウでのネットワーク・アドレスの範囲を指定する方法を示す画像
  3. DHCP と DNS を構成することもできます。
    図 4. サブネットの詳細
    「Create Networks (ネットワークの作成)」ウィンドウでの DHCP と DNS の作成方法を示す画像
  4. オプションのステップとして、ルーターを作成するために、「Manage Network (ネットワークの管理)」の下に表示されている「Routers (ルーター)」をクリックし、表示されたページで「Create Router (ルーターの作成)」をクリックします。これで、ルーターのインターフェースに接続して、トラフィックがどのようにフローするかを定義することができます。
    図 5. ルーターの詳細
    ルーターの詳細を示す画像
  5. IP アドレスのポート割り当ては、イメージの起動時に行われます。Nova は、サブネット上にポートを作成するために Neutron にアクセスします。すべての仮想インスタンスが自動的にプライベート IP アドレスを受け取りますが、オプションで、インスタンスにパブリック IP アドレスを割り当てることもできます。それには、OpenStack のフローティング IP アドレスの概念を使用します。
    図 6. フローティング IP の関連付けを管理する
    フローティング IP の関連付けを管理する方法を示す画像
  6. プロジェクトは、アドレス・プール内のフローティング IP アドレスを要求した後はそのアドレスを所有するので、自由にインタンスとの関連付けを解除して、別のインスタンスに関連付けることができます。
    図 7. アクセスとセキュリティー
    「Access & Security (アクセスとセキュリティー)」ウィンドウでのフローティング IP の関連付けの管理に関する画像

まとめ

この短いツアーで、OpenStack がネットワーキング用に提供しているコンポーネントの概要を読者の皆さんが理解できたことを願います。OpenStack は、実際に多くのネットワーキング機能を提供しているわけではないことを頭に入れておいてください。例えば、ルーティング、スイッチング、名前解決は、ベースとなるネットワーク・インフラストラクチャーによって処理されます。OpenStack の役割は、これらのコンポーネントの管理を統括し、コンピュート・ワークロードに関連付けることです。

この手法は、OpenStack がストレージ関連のプロジェクトを始めとする、その大半のプロジェクトで使用している手法と同じです。連載の次回の記事では、そのストレージ関連のプロジェクトについて説明します。

参考文献

学ぶために

  • この連載で OpenStack に関する記事を他にも読んでください。
  • OpenStack のドキュメントを調べてください。
  • Twitter で OpenStack の最新情報を入手してください。
  • IBM のオープン・クラウド・アーキテクチャーについて読んでください。
  • developerWorks の Cloud computing ゾーンを詳しく調べてください。
  • Twitter で developerWorks をフォローしてください。
  • 初心者向けの製品のインストールおよびセットアップから熟練開発者向けの高度な機能に至るまで、さまざまに揃った developerWorks デモを見てください。
  • デモを見ることで、IBM SmarterCloud Application Services を使い始めてください。

製品や技術を入手するために

  • OpenStack をご自分で試してみてください。
  • IBM 製品の評価をご自分に最適な方法で行ってください。評価の方法としては、製品の評価版をダウンロードすることも、オンラインで製品を試してみることもできます。
  • developerWorks Labs: ソフトウェア開発における新たな方向性を試してください。

議論するために

  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者によるブログ、フォーラム、グループ、Wiki を調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=961019
ArticleTitle=OpenStack について学ぶ: ネットワーキング関連コンポーネントの Neutron
publish-date=02062014