openflow group table

25
オープンソースによる OpenFlow1.3環境の構築 2013.5.27 @ttsubo 1 - Group Tableの活用事例 -

Upload: toshiki-tsuboi

Post on 25-May-2015

2.934 views

Category:

Technology


2 download

DESCRIPTION

オープンソースによる OpenFlow1.3環境の構築 - Group Tableの活用事例 -

TRANSCRIPT

Page 1: OpenFlow Group Table

オープンソースによるOpenFlow1.3環境の構築

2013.5.27@ttsubo

1

- Group Tableの活用事例 -

Page 2: OpenFlow Group Table

自己紹介

2

・数年前は、通信事業者向けネットワークエンジニアでした。・最近は、データセンタ系ネットワークエンジニアに軸足のシフトを 試みてます。IaaS管理基盤技術として、OpenStack等を勉強中。・さらに「これからの時代、ネットワーク屋も、プログラミング 必要だよね。」という風潮に感化されて、OpenFlowプログラ ミングも勉強中。

Page 3: OpenFlow Group Table

効率的なトラフィックフロー制御を可能とするOpenFlow新技術が規定されているOpenFlow1.3がリリースされてから、1年が経過しました。

でも、その新技術の活用方法などを、OpenFlowコミュニティで共有できる場がありません。OpenFlow新技術が活用されていない状況は、もったいないと感じています。

そこで、OpenFlow新技術の活用事例を、みなさんと共有したくて、OpenFlow1.3環境を構築してみました。 3

動機付け

Page 4: OpenFlow Group Table

4

OpenFlow1.3では、OpenFlow1.0課題克服を念頭にしたプロアクティブベースのフローエントリ機構が強化されております。OpenFlowは、C-Plane/D-Plane分離技術と言われますが、D-Planeの効率化を図るためには、プロアクティブなフローエントリ機構の適用が必須だと思います。(さらに、リアクティブな特性を活用したC-Planeの自動化/自律化も必要ですね)

効率的なトラフィックフロー制御とは

リアクティブベース• OpenFlowスイッチ側での転送処理が完結せず、Packet-In動作によるコントローラへの問い合わせ処理がオーバヘッドとなり、NW全体のパフォーマンスが劣化する(=スケールしない)

• 既存のネットワークとの相互接続時において、NWアドレス学習などC−Plane連携の活用事例が顕在化されつつある(ARP, BGP, OSPF, IGMP...)

プロアクティブベース• OpenFlowスイッチ側での転送処理が完結するため、NW全体のパフォーマンス向上が期待できる

• Multi Table、Group Tableなどの新技術が活用することにより、Flow数の肥大化を抑止することも可能となる

Page 5: OpenFlow Group Table

OpenFlow環境構築にあたって

• オープンソース活用を大前提にTryしてみる!• 最新のOpenFlow1.3で試してみる!• OpenFlowらしい特性を確認してみる!

5

OpenFlow新技術として、Multi Table、Group Table、Meter、Multi Controller...などが挙げられますが、

今回は、OpenFlowプロアクティブなフロー制御を実現する「GroupTable」を中心に、動作確認してみました。

Page 6: OpenFlow Group Table

OpenFlow1.3環境を作ってみました..

6

OFS

HOST-1 HOST-2

HOST-3

オープンソースな最新OpenFlow実装ソフトウェアって、まだまだ少ないですね...

OFC

OpenFlowメッセージ

CPqD/ofsoftswitch13

Ver:1.9

Page 7: OpenFlow Group Table

OpenFlowによる負荷分散/冗長構成

7

ECMP,リンクアグリゲーションなど通信方式による冗長構成(負荷分散,ACT/SBY構成)の構築下において、 NW機器自らによるネットワーク稼働状況に応じた通信経路制御が実施されてきました。

Inport Outport

柔軟な負荷分散/冗長構成制御を実現できるようフロー設定を行う

GroupTable

従来ベースでの負荷分散/冗長構成

OpenFlowベースでの負荷分散/冗長構成OpenFlowでも、柔軟なトラフィックフロー制御によるマルチパス環境構築が可能です。OpenFlowコントローラが、プロアクティブに負荷分散/冗長構成のフロー定義をGroupTableに設定することにより、ネットワーク稼働状況に応じた通信経路制御が可能となります。

Page 8: OpenFlow Group Table

GroupTable活用事例1

8

Multicastな同報通信

Sender

Sender(映像配信サーバ)よりReceiver(ライアントPC)へのMulticastルーティングを構築するモデル。同報通信なパケットコピー制御はOpenFlowのGroupタイプ(All)でトラフィクフローを制御する。

Receiver1(クライアントPC)

Receiver2(クライアントPC)

OpenFlowスイッチがマルチキャストルーティングに従った同報通信の制御を実施する

MulticastRouter

Page 9: OpenFlow Group Table

9

FlowTable

GroupTable

OFC

OpenFlowメッセージ

OFS

