Linux での仮想ネットワーク構築

NIC、スイッチ、ネットワーク、そしてアプライアンス

プラットフォームの仮想化が爆発的に普及しつつあるなか、当然、エンタープライズ・エコシステムの他の部分の仮想化も進んでいます。最近、仮想化が進んできた領域の 1 つとして挙げられるのは、仮想ネットワーク構築の領域です。プラットフォーム仮想化の初期の実装は仮想 NIC を生み出しましたが、現在はさらに多くのネットワークの構成要素が仮想化されるようになっています。例えば、1 台のサーバーまたは複数のサーバーに分散された VM 間の通信をサポートするスイッチもその 1 つです。この記事では、NIC とスイッチの仮想化に焦点を当て、仮想ネットワーク構築の背後にある概念を探ります。

M. Tim Jones, Independent author

M. Tim JonesM. Tim Jones は組み込みソフトウェアのエンジニアであり、『Artificial Intelligence: A Systems Approach』、『GNU/Linux Application Programming』現在、第 2 版です) や『AI Application Programming』(こちらも現在、第 2 版です)、それに『BSD Sockets Programming from a Multilanguage Perspective』などの著者でもあります。技術的な経歴は静止軌道衛星用のカーネル開発から、組み込みシステム・アーキテクチャーやネットワーク・プロトコル開発まで、広範にわたっています。また、コロラド州ロングモン所在のEmulex Corp. の顧問エンジニアでもあります。



2010年 10月 27日

Tim とつながるには

Tim は developerWorks で人気の高いお馴染みの著者の 1 人です。Tim が書いたすべての developerWorks 記事を閲覧してみてください。また、My developerWorks では、Tim のプロフィールを調べることや、彼やその他の著者、そして他の読者とつながることができます。

コンピューティングは今や再生の時代を迎えています。仮想化は数十年前に生まれたとは言え、その真の可能性は現在、一般的なハードウェアを使用して実現されているところです。仮想化はサーバーの作業負荷を集約して効率化を図ります。けれどもサーバー・エコシステムではサーバーだけでなく、他の要素もさらなる集約の候補として浮上しています。多くの人々は仮想化を CPU、メモリー、ストレージの統合として受け取りますが、それではこのソリューションを単純にとらえ過ぎています。仮想化ではネットワークが重要な 1 つの側面であり、仮想化に不可欠の要素です。

ネットワークの仮想化

まずは問題の概要を説明してから、Linux® でのさまざまなネットワーク仮想化およびそのサポートのさまざまな方法を詳しく掘り下げていくことにします。

従来の環境 (図 1 を参照) では、一連の物理サーバーが必要なアプリケーション一式をホストします。サーバー間の通信を可能にするために、各サーバーには外部ネットワーク・インフラストラクチャーに接続するネットワーク・インターフェース・カード (NIC) が 1 つ以上組み込まれます。NIC とネットワーク・ソフトウェア・スタックによって、ネットワーク・インフラストラクチャーを介したエンドポイント間の通信が可能になります。図 1 に示すように、この機能はスイッチによって表されます。スイッチは接続されているエンドポイント間での効率的なパケット通信を可能にします。

図 1. 従来のネットワーク・インフラストラクチャー
従来のネットワーク・インフラストラクチャー

サーバー統合の背景となっている重要な革新技術が、物理ハードウェアの抽象化です。この革新技術はハイパーバイザー、または仮想マシン (VM) モニターと呼ばれ、複数のオペレーティング・システムとアプリケーションによるハードウェアの共有を可能にします (図 2 を参照)。VM (オペレーティング・システムとアプリケーション一式) は、そのベースにあるハードウェアが一部存在していなかったり、複数の VM と共有されていたりするとしても、そのハードウェアを共有されていない完全なマシンを見なします。これを説明する一例は、仮想 NIC (vNIC) です。ハイパーバイザーは VM ごとに 1 つ以上の vNIC を作成します。これらの NIC は、VM にとっては物理 NIC として映りますが、実際には NIC のインターフェースを表しているに過ぎません。また、ハイパーバイザーでは仮想ネットワークを動的に構成し、VM エンドポイント間の通信を構成できるように仮想化したスイッチを完備することも可能です。さらにハイパーバイザーはサーバーの物理 NIC をハイパーバイザーの論理インフラストラクチャーに接続して物理ネットワーク・インフラストラクチャーと通信できるようにすることで、ハイパーバイザー内での VM 間の通信だけでなく、外部ネットワークとの通信も効率化します。Linux でのハイパーバイザー (このオープンソースのオペレーティング・システムでは充実した分野) についての詳細は、「参考文献」セクションに記載されているリンクの数々にアクセスしてください。

