はじめに
業務に邁進する中でネットワークの知見が足りていないことに気づき、ネットワークの基礎固めに精進することにしました。最終的にはDockerおよびKubernetesで利用されるネットワーク技術を解説できるようになること、を目標とし、シリーズ記事として記載する予定です。
参考にする書籍
Docker・Kubernetesで利用されるネットワーク技術に関する本
ネットワークの基礎を理解するための本
本記事で理解すること
- VLAN、VXLANとは
- DockerとVXLANの関係性
シリーズ(予定)
- (基礎)TCP/IP4階層モデル
- VXLAN(Virtual eXtensible Local Area Network)←今回はこれ
- Network Namespce
- iptables
VLANとは
VXLANの話の前に、そのもととなる技術のVLANについて説明します。
VLAN(Virtual Local Area Network)は、ルータで物理的に分けることなく、仕組みを利用して仮想的にネットワークを分けるための技術です。
以下の図はVLANがない場合のネットワーク分割イメージです。ルータを使って物理的にネットワークを分ける必要があります。
一方でVLANを使うと、例えばポートによって仮想的にネットワークを分けることができます。以下の図では、スイッチのポート1,2,3は192.168.1.0/24のネットワークアドレスを持つネットワークであり、ポート4,5では192.168.2.0/24のネットワークアドレスを持つネットワーク、と分割することができます。
以上の図ではポートによる制御を利用したVLAN(ポートベースVLAN)の概念図を示してますが、ほかにも種類があります。
- タグVLAN
イーサネットフレームに VLAN IDを示すタグと呼ばれる情報を付加するVLAN。スイッチはタグを見てどのネットワークセグメントであるのかを判定し、目的のポートに転送します。 - MACアドレスベースVLAN
MACアドレスをもとにして、ネットワークを振り分ける。MACアドレスとVLANの対応表を参照する。
参考
VXLANとは
さて、次にVXLANの説明に移ります。
VXLAN(Virtual eXtensible Local Area Network)は、VLANの制限を克服した技術です。
VLANの課題
ここでは2つの課題を挙げます。
1つ目:スケール不足
タグVLANでは、そのタグのIDの数が4096個までと制限があり、大規模なクラウド環境では不足します。
2つ目:柔軟性不足
L2の枠組み内でしか動作しないため、異なるデータセンター間の通信には適さない。
VXLANの大きな特徴
L2パケットをL3パケットでカプセル化して、転送する仕組みを持つ
これを通信の流れを交えて説明したいと思います。
VXLANの通信の流れ
- 送信元のホストAがEhternetフレームを送信する。
- L2スイッチが送信されたEthernetフレームを、VTEP(VXLANトンネルエンドポイント)が、UDP/IPパケットにカプセル化する。
- カプセル化されたフレームを次のルータ/L3スイッチに転送する。
- ルータ/L3スイッチは、L3パケットとして送信先に転送する。
- 受信側のVTEPがVXLANヘッダーを解除し、Ehternetフレーム内に記載されている送信先に送る。
- 送信先のホストが解除されたEthernetフレームを受け取る。
VXLANでは、EthernetフレームをUDP/IPパケットでカプセル化するため、元のEthernetフレームの外側に、さらに外部UDP/IPヘッダと外部Ethernetヘッダが付与されます。
なぜVLANの課題を解決できるのか
さて、VXLANはL2パケットをL3パケットでカプセル化することが大きな特徴であることがわかりました。これがVLANの課題を解決しています。
課題:スケール不足 → 多くのセグメントを設定できる
VLANではEthernetフレームにVLAN IDを記しています。このVLANのIDは12ビット(4096個)である、ということが決められています。もし、このビット数を変更する場合にはL2スイッチの仕様そのものを変更する必要があり、世界中のL2ネットワークに大きな影響が出てしまいます。
VXLANの場合は、UDP/IPのペイロード部分にVLAN IDが格納されるため、Ethernetフレームに規格によらず設定できます。VXLANのIDは24bitであり、約1,600万のセグメントを構築できます。
課題:柔軟性不足
→ 離れた複数のL2ネットワーク同士が、共通のL2ネットワークであるかのように通信できる
VXLANでは通信時に外部ヘッダのみが書き換えられるだけで、内部にある送信元のMACアドレスやIPアドレスはそのままになっているため、送信先のホストから見ると、同じセグメントからパケットが送られて来たかのように見えます。つまり、VXLANを利用すれば離れたネットワークセグメントでも、セグメントを合わせることができます。
VXLANとDockerの関連性
さて、VXLANについてお分かり頂けたでしょうか。
この記事の一番の目標は「Docker/Kubernetesのネットワーク技術を説明すること」でした。それでは、このVXLANがDockerの何に活きているのか、を説明します。
IPアドレスを変更せず、L3ネットワークを超えて別のホストに移動できる
通常、L3ネットワークを超えてマシンを移動させると、ネットワークセグメントが変わるため、IPアドレスを変更させる必要性があります。VXLANでは、ネットワークセグメントが離れていようが、同じL2ネットワークとして扱うことができるため、移動前後でIPアドレスの変更は不要となります。これは、Dockerの魅力の一つである「ポータビリティ」にもつながります。
ホストをまたいだコンテナ通信が可能に
先ほどの柔軟性と同じ話がDockerにも活きてきます。異なるホストにあるDockerコンテナ同士が、あたかも同じL2ネットワーク上にあるかのように直接通信できます。
まとめ
本記事では、VXLANを理解するための前提としてVLANの仕組みと課題を整理し、VXLANがそれらをどのように解決しているのかを見てきました。VLANは、物理構成を変えずにネットワークを分割できる便利な技術ですが、
- VLAN ID が 4096 個までというスケールの制限
- L2 ネットワーク内に閉じた仕組みであるという柔軟性の制限
といった課題を抱えています。
VXLANは、Ethernet フレーム(L2)を UDP/IP(L3)でカプセル化することでこれらの課題を解決し、
- 約 1,600 万という大規模なセグメント数
- L3 ネットワークを越えても同一 L2 ネットワークのように振る舞える柔軟性
を実現しています。
そしてこの特性は、Docker や Kubernetes において
- IP アドレスを変更せずにコンテナやワークロードを別ホストへ移動できる
- 異なるホスト上のコンテナ同士が、同一ネットワーク上にあるかのように通信できる
といった「ポータビリティ」や「スケーラビリティ」を支える重要な基盤技術として活用されています。
次はNetwork Namespceについてまとめ、ホスト内のネットワーク分離について、記事を書きます!
その他参考



