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

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

研修コース検索

コラム

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

CTC 教育サービス

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

第64回 いまさら聞けない? VXLANの仕組みとVTEPの役割 (中井悦司) 2015年4月

はじめに

 今回は、Docker環境のオーケストレーションツールである「Kubernetes(クーバーネティス)」の内部構造を紹介する予定でしたが、少しテーマを変えて、VXLANについて解説します。Kubernetesでは、コンテナ通信用の内部ネットワークを構成する際に、FlannelというツールでVXLANによるオーバーレイネットワークを用いるためです。VXLANを知らなくてもFlannelを利用することはできますが、せっかくの機会ですので、まずは、VXLANを基礎から解説しておきましょう。

VXLANの目的

 VXLANの目的は、「L2 over L3」のオーバーレイネットワークを実現することです。つまり、ルーターを介したL3ネットワークの上に、仮想的なL2スイッチで直結されたネットワークを用意します。ここではまず、VXLAN対応の物理スイッチでオーバーレイネットワークを構成する場合を考えます。

 たとえば、図1では、東京、大阪、福岡の3拠点のサーバーがルーターで相互接続されています。通常であれば、各拠点には別々のネットワークアドレスが割り当てられます。しかしながら、それぞれの拠点にはVXLAN対応のスイッチが導入されており、各サーバーは、L2スイッチで直結されたかのように、同一サブネット(この例では「10.1.0.0/16」)のIPアドレスで通信が可能になります。この時、「VXLAN対応スイッチ」は、内部でどのような処理を行っているのでしょうか?

fig01

図1 VXLANによるオーバーレイネットワーク

 VXLANの説明でよく出てくるのが「パケットのカプセリング処理」です(図2)。VXLAN対応スイッチは、ルーター側の接続ポートに各拠点のグローバルIPが割り当てられており、ルーターを介して通信することが可能です。そこで、サーバーから送出されたパケットをグローバルIPのヘッダーをつけたパケットに埋め込んで、VXLAN対応スイッチ間で転送します。対向のVXLAN対応スイッチでヘッダーを取り外して、オリジナルのパケットをサーバーに受け渡せば処理は完了です。ルーターを超えて、オリジナルのパケットを直接に受け渡すことに成功しました。

fig02

図2 VXLANによるパケットのカプセリング処理

 ―― これで話が終われば簡単ですが、実は、この説明には重要な点が抜け落ちています。東京にあるVXLAN対応スイッチから見た場合、転送先の候補は、大阪と福岡の2箇所があります。図2のVXLAN対応スイッチは、正しい転送先は大阪であるとどのようにして判断したのでしょうか?

VTEPが提供する機能

 通常のL2ネットワークであれば、パケットの転送先は、MACアドレスによって判別します。パケットを送出しようとするサーバーは、ARPパケットをブロードキャストして、宛先IPアドレスを持ったサーバーのMACアドレスを取得します。その後、宛先MACアドレスを指定したパケット送出すると、L2スイッチは該当のMACアドレスのNICが接続されたポートにパケットを転送します。

 しかしながら、VXLANの仮想L2ネットワークでは、このような仕組みをそのまま利用することはできません。VXLAN対応スイッチは、何らかの方法でこれと同様の仕組みを実現する必要があります。具体的には、次の2つの処理が必要です(図3)。

fig03

図3 VXLAN対応スイッチの処理内容

 1つ目は、ARP解決です。サーバーからARPパケットが送信されると、これを受け取ったVXLAN対応スイッチは、「何らかの方法」で対応するMACアドレスを見つけ出して、元のサーバーにそれを返答します。すると、元のサーバーは、これを宛先MACアドレスに指定したパケットを送出してきます。2つ目は、このパケットをカプセリングして転送するべき宛先の判別です。「何らかの方法」で、宛先MACアドレスが実際に存在する拠点を見つけ出して、その拠点に向けてカプセリングしたパケットを転送します。

 実際のところ、これらをどのように実現するかは、VXLAN対応スイッチによって異なります。一般にVXLANパケットを送受信する末端のスイッチを「VTEP」と呼びますが、図3に示した「VTEPの機能」こそがVXLANの肝となります。一概に「VXLAN対応スイッチ」と言っても、VTEPとしての機能実装にはいくつかのパターンがあります。ポイントは、VXLAN対応スイッチの間で、その背後にあるサーバーのMACアドレスをどのようにして共有するかということです。Webで検索すると、特定の機器における実装方式を解説した記事なども見つかります(*1)。

次回予告

 そういえば、ここまで、VXLAN対応スイッチの話ばかりでオープンソースが登場しませんでした。現在、LinuxカーネルはVXLANに対応していますので、LinuxサーバーをVXLAN対応スイッチとして利用することも可能です。たとえば、OpenStack NeutronのOpen vSwitch Pluginでは、複数のコンピュートノードで稼働する仮想マシン群を仮想L2スイッチで相互接続するのに、VXLANが利用できます。この場合、各コンピュートノードのホストLinuxがVXLAN対応スイッチの役割を担います。

 Kubernetesで利用するFlannelも同様です。Flannelは、Dockerが稼働するサーバーのLinux上にVTEPの機能を実装しています。Flannelの実装方式については、筆者のBlog記事で詳しく解説しているので参考にしてください(*2)。

 次回は、Kubernetesの内部ネットワークについて、さらに具体的な解説を進めたいと思います。

参考資料

*1Cisco VXLAN Innovations Overcoming IP Multicast Challenges

*2FlannelのVXLANバックエンドの仕組み

 

++ 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