図 2. 仮想化されたネットワーク・インフラストラクチャー
仮想化されたネットワーク・インフラストラクチャー

仮想ネットワーク・インフラストラクチャーは、仮想アプライアンスといった他の興味深い革新技術も実現しています。この記事では仮想ネットワークを構成する要素に加え、仮想ネットワークを探る一環として、これらの仮想アプライアンスについても取り上げます。


仮想スイッチング

仮想ネットワーク・インフラストラクチャーの重要な進歩の 1 つとして挙げられるのは、仮想スイッチの開発です。仮想スイッチは vNIC をサーバーの物理 NIC に接続するだけではありません。さらに重要なことに、vNIC をサーバー内の他の vNIC と結び付けてローカル通信を行えるようにもします。ここで興味深いのは、仮想スイッチ内での制限はネットワークの速度とは一切関係なく、メモリー帯域幅に関係してくることです。メモリー帯域幅が十分にあれば、ローカル VM 間での効率的な通信が可能となり、ネットワーク・インフラストラクチャーのオーバーヘッドが最小限になります。この成果は、サーバー間の通信にだけ物理ネットワークを使用し、VM 間のトラフィックが発生するのはサーバー内にとどめることによってもたらされます。

けれども Linux にはすでにカーネル内にレイヤー 2 スイッチが組み込まれていることから、仮想スイッチがさらに必要になる理由を疑問視する向きもありました。しかし実際には Linux に仮想スイッチが必要となる理由はいくつもあり、その中でも特に重要なのは、仮想スイッチのタイプに関する新しい分類にあります。この新しい仮想スイッチの分類は、分散仮想スイッチと呼ばれます。分散仮想スイッチでは、サーバー・アーキテクチャーを意識する必要がなくなるようにサーバー間をブリッジすることができます。つまり、あるサーバー内の仮想スイッチが別のサーバー内の仮想スイッチと透過的に結合できるということです (図 3 を参照)。これにより、あるサーバー内の仮想スイッチが別のサーバー内にある分散仮想スイッチに接続し、仮想スイッチで接続されたネットワークと透過的に結合できることから、サーバー (およびサーバーの仮想インターフェース) 間での VM のマイグレーションは大幅に単純化されます。

図 3. 分散仮想スイッチ
The distributed virtual switch

分散仮想スイッチの分野で最も重要なプロジェクトの 1 つは、次のセクションで説明する Open vSwitch です。

ローカル・トラフィックをサーバー内に分離することによる問題の 1 つは、トラフィックが外部 (例えば、ネットワーク・アナライザー) に対して可視にならないことです。仮想スイッチの実装では OpenFlow、NetFlow、sFlow などの各種の方式を使ってリモート・アクセスをエクスポートし、トラフィックを制御および監視することで、この問題に対処しています。

Open vSwitch

分散仮想スイッチの初期の実装は閉鎖的で、独自仕様のハイパーバイザーとの連動に限られていました。けれども現在のクラウド環境では、複数のハイパーバイザーが共存可能な異種混合の環境をサポートすることが理想となります。

Open vSwitch は、Apache 2.0 ライセンスの下、オープンソースとして入手できるマルチレイヤー仮想スイッチです。2010年 5月の時点で最新の Open vSwitch バージョン 1.0.1 は、優れた機能の数々をサポートしています。Open vSwitch は KVM (Kernel-based VM)、VirtualBox、Xen、XenServer をはじめとする主要なオープンソース・ハイパーバイザー・ソリューションをサポートします。さらに、現在使用している Linux ブリッジ・モジュールの代わりとして簡単に置き換えられるようになっています。

