[フレーム]

やむにやまれず

2006年創業の会社を経営する元プログラマ。現在従業員12名(内7名が欧米人)で元気にお仕事中。今はもうコードは書いてないので、いつか復帰したい。@sparklegate

Wakame Software Foundationでは、Wakame-VDCと言うIaaSの基盤になるソフトウェアを開発していて、ここでも仮想ネットワークについては検討されている。いくつかはもうWakame-VDCの設計にすでに実装済みだ。もう少し検証と試験がしたいので、協力していただける企業様を募集しているところ。そこで、今一度、仮想ネットワークとは何かについてまとめておきたいと思う。

参考資料

最初に一言

私は、かつてネットワークプログラミングを好んでやっていたものの、特にネットワークの研究者ではないので、間違ってる点は指摘していただけますと幸いです。

ここで言う仮想ネットワークの定義と処理の概要

仮想ネットワークとは、物理ネットワークの構成とは無関係に、ユーザが任意にあたかも物理ネットワークを構成できる機能だ。
どのように無関係にするか。ユーザが送出したパケットには仮想ネットワークの中を通るようにアドレス類が書き込まれている。これを物理ネットワークでも通じるように変換し、目的のサーバーへパケットを届ける。受け取った側はパケットを送出時の状態に戻せば良い。大雑把に言えば、Ether Frameに送信先、送信元として書き込まれたアドレス類を、仮想と物理の境界で読み変える技術さえあれば実現できる

パケットは書き換えてしまうと、パケット単体では元の情報に復元しづらい。そのためGREのような、カプセル化の技術を利用するのも良さそうだ。物理ネットワークを通過できる新しいパケットを作り、そのペイロードに元のパケットをそのまま載せる事ができる。実際、この処理のオーバヘッドは小さく、現実的だ。

仮想と物理の境界線をどこに設けるか

仮想ネットワーク上のノードで生成されるパケットは仮想ネットワークでしか流通させられない。当たり前だが、そのまま物理ネットワークに流しても届くわけがない。その為、物理ネットワークへ出て行く前にはパケットは物理ネットワークへの変換を完了していなければならないだろう。そう考えると、ノードの持つOS(Kernel)から出た直後、もしくはその直前に処理をするのが、差し当たって良いポイントになる

最近ではデータセンターのホスティングサービスや、社内のコンピューティングリソースを集約するソフトウェアとして、IaaSの基盤技術を活用する企業が増えている。このソフトウェアは、コンピューティングリソースを管理するために仮想サーバを利用している事が多い。IaaSは仮想と物理の境界に立つソフトウェアだとも言える。このソフトウェアに変換の契機を作ってもらうのが良さそうだ。仮想サーバは仮想ネットワークのパケットを物理ネットワークに向けて送出するのだから、VNICの辺りで直ぐにパケットを処理できる

こうして、エッジノードに配された仮想サーバにできるだけ近い場所で、パケットの変換をする。物理ネットワークを抜けて無事に目的となるエッジノードに到着したら、そのパケットを復元するようにする。エッジノードはIaaSの仕組みが分散管理しているのだから、パケットを正しく変換できるように、それぞれのエッジノードをIaaSにコントロールさせる。
IaaSは、あるユーザが作った自分だけのネットワーク…すなわち仮想ネットワークを定義できるようにし、そのネットワーク上にセットアップされた仮想サーバが、うまくパケット物理ネットワークに流せるようVNICの出口それぞれに仕掛けを施す。この仕掛けが仮想と物理をうまくマッピングし続けられるよう、IaaSはユーザの要求に合わせて自動的に設定を調整していけば良い

ここでのポイントは、このシステムは物理ネットワークの設備に依存しないと言う点だ。物理から独立した形で仮想ネットワークを作れるようになる。仮想マシンもそうだった。物理マシンに依存せず、独立した形で仮想マシンを動作させられる。同じことがネットワークについても起こる。

パケットの変換に使える技術

さて、後は仮想サーバのVNICにてパケットの変換をする技術に言及することにしよう。現時点で我々が利用しているのは、GRE Tunnelだ。先ほど触れたが、パケットのカプセル化が可能であるため、物理ネットワークを通過できるパケットの中に、仮想ネットワークのためのパケットを内包させることができる。
これを用いれば、元のパケットを傷つけること無く物理ネットワークに流せる。 また、サブネットを越えないL2レベルに収まるネットワークであれば、ARPのコントロールをするだけで、スイッチの学習機能を騙す事ができるため、GREに頼らず目的の仮想ネットワークは構築できる。 このようなテクノロジを組み合わせて仮想ネットワークを作る。効果は一様だが、実現には様々な方法が考えられるので、試しながらベストプラクティスを組み立てて行く事になるだろう。