Inport

OFC側からプロアクティブなFlowTable/GroupTableを設定することにより、OFSのInportで受信した通信パケットを、複数Outportに同報送信するフロー制御を実現する仕組み 

Outport

Groupタイプ(All)を用いたフロー制御

Output毎にset fieldを用いたパケットヘッダの書き換えが可能!!

Page 10: OpenFlow Group Table

Groupタイプ(All)を活用することにより、Senderから2台のReceiverに対して、Multicastな同報通信が動作可能であることを確認できた。

10

Sender

Receiver1

Receiver2

239.255.0.1

Groupタイプ(All)の動作確認

Page 11: OpenFlow Group Table

GroupTable活用事例2

11

サーバ冗長構成(フェイルオーバ)

クライアントPCサーバ1

サーバ2

192.168.1.1

192.168.1.1

クライアントPCからサーバへのアクセス形態として、サーバ側でフェールオーバな冗長構成を構築するモデル。Act系からSby系への通信経路の振替え処理は、OpenFlowのGroupタイプ(FastFailover)でトラフィクフローを制御する。

OpenFlowスイッチが冗長制御(Act/Sby)を実施する

Failover192.168.0.1

Page 12: OpenFlow Group Table

12

FlowTable

GroupTable

OFC

OpenFlowメッセージ

OFS

InportOutport

Groupタイプ(FastFailover)を用いたフロー制御

Outportのリンク断(administrative down)時に、切り替えを実施する

OFC側からプロアクティブなFlowTable/GroupTableを設定することにより、OFSのInportで受信した通信パケットを、動作可能なOutportに送信するフロー制御を実現する仕組み(OutPortが動作不可能と判断できるよう、故障検出もOFS側で行う) 

Page 13: OpenFlow Group Table

クライアントPC Webサーバ1

Webサーバ2

13

Groupタイプ(FastFailover)の動作確認Webサーバ1向けアクセス通信経路にて故障が発生した場合には、接続先をWebサーバ1からWebサーバ2に振替えることにより、クライアント~Webサーバ間の通信処理が再開可能であることが確認できた。

クライアントPCWebサーバ1

Webサーバ2

Webサーバ1向けアクセスの通信故障

Page 14: OpenFlow Group Table

14

NWロードバランサーによるサーバ負荷分散

クライアントPC

クライアントPCからサーバへのアクセス形態として、複数サーバ配備による負荷分散な環境を構築するモデル。サーバへの負荷分散なアクセス制御は、OpenFlowのGroupタイプ(Select)でトラフィクフローを制御する。

サーバ1

サーバ2LoadBalancer

OpenFlowスイッチが負荷分散制御実施する

192.168.1.1

192.168.1.1

192.168.0.1

GroupTable活用事例3

Page 15: OpenFlow Group Table

15

FlowTable

GroupTable

OFC

OpenFlowメッセージ

OFS

InportOutport

Groupタイプ(Select)を用いたフロー制御

負荷分散の配分比率もパラメータ指定が可能

OFC側からプロアクティブなFlowTable/GroupTableを設定することにより、OFSのInportで受信した通信パケットを、複数Outportに負荷分散的に送信するフロー制御を実現する仕組み(負荷分散は、ラウンドロビン方式) 

Page 16: OpenFlow Group Table

16

クライアントPC サーバ1

サーバ2テキスト

ICMP Echo req

(以下、省略)

2台のサーバでICMPパケットを交互に受信できた。Groupタイプ(Select) の動作確認(ICMPの場合)

ICMP Echo reqICMP Echo replyICMP Echo reply

ICMP Echo reqICMP Echo reply

ICMP Echo reqICMP Echo reply

ICMP Echo reqICMP Echo reply

ICMP Echo req

ICMP Echo reply

ICMP Echo req

ICMP Echo reply

ICMP Echo req

ICMP Echo reply

Page 17: OpenFlow Group Table

17

「OFS側では、クライアントPCからのWeb閲覧のアクセス毎に、サーバ負荷分散が図れるように接続先Webサーバが交互に切り替わってトラフィックフローを制御する」ような動作を想定しておりました。

クライアントPC Webサーバ1

Webサーバ2

Web表示結果が毎回異なる?

Groupタイプ(Select) の動作確認(Webアクセスの場合)

動作確認前の仮説

Page 18: OpenFlow Group Table

18

しかしながら、実際、クライアントPCからWeb閲覧を行うと、「接続がリセットされました」というエラーメッセージが表示されてしまいました。

クライアントPC Webサーバ1

Webサーバ2テキスト

Groupタイプ(Select) の動作確認(Webアクセスの場合)

Page 19: OpenFlow Group Table

OFS側では、 TCPセッション管理を想定せず、単純なラウンドロビンによる負荷分散を実施しているのみであるため、Web閲覧に関わるhttp通信シーケンスが、プロトコル違反と判定されてしまった...

19

クライアントPC Webサーバ1