Open vSwitch を構成するのは、スイッチ・デーモンとその対になるカーネル・モジュールで、このカーネル・モジュールはフロー・ベースのスイッチングを行います。その他にも、スイッチを (特に OpenFlow の観点から) 管理するための各種のデーモンおよびユーティリティーが存在します。Open vSwitch は完全にユーザー空間から実行することができますが、その場合には、パフォーマンスが劣化することになります。

Open vSwitch は、VM 環境に対応した本番製品レベルの品質を持つスイッチとなるだけでなく、他の閉鎖的な独自仕様のソリューションに対抗する素晴らしい機能を提供することも計画されています。


ネットワーク・デバイスの仮想化

NIC ハードウェアの仮想化は、仮想スイッチングが導入されるかなり前から、さまざまな形で存在しています。このセクションでは、その仮想化の実装をいくつか取り上げるとともに、ネットワーク仮想化のパフォーマンス向上のために使用可能なハードウェア・アクセラレーションについても見ていきます。

QEMU

QEMU はプラットフォーム・エミュレーターですが、NIC をはじめ、さまざまなハードウェア・デバイスのソフトウェア・エミュレーションも行います。さらに QEMU 内部には DHCP (Dynamic Host Configuration Protocol) サーバーがあり、このサーバーから IP アドレスが割り当てられます。プラットフォームのエミュレーションと個々のデバイスのエミュレーションを行うために KVM と連動する QEMU は、KVM ベースの仮想化プラットフォームを提供します。QEMU についての詳細は、「参考文献」セクションを参照してください。

virtio

Linux 用の入出力 (I/O) 準仮想化フレームワークである virtio は、VM からハイパーバイザーへの I/O トラフィックを単純化して高速処理します。virtio は、ブロック・デバイス、汎用 PCI (Peripheral Component Interconnect) デバイス、ネットワーク・デバイスなどを仮想化するために、VM とハイパーバイザーとの間の I/O に標準トランスポート・メカニズムを作成します。virtio の構成要素について学ぶには、「参考文献」セクションを参照してください。

TAP および TUN

VM ゲスト・ネットワーク・スタックがホスト・ネットワーク・スタックにアクセスできるようにするため、ネットワーク・スタックには随分前から仮想化が実装されてきました。その仮想化方式には、TAP と TUN の 2 つがあります。TAP は、Ethernet デバイスを実装する仮想カーネル・ドライバーです。したがって、TAP は Ethernet フレーム・レベルで動作します。TAP ドライバーはゲスト Ethernet フレームの通信を行う手段として、Ethernet の「タップ」を提供します。一方の TUN (つまりネットワークの「トンネル」) はネットワーク層のデバイスをシミュレートし、上位レベルの IP パケットで通信します。TUN 方式では Ethernet デバイスが TUN の IP パケットのレイヤー 2 フレーム構成を扱えることから、多少の最適化ももたらします。

I/O 仮想化

I/O 仮想化 (IOV) は、ハードウェア・レベルで仮想化を支援するために PCI-SIG (Special Interest Group) が策定した標準方式です。具体的には、SR-IOV (Single-Root IOV) は単一の PCIe (PCI Express) カードを多数の使用側に対して複数の PCIe カードとして見せるためのインターフェースを公開し、複数の独立したドライバーが他のドライバーとは無関係に、同じ 1 つの PCIe カードに接続できるようにします。SR-IOV はこれを実現するために、使用側に対して仮想機能を拡張します。この仮想機能は、PCIe の物理機能に見える一方、カード内では共有機能として表されます。

SR-IOV がネットワーク仮想化にもたらすメリットは、パフォーマンスです。ハイパーバイザーが物理 NIC の共有を実装するのではなく、カード自体が多重化を実装するため、ゲスト VM から直接カードへ接続することによる I/O のダイレクト・パススルーが可能になります。

現在 Linux に組み込まれている SR-IOV のサポートは、KVM ハイパーバイザーにも役立っています。Xen にも SR-IOV のサポートが組み込まれており、効率的な形で vNIC をゲスト VM に提供できるようになっています。SR-IOV のサポートは、Open vSwitch のロードマップにも記載されています。

仮想 LAN