Wakame-VDCと仮想ネットワークの歩み

Wakame-VDCは、v10.11 (2010年11月リリースのバージョンと言う意味でもある)で、セキュリティグループと言うAWSと同等のパケット制御機能を入れた。Wakame-VDCにとって、セキュリティグループの実装方法はプロジェクト開始直後からずっと悩んで来た部分だ。
Eucalyptusがそれをスケールしない形で実現しているのも知っていたし、実装次第ではWakame-VDCでも課題になってしまうため、慎重に設計する必要があった。

そのため、このフェーズであらゆる調査を行った。何社かスイッチベンダーの技術者とも議論したが、彼らもわからない(もしくは、分かっているけど言えなかったのかも知れない)と言う。悩み続けている最中、たまたまAWSのセキュリティホワイトペーパーを読む機会があった。これを見る限りどこか中央集権的にネットワークが処理されているのでは無い。恐らく全てのネットワークがインスタンスを出た直後に分散スイッチのようなものでコントロールされているのではないかと言うヒントを得た。
早速そのアーキテクチャを社内で議論し、行けそうな感覚がつかめたので、直ぐに分散スイッチを設け、そこにファイアウォールを実装してみた。これをセキュリティグループのスタイルで管理できるようにし、v10.11はリリースされた。Wakame-VDCは、おそらくエッジネットワーキングが組み込まれた最初のオープンソースなIaaSだろう。このアーキテクチャはスケーラビリティが非常に高く、物理ネットワークと分離されているため、特殊な機器を用意しなくても良いのが最大の特徴だ。VLANすら必要がない。

ここでエッジノードでのネットワークコントロールの可能性がはっきりした。エッジにインテリジェンスを持たせれば、Fabricに影響無く自由に仮想ネットワークが実現できる。現に、v10.11はVLANを一切使わないため、VLANに対応していない時代の古いスイッチでも機能する。これは非常に大きいアドバンテージである。
米国でコンピュータサイエンスが専門の大学教授にもこの実装をみてもらったが、非常にユニークで面白く、他の類似するクラウド基盤には無いテクノロジだと評価していただいた。

Wakame-VDCは、エッジノードではLinuxを利用していたため、Netfilterを使って、パケットのコントロールを行うようになっている。よくよく考えてみればKernelの仕事は山積みだ。エッジノードでは仮想マシンを動かし、その上今後は仮想ネットワークも押し付けられる。CPUは、より高速かつ超並列に処理できる装置になって行くだろう。しかし、同様にネットワークも10Gbを超え、高速化して行く。CPUのワークロードを減らすには、Kernelの上にある仕事を減らさなければならない。これが課題だった。

また、早いうちから次のようなアイディアもあった。仮想ネットワークと物理ネットワークをハッシュテーブル式のデータベースで管理し、パケットが仮想と物理の境界を越えるタイミングでこのテーブルを使ってパケットの変換を行えば、仮想ネットワークが作れる、と言うもの。
ちょうどOpenFlowを見ていたエンジニアが、そのアイディアとダブらせ、こんな技術があると教えてくれた。よく読んでみるとOpenFlowはNetfilterの代わりになるだけで無く、SwitchとControllerが分離されているためKernelから遠隔の操作を可能にしている。この性質を利用してオフロードできる装置が用意された暁には、そちらに仕事を寄せられるはずだ。

ひとまず興味を持っているエンジニアにセキュリティグループをこれで置き換えられるかどうか実験をお願いした。ネットワークの基本的なアーキテクチャはv10.11から変える必要がない。OpenFlowの使い方が分かったので、そのまま実装して組み込むことにした。こうしてWakame-VDCはOpenFlowでエッジネットワーキングできるようになった。それが2011年12月にリリースしたv11.12になる。

一方でv11.12の着地点を議論しながら、社内ではネットワークの未来像の議論を並行してきた。製品のビジョンも整理し直した。v10.04リリース当初から仮想データセンターを作る事を標榜してWakame-VDCと名付けたはずだ。我々が作りたいのはクラウドではない。仮想データセンターだ。その為、Wakame-VDCの位置付けを表す言葉として、データセンターハイパーバイザーを使う事にした。Wakame-VDCは、仮想化されたデータセンターを動かせるハイパーバイザーである。ハイパーバイザーは、仮想と物理の境界線に立つ。それはサーバだけではなく、ネットワークも同様だ。これがWakame-VDCのあるべき姿なんだと思う。

さて、引き続きどんどん実装して未来へ進みたい。

コメントする

名前
最新記事
人気記事
QRコード
traq

AltStyle によって変換されたページ (->オリジナル) /