Webサーバ2テキスト

SYN SYN

SYN/ACKSYN/ACK

ACK ACK

http(get) http(get)

RST RST

(以下、省略)

「接続がリセットされました」の発生原因

Page 20: OpenFlow Group Table

20

OpenFlowといえば、ネットワーク挙動をプログラマブルに記述できるので、従来の通信技術では実現が難しかった柔軟なトラフィックフロー制御が可能となる技術と言われますよね。

さらに、最近のSDN/OpenFlow業界でのWeb/雑誌記事では、「ネットワーク仮想アプライアンス的な技術領域への適用」も期待される旨の文面をよく拝見します。

でも、現在のOpenFlow規格では、TCPセッション管理を踏まえたトラフィックフロー制御まで言及しておりません。よって、NWロードバランサーやDPI(Deep Packet Inspection)のようなネットワーク仮想アプライアンス実現には、OpenFlowでは対応が難しいのではないでしょうか。

OpenFlowの技術課題(私見)

Page 21: OpenFlow Group Table

おわりに...

21

一般に、OpenFlow技術ネタを取り上げたセミナ講演資料/Web記事を最近よく見掛けるようになりました。でも、そこでの記載内容を鵜呑みにしてもよいのでしょうか?(技術コンセプトと実装レベルに乖離があるかもしれません)

そこで、OpenFlow技術の目利き力を養うためにも、自分自身でOpenFlowを動かしてみると、いろいろな発見に遭遇できると思います.....

Page 22: OpenFlow Group Table

22

以下、補足情報

Page 23: OpenFlow Group Table

23

FlowTable

GroupTable

1

2

3OFS

Inport

Outport

{table="0", match="oxm{eth_dst="01:00:5e:7f:00:01", in_port="1", ipv4_dst="239.255.0.1", ipv4_src="192.168.0.1", eth_type="0x800"}", dur_s="334", dur_ns="306000", prio="255", idle_to="0", hard_to="0", cookie="0x0", pkt_cnt="12242", byte_cnt="16624636", insts=[apply{acts=[group{id="1"}]}]}

{type="all", group="1", buckets=[{w="0", wprt="any", wgrp="any", acts=[out{port="2"}, set_field{field:eth_src="00:00:00:00:00:01"}]}, {w="0", wprt="any", wgrp="any", acts=[out{port="3"}, set_field{field:eth_src="00:00:00:00:00:02"}]}]}]}

FlowMod

GroupMod

事前に、OpenFlowコントローラから、OFS側でのMulticastの同報通信に関わるフロー設定を以下のように行った。

Flow/GroupTable(All)の設定サンプル

Page 24: OpenFlow Group Table

24

FlowTable

GroupTable

1

2

3OFS

Inport

Outport

Flow/GroupTable(FastFailover)の設定サンプル

{table="0", match="oxm{eth_dst="00:00:00:00:00:01", in_port="1", ipv4_dst="192.168.1.1", eth_src="52:54:00:2b:f5:78", eth_type="0x800"}", dur_s="57", dur_ns="416000", prio="255", idle_to="0", hard_to="0", cookie="0x0", pkt_cnt="27", byte_cnt="2646", insts=[apply{acts=[set_field{field:eth_src="00:00:00:00:00:02"}, group{id="1"}]}]}

{type="ff", group="1", buckets=[{w="0", wprt="2", wgrp="any", acts=[out{port="2"}, set_field{field:eth_dst="52:54:00:a3:72:0e"}]}, {w="0", wprt="3", wgrp="any", acts=[out{port="3"}, set_field{field:eth_dst="52:54:00:06:96:d8"}]}]}]}

FlowMod

GroupMod

事前に、OpenFlowコントローラから、OFS側でのAct/Sby冗長に関わるフロー設定を以下のように行った。

Page 25: OpenFlow Group Table

25

FlowTable

GroupTable

1

2

3OFS

Inport

Outport

Flow/GroupTable(Select)の設定サンプル

{table="0", match="oxm{eth_dst="00:00:00:00:00:01", in_port="1", ipv4_dst="192.168.1.1", eth_src="52:54:00:2b:f5:78", eth_type="0x800"}", dur_s="35", dur_ns="155000", prio="255", idle_to="0", hard_to="0", cookie="0x0", pkt_cnt="21", byte_cnt="2058", insts=[apply{acts=[set_field{field:eth_src="00:00:00:00:00:02"}, group{id="1"}]}]}

{type="sel", group="1", buckets=[{w="50", wprt="2", wgrp="any", acts=[out{port="2"}, set_field{field:eth_dst="52:54:00:a3:72:0e"}]}, {w="50", wprt="3", wgrp="any", acts=[out{port="3"}, set_field{field:eth_dst="52:54:00:06:96:d8"}]}]}]}

FlowMod

GroupMod

事前に、OpenFlowコントローラから、OFS側でのトラフィック負荷分散処理に関わるフロー設定を以下のように行った。