仮想 LAN (VLAN) はネットワーク・デバイスの仮想化に関係してはいるものの、実際には物理的なネットワーク仮想化手法です。VLAN は、それぞれに独立したネットワーク上にある個々のホストが同じブロードキャスト・ドメインの一部であるかのように、分散ネットワークで仮想ネットワークを作成できるようにします。VLAN がこの仮想ネットワークを実現する手段は、特定の LAN のメンバーであることを識別するための VLAN 情報のタグをフレームに付けることです (IEEE (Institute of Electrical and Electronics Engineers) 802.1Q 標準に準拠)。ホストは VLAN スイッチと共に物理ネットワークを仮想化します。ただし、VLAN は個別のネットワークが複数あるように錯覚させるものの、実際には同じネットワークが共有されることから、使用可能な帯域幅が輻輳による影響を受けます。

ハードウェア・アクセラレーション

NIC や他のデバイスに対応するために、I/O に焦点を絞った仮想化処理の加速機能が続々と登場しています。その 1 つは、信頼性の向上およびセキュリティーの強化を目的に I/O リソースを分離できるようにする Intel® VT-d (Virtualization Technology for Directed I/O) です。VT-d には、DMA (Direct Memory Access) 転送のリマッピング (マルチレベルのページ・テーブルを使用)、デバイスに関連する割り込みのリマッピング、不変ゲストと仮想化対応ゲスト両方のサポートが組み込まれています。Intel VMDq (Virtual Machine Device Queues) も、キューおよびソート機能をハードウェア内に組み込むことによって仮想化環境でネットワーク・トラフィックのフローを加速化させます。その結果、ハイパーバイザーによる CPU 使用率が減少し、システム全体のパフォーマンスが向上します。Linux はこの両方のサポートを組み込んでいます。


ネットワーク仮想アプライアンス

この記事ではこれまで、NIC デバイスとスイッチの仮想化、既存の仮想化の実装例、そしてハードウェアによって仮想化処理を加速する方法などを説明してきました。ここで、仮想化の話題を一般的なネットワーク・サービスにまで広げてみましょう。

仮想化分野での興味深い革新の 1 つは、サーバーの統合から発展したエコシステムです。このエコシステムでは、特別なハードウェアに専用のアプリケーションを作成するのではなく、サーバーの一部を分離して、サーバー内部でサービスを拡張する VM を駆動するために使用します。これらの VM は、特定のアプリケーションに焦点を絞り、仮想化環境を対象に開発されていることから、仮想アプライアンスと呼ばれます。

通常、仮想アプライアンスはハイパーバイザー (またはハイパーバイザーが表現する汎用ネットワーク・インフラストラクチャー) に接続して、特定のサービスを拡張します。この仕組みをユニークなものにしているのは、統合されたサーバーでは、処理能力 (コアなど) と I/O 帯域幅の一部を仮想アプライアンスのために動的に構成できるところです。そのおかげで、(1 台のサーバーが仮想アプライアンスのために分離されることがないため) コスト効果が高くなり、サーバー内で実行されている他のアプリケーションの要求に応じて処理容量を動的に変更することができます。さらに、アプリケーションが (VM 内の) 特定のオペレーティング・システムに関連付けられることから、仮想アプライアンスは管理するのも簡単です。VM はその全体が事前に構成されるため、特殊な構成は必要ありません。これが仮想アプライアンスの大きなメリットであり、現在増加し続けている理由です。

多数のエンタープライズ・アプリケーション用に開発されてきた仮想アプライアンスには、WAN 最適化、ルーター、仮想プライベート・ネットワーク、ファイアウォール、侵入防止/検知システム、E メールの分類と管理など、多くのネットワーク・サービス機能が組み込まれています。ネットワーク・サービス以外でも、仮想アプライアンスはストレージ、セキュリティー、アプリケーション・フレームワーク、そしてコンテンツ管理に使用されています。


まとめ

かつて、管理できるすべてのものは、手で触れることもできる時代がありました。けれども仮想化が進む現在、物理デバイスや物理サービスは遥か彼方に姿を消しています。トラフィックを分離して、地理的に離れたエンティティーで仮想ネットワークを構築できるように、物理ネットワークは仮想化技術によってセグメント化されています。アプリケーションは強力なサーバー内のコア間でセグメント化された仮想アプライアンスに吸収されています。仮想ネットワークは、管理者にとっては複雑さを増やすことになりますが、それはまた、柔軟性を向上させ、管理をしやすくするということでもあります。そしてもちろん、Linux は仮想ネットワークの最前線にあります。

