Open vSwitch おーぷんぶいすいっち
仮想スイッチSDNOpenFlow仮想化KVMデータプレーン
Open vSwitchについて教えて
簡単に言うとこんな感じ!
サーバーの中にソフトウェアで作った「仮想のネットワークスイッチ」だよ!物理的なスイッチ機器を買わなくても、プログラムで自在にネットワークをつなぎ変えられる魔法の道具なんだ。クラウドやデータセンターで仮想マシンをつなぐ縁の下の力持ち的存在ってこと!
Open vSwitchとは
Open vSwitch(OVS) は、サーバー上でソフトウェアとして動く仮想ネットワークスイッチのオープンソースプロジェクトです。物理的なスイッチ機器がLANケーブルでPCをつなぐのと同じ役割を、サーバー内部でプログラムとして実現します。Apache License 2.0で公開されており、商用・非商用を問わず無償で利用できます。
もともとVMwareのような仮想化環境では、仮想マシン(VM)同士や外部ネットワークとのつなぎ方が固定的でした。Open vSwitchはこの「つなぎ方をソフトウェアで柔軟に変えたい」という要求に応えるために生まれました。OpenFlowなどのプロトコルに対応しており、SDN(Software-Defined Networking)コントローラーから集中管理することができます。
今日ではOpenStack・Kubernetes・KVMなど主要なクラウド基盤で広く採用されており、クラウドサービスの裏側でネットワークを支える事実上の標準コンポーネントになっています。
Open vSwitchの仕組みと構造
Open vSwitchは大きく「コントロールプレーン」と「データプレーン」に分かれています。
| コンポーネント | 役割 | たとえ |
|---|---|---|
| ovs-vswitchd | 仮想スイッチのメインプロセス。パケット転送のロジックを処理 | 交差点の交通整理員 |
| ovsdb-server | スイッチの設定情報を管理するデータベースサーバー | 交通整理員の指示書 |
| カーネルモジュール(datapath) | 実際のパケットを高速転送するLinuxカーネル側の処理 | 自動化された高速レーン |
| ovs-vsctl | 管理者が設定を投入するCLIツール | 設定を書き込むペン |
| OpenFlowコントローラー | 外部から転送ルールを集中制御(オプション) | 遠隔指示センター |
パケットが通る流れ
仮想マシンA
│
▼
[カーネルdatapath] ← フローテーブルにヒット → 高速転送
│ ミス(初回)
▼
[ovs-vswitchd] → フロールール検索/生成
│ 必要なら
▼
[OpenFlowコントローラー] → ルールを指示
│
▼
仮想マシンBまたは外部NIC
初回パケットはソフトウェア処理(やや遅い)ですが、2回目以降はカーネル内のフローテーブルにキャッシュされ高速に転送されます。
サポートする主なプロトコル・機能
| 機能 | 概要 |
|---|---|
| VLAN | 仮想マシンごとにネットワークを分離 |
| VXLAN / Geneve / GRE | 異なる物理ホスト間を仮想トンネルで接続 |
| OpenFlow 1.0〜1.5 | SDNコントローラーからの集中制御 |
| LACP / STP | 物理スイッチと同様の冗長化・ループ防止 |
| QoS | 帯域制限・優先制御 |
| ミラーリング / sFlow | トラフィック監視・可視化 |
歴史と背景
- 2007年頃 — Nicira Networks(後にVMwareが買収)が社内プロジェクトとして開発を開始
- 2009年 — オープンソースとしてApache License 2.0で公開
- 2011年 — Linux Foundation傘下のプロジェクトとして採択。OpenStackの主要コンポーネントに採用され一気に普及
- 2012年 — VMwareがNiciraを約12.6億ドルで買収。OVSはオープンソースとして継続
- 2016年 — Linuxカーネル本体(3.3以降)にdatapathが標準マージ済みとなり、追加インストール不要に
- 2018年頃 — KubernetesのCNIプラグイン(OVN-Kubernetes)として採用が拡大
- 現在 — OpenStack Neutron・Red Hat OpenShift・VMware NSXなど主要製品の基盤技術として利用
SDN・仮想化技術との関係
Open vSwitchは単体で動くだけでなく、上位の制御レイヤーや周辺技術と組み合わせて使われます。
Open vSwitch vs 物理スイッチ vs Linux bridge
| 比較項目 | 物理スイッチ | Linux bridge | Open vSwitch |
|---|---|---|---|
| コスト | 高い(ハードウェア) | 無料 | 無料 |
| 転送速度 | 最速(ASICチップ) | 遅め | 高速(カーネルdatapath) |
| SDN対応 | 機種依存 | ✗ | ✅ OpenFlow対応 |
| VXLAN/Geneve | 機種依存 | △ | ✅ |
| テレメトリ(sFlow等) | 機種依存 | ✗ | ✅ |
| 管理の柔軟性 | 低い | 低い | 高い(プログラム制御) |
| 主な用途 | 物理ラック間接続 | 小規模VM環境 | クラウド・大規模仮想化 |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| OpenFlow 1.3(ONF仕様) | SDNコントローラーとスイッチ間の制御プロトコル。OVSが主にサポート |
| RFC 7348 | VXLAN(Virtual eXtensible LAN)のトンネルプロトコル仕様 |
| RFC 8926 | Geneve(Generic Network Virtualization Encapsulation)の仕様 |
| OVSDB(RFC 7047) | OVSの設定データベース管理プロトコル |
| IEEE 802.1Q | VLAN標準。OVSがサポートするタグ付けの基礎仕様 |
関連用語
- SDN(Software-Defined Networking) — ネットワーク全体をソフトウェアで集中制御する考え方
- OpenFlow — SDNコントローラーとスイッチ間の制御プロトコル
- VXLAN — 仮想ネットワークを物理ネットワーク上でトンネリングする技術
- OVN(Open Virtual Network) — Open vSwitchを制御するための上位コントロールプレーン
- OpenStack Neutron — OpenStackのネットワーク管理コンポーネント。OVSと連携
- 仮想マシン(VM) — OVSがネットワーク接続を提供する仮想化環境の実行単位