IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第27回 SDNにおける仮想ネットワークの実装方式 (中井悦司) 2013年9月

はじめに

 前回、SDNを利用する目的の1つとして、「テナントごとに独立した仮想ネットワークを構成する」ということを説明しました。ここで言う「仮想ネットワーク」とは、具体的にどのようなものなのでしょうか? 今回は、従来のデータセンタネットワークの構成を振り返りつつ、SDNによる仮想ネットワークの実装方式について整理してみましょう。

データセンタネットワークの構成

 はじめに、物理機器を利用した既存のデータセンタネットワークを簡単に復習しておきます。データセンタ内のネットワーク環境は、ファイアウォール、ルータ、L3スイッチ、L2スイッチなどのネットワーク機器を相互接続した上で、DNSサーバやDHCPサーバなど、ネットワーク関連のサービスを提供するサーバを組み合わせて構成します。
 複数システムでネットワークを共有する場合、システムごとに使用するサブネットを分けておけば、サブネット間の相互通信をL3スイッチのACL(アクセスコントロールリスト)機能で制限することができます。VLAN機能を持つL2/L3スイッチを使用すると、スイッチ内部で論理的に複数のサブネット(VLAN)を用意することができますので、複数システムでスイッチを共有することも可能です。
 さらに、これらの機器を相互接続する上では、それぞれの機器の冗長性とスケーラビリティを確保する必要があります。これは、典型的には、CISCO社が提唱する「階層型ネットワーク設計」に従うことで実現します(図1)(*1)。

fig01

図1 階層型ネットワーク設計のモデル図

 このように、物理ネットワークの世界には、30年以上の年月をかけて確立された確固たるアーキテクチャがあります。「SDNの時代は、サーバエンジニアもネットワークの勉強が必要になる」という話を耳にすることもありますが、ITに関わるエンジニアは誰であれ、物理ネットワークのアーキテクチャは理解しておく必要があるでしょう。これからネットワークの勉強を始めようという方には、(*2)の書籍がお勧めです。
 ちなみに、ネットワークの資格試験というと、CISCO社の「CCNA」が有名ですが、サーバエンジニアの方であれば、ネットワーク設計に特化した「CCDA」の勉強をしてみるのもよいでしょう(*3)。

クラウドにおける仮想ネットワークサービス

 それでは、SDNを利用した「仮想ネットワークサービス」に話を移しましょう。SDN自体がまだ十分に確立した技術ではありませんので、実体に即した説明をするのは難しい部分がありますが、いくつかのSDN製品の説明を見ていると、図1のネットワーク環境をそっくりそのまま仮想環境に用意することを目指しているようです。
 サーバ仮想化では、1台の物理サーバ上にソフトウェア的にエミュレーションされた複数の仮想マシンを用意することができます。物理的には同じサーバで動いているわけですが、それぞれの仮想マシンのユーザは、他の仮想マシンの存在を気にする必要はありません。これと同じように、物理的なネットワーク環境の上に、複数のネットワーク環境をソフトウェア的にエミュレーションしようというわけです。マルチテナントのIaaS環境では、これによってテナントごとに独立したネットワーク環境が提供できるようになります。
 しかしながら、どのようにすれば、図1のような複雑な環境をエミュレーションすることができるのでしょうか? OpenStack/CloudStackなど、既存ソフトウェアおける実装をベースに考えると、大きくは3つの方法がありそうです。

