17. Open Cloud Campus17
完全分散エッジ処理で実現するNeutron仮想ネットワーク
OpenFlowによる仮想ネットワークエミュレーション
OpenFlowコントローラに仮想ネットワークの構成情報を持たせておき、仮想マシンから送
信されたパケットの行き先をコントローラで計算して、パケットの到達先を決定します。
– 仮想マシンからパケットを受け取ったOpen vSwitchは、コントローラの計算結果に基づいて、パ
ケットの内容を変更した後に、最終到達先のOpen vSwitchにパケットを転送します。
– 物理的なパケット転送はワンホップで済むので、問題判別はシンプルになります。(コントロー
ラーの計算にミスがない限り、ワンホップのパケット転送を追いかけるだけ。)
ただし、単純に実装するとコントローラーの計算量が膨大になり、スケーラビリティに問
題が発生します。(コンピュートノードが増えると計算量はリニアに増加)
Open vSwitch
VM VM
Open vSwitch
VM VM
外部ネットワーク
普通のローカル
ネットワーク網
仮想ネットワーク
の論理構成
OpenFlow
コントローラー
パケットの
処理方法を指示
18. Open Cloud Campus18
完全分散エッジ処理で実現するNeutron仮想ネットワーク
MidoNetの完全分散アーキテクチャーによるアプローチ
MidoNetは、パケット転送先の計算をコンピュートノード上のエージェントが行うことで、
コントローラーがボトルネックになることを回避します。
– 各エージェントは、自分が稼働するコンピュートノードだけを担当します。
– 計算結果はカーネル内部のフローテーブルに記録します。
Open vSwitch
VM VM
Open vSwitch
VM VM
OpenFlowコントローラー
構成データベース
Kernel Flowtable
VM VM
OpenFlowプロトコル
MidoNet Agent
Kernel Flowtable
VM VM
MidoNet Agent
データ参照
OpenFlowによる実装 MidoNetの実装
26. Open Cloud Campus26
完全分散エッジ処理で実現するNeutron仮想ネットワーク
GREトンネルについて
GREトンネルは、物理ネットワーク上にパケットを送出する際に、「GREヘッダー」でパ
ケットをカプセル化する仕組みです。
– 「トンネル」と言っていますが、VPNのように固定的なトンネルのセッションが張られているわけ
ではありません。
– GREヘッダー付きのパケットを受け取るように設定されたサーバーに対しては、いつでも自由に
GREパケットを送信することができます。
VM
10.0.0.19
192.168.30.7 192.168.30.8
VM
10.0.1.3
From 192.168.30.7
To 192.168.30.8
From 10.0.0.19
To 10.0.1.3
送信データ
From 10.0.0.19
To 10.0.1.3
送信データ
27. Open Cloud Campus27
完全分散エッジ処理で実現するNeutron仮想ネットワーク
# ovs-vsctl show
911ff1ca-590a-4efd-a066-568fbac8c6fb
[... Bridge br-int omitted ...]
Bridge br-tun
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
Port br-tun
Interface br-tun
type: internal
Port "gre-2"
Interface "gre-2"
type: gre
options: {in_key=flow, local_ip="192.168.1.100", out_key=flow, remote_ip="192.168.1.101"}
Port "gre-1"
Interface "gre-1"
type: gre
options: {in_key=flow, local_ip="192.168.1.100", out_key=flow, remote_ip="192.168.1.102"}
OVSプラグインでのGREトンネルの取り扱い
Neutron標準のOVSプラグインでGREトンネルを使用する際は、すべてのサーバー間でフル
メッシュになるように、GREパケット送受信用仮想ポートが用意されます。
– これは、OVSカーネルモジュールの「Port base tunneling」と呼ばれる機能です。
br-tun
gre-1
gre-2
br-tun
gre-1
gre-2
br-tun
gre-1
gre-2
ピア情報の
事前設定が必要
28. Open Cloud Campus28
完全分散エッジ処理で実現するNeutron仮想ネットワーク
# mm-dpctl --show-dp midonet
Datapath name : midonet
Datapath index : 24
Datapath Stats:
Flows :5
Hits :266505
Lost :0
Misses:428442
Port #0 "midonet" Internal Stats{rxPackets=0, txPackets=0, rxBytes=0, txBytes=0, rxErrors=0, txErrors=0, rxDropped=0, txDropped=0}
Port #1 "tngre-overlay" Gre Stats{rxPackets=507262, txPackets=183624, rxBytes=268582386, txBytes=17368575, rxErrors=0, txErrors=0,
rxDropped=0, txDropped=0}
Port #2 "tnvxlan-overlay" VXLan Stats{rxPackets=0, txPackets=0, rxBytes=0, txBytes=0, rxErrors=0, txErrors=0, rxDropped=0,
txDropped=0}
Port #3 "tnvxlan-vtep" VXLan Stats{rxPackets=0, txPackets=0, rxBytes=0, txBytes=0, rxErrors=0, txErrors=0, rxDropped=0, txDropped=0}
Port #5 "tap2223188b-bb" NetDev Stats{rxPackets=644, txPackets=669, rxBytes=76522, txBytes=77884, rxErrors=0, txErrors=0,
rxDropped=0, txDropped=0}
MidoNetでのGREトンネルの取り扱い (1)
MidoNetでは、OVSカーネルモジュールの「Flow base tunneling」機能を利用しており、
ピアを特定しない汎用のトンネルポートから、GREパケットを送信します。
– フローテーブルのアクションで、GREパケット送信先のアドレスを指定して送信します。
– この際、GREヘッダーに「トンネルID」の情報を付与できます。(これはパケットの種類を区別す
る単なるメタ情報で、利用方法はユーザーの自由です。)
midonet
tngre-overlay
tapXX tapYY
VMVM midonet
tngre-overlay
tapXX tapYY
midonet
tngre-overlay
tapXX tapYY
Port #1
Port #5