参考文献

学ぶために

  • Linux は素晴らしいオペレーティング・システムであるとともに、仮想化ソリューションのプラットフォームでもあります。Linux と仮想について詳しく学ぶには、「仮想 Linux」(developerWorks、2006年12月) および「Linux ハイパーバイザーの徹底調査」(developerWorks、2009年5月) を読んでください。
  • Linux は virtio と呼ばれる I/O 仮想化フレームワークを実装しています (これは、KVM で使用します)。virtio は、効率的な準仮想化ドライバーを開発するための共通フレームワークとなります。virtio とその構成要素についての詳細は、「virtio: Linux の I/O 仮想化フレームワーク」(developerWorks、2010年1月) を読んでください。
  • SR-IOV は、物理アダプターを仮想化して複数のゲスト VM で使用できるようにする手段を提供します。デバイス・エミュレーションと I/O 仮想化については、「Linux の仮想化と PCI パススルー」(developerWorks、2009年10月) を読んで詳しく学んでください。
  • SR-IOV を使用することにより、複数のオペレーティング・システムが PCIe デバイスを共有できます。SR-IOV についての詳細は、Intel のハードウェア設計サイトで調べてください。PCI-SIG では、各種の IOV 技術の仕様を提供しています。
  • 仮想アプライアンスは、ソフトウェア・アプリケーションを提供するための比較的新しいフォーム・ファクターです。仮想アプライアンスの重要な目標は、複数のハイパーバイザーで仮想アプライアンスを共有できるようにして、最大限の移植性を実現することです。この目標を達成するための一歩が、仮想アプライアンスのメタデータ・フォーマットを定義する OVF (Open Virtualization Format) です。仮想アプライアンスと OVF について詳しく学ぶには、「Virtual appliances and the Open Virtualization Format」(developerWorks、2009年10月) を読んでください。
  • オープンソースのエミュレーター、QEMU は、コンピューター・システム全体をエミュレートできるだけでなく、(エミュレーションによる) 完全な仮想化ソリューションにもなります。QEMU についての詳細は、「QEMU によるシステムのエミュレーション」(developerWorks、2007年9月) で説明しています。
  • IEEE 802.1Q 標準では VLAN タグ付けに関するネットワーク標準を規定し、デバイスの仮想分離を実現するために VLAN の概念を MAC 層で定義しています。
  • developerWorks Linux ゾーンで、Linux 開発者および管理者向けのハウツー記事とチュートリアル、そしてダウンロード、ディスカッション、フォーラムなど、豊富に揃った資料を探してください。
  • さまざまな IBM 製品および IT 業界についての話題に絞った developerWorks の Technical events and webcasts で時代の流れをキャッチしてください。
  • 無料の developerWorks Live! briefing に参加して、IBM 製品およびツール、そして IT 業界の傾向を素早く学んでください。
  • developerWorks の on-demand demos で、初心者向けの製品のインストールおよびセットアップから熟練開発者向けの高度な機能に至るまで、さまざまに揃ったデモを見てください。
  • Twitter で developerWorks をフォローするか、developerWorks で Linux に関するツイートのフィードを購読してください。

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

  • OpenSolaris では、Crossbow プロジェクトの一環として NIC およびスイッチの仮想化を実装しました。Crossbow プロジェクトは仮想化と帯域幅リソースの制御をネットワーク・スタックに取り込むことで、複雑さとオーバーヘッドを最小限にしています。
  • Open vSwitch は、仮想エコシステムに対応する、初のオープンソースのマルチレイヤー・スイッチです。最近リリースされた Open vSwitch のバージョン 1.0 は素晴らしい機能の数々を揃え、多くのオープンソース・ハイパーバイザー (KVM、Xen、XenServer、VirtualBox を含む) をサポートします。
  • Xen Cloud Platform は、Open vSwitch 仮想スイッチ・パッケージがスタックの一部として組み込まれた仮想化インフラストラクチャーです。
  • ご自分に最適な方法で IBM 製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。

議論するために

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

コメント

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=Linux
ArticleID=591067
ArticleTitle=Linux での仮想ネットワーク構築
publish-date=10272010