仮想ネットワークの実装方式

 1つは、図1における個々のネットワーク機器を個別にソフトウェアでエミュレーションするやり方です。たとえば、Linuxのネットワーク機能を利用すると、複数のNICを持った仮想マシンをルータとして機能させることができます。テナントごとにルータ用の仮想マシンを用意することで、テナント専用の仮想ルータを提供することができます。CloudStackが標準で提供する仮想ネットワーク環境では、この手法が用いられています。
 また、Vyattaのように仮想マシン上でルータ機能を提供する専用のソフトウェアもあります。Webで公開されているBlogを見ていると、パブリッククラウド上の仮想マシンでVyattaを動かすことで、独自の仮想ネットワークを構成されている方もいるようです。
 2つ目は、物理サーバ上のLinux環境において、複数のルータ機能を同居させる方法です。OpenStackのNeutronが標準提供する「L3エージェント」では、この方法が用いられています。現在のLinuxには「network namespace」と呼ばれる機能があり、これを利用すると、1台のLinuxマシン上に複数の独立したネットワーク設定を持つことができます。Linuxマシンを自宅ルータとして利用した経験のある方も多いと思いますが、network namespaceによって、自宅ルータと同様の機能を複数同時に動かすような感覚です。
 そして最後は、「エッジスイッチで処理する」方式です。個別のネットワーク機器の「仮想化版」を用意するのではなく、図1のようなネットワーク環境があたかも存在するかのようなネットワークパケットの流れを「エッジスイッチ」だけで実現しようというものです。物理サーバ上で仮想マシンを起動する場合、一般に、仮想マシンは、物理サーバ内部の仮想スイッチを経由して外部ネットワークに接続します。「エッジスイッチ」というのは、仮想マシンが接続する仮想スイッチの事を表します。
 図1のネットワーク環境の役割というのは、個々の仮想マシンから見ると(冗長化やスケーラビリティなどの非機能要件を無視すれば)、結局は、どの仮想マシン同士がどのような条件で通信できるかを決定しているにすぎません。途中のルータやスイッチが実施する処理内容をエッジスイッチ上で計算すれば、最終的にそのパケットが到達する先のエッジスイッチを決定することが可能です。そうすれば、エッジスイッチ間で直接にパケットをやりとりするだけで、仮想ネットワーク環境をエミュレートすることができてしまいます。これが、「エッジスイッチで処理する」方式です。
 もちろん、この為には、個々のエッジスイッチに対して、想定される仮想ネットワークの構成情報を与えて、最終的なパケットの到達先を計算できるようにする必要があります。この部分の実装方法には、いくつかの選択肢が考えられます。1つは、仮想ネットワークの構成情報は、専用のコントローラ上で管理して、実際の「計算処理」はコントローラ上のロジックで実施する方法です。コントローラの計算結果をエッジスイッチに伝えて制御するには、前回紹介したOpenFlowを利用することもできるでしょう。
 もう1つは、エッジスイッチ同士がお互いに情報交換しながら、自立分散的に計算処理を進めるやり方です。技術情報の詳細が公開されていないため筆者の想像になりますが、Midokura社が提供するMidonetという製品では、このような手法が用いられているようです。

今後の仮想ネットワークのアーキテクチャ

 ここまで、「図1の環境をソフトウェアでエミュレートする」という観点で仮想ネットワークを捉えてきました。このように複雑なネットワーク環境をエミュレートするのは、実際には大変そうにも感じられます。しかしながら、そもそもなぜ、これほど複雑なネットワーク環境が必要だったのでしょうか? 冒頭で述べたように、物理的なネットワーク環境において、冗長性とスケーラビリティを確保することが1つの理由です。そう考えると、仮想ネットワーク上でこの環境をそっくりそのままエミュレートすることにどれほどの意味があるのか、少し疑問もわいて来ます。
 よくある議論は、「既存の物理ネットワーク上の環境をそのままクラウドに持って行くには、クラウドにも同様のネットワーク環境が必要だ」というものです。いわゆるWeb3層構造のように、ネットワーク上で複数サーバが連携する分散型アプリケーションの多くは、ファイアウォールで分離された階層構造のネットワーク環境が前提になっています。これが無くては、アプリケーションとして必要なセキュリティレベルやスケーラビリティを確保することができなくなります。このようなアプリケーション環境をクラウドに持っていくためには、同じようなネットワーク環境がないと困るだろうというわけです。
 もっともな意見ですが、これは、あくまで過渡的なものとも考えられます。今後、クラウド上での利用を前提としたアプリケーションのアーキテクチャが登場すれば、もっとシンプルな仮想ネットワークを利用しながら、アプリケーションとして必要なセキュリティレベルやスケーラビリティが確保できるようになるかも知れません。世間では、まだ話題になることは多くないようですが、「クラウドにおけるアプリケーションとネットワークのアーキテクチャ」については、今後、さまざまな新しい発展があるものと予想しています。

次回予告

 前回に続いて、SDNの話題を提供させていただきました。ちょうど来週は、「SDN Japan 2013」というイベントが開催されます。筆者もパネルディスカッションに登壇する予定になっていますので、何か面白いネタが手に入ったら、次回のコラムでお届けしたいと思います。

参考資料

*1)「30分間Networking - キャンパスネットワーク・階層モデル
   階層型ネットワークを分かりやすく解説しています。

*2)「[改訂新版] 3分間ネットワーク基礎講座」網野衛二. 技術評論社(2010)
   (*1)と同じ筆者によるネットワークの入門書です。

*3)「シスコ技術者認定公式ガイド CCDA【DESGN】編」Anthony Bruno, Steve Jordan. 翔泳社(2008)

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes