OpFlexを用いた グループポリシーによる ネットワーク設定

OpFlexを用いた
グループポリシーによる
ネットワーク設定
2015年6月2日
株式会社富士通研究所
李 忠翰 ([email protected])
中川 幸洋 ([email protected])
Copyright 2015 FUJITSU LABORATORIES LIMITED
アジェンダ
はじめに
GBP/OpFlexの紹介
OpenDaylightのGBP projectの紹介
GBPを用いたネットワーク設定の実行例
OpenDaylightのRendererに新しい機能を
追加してみよう!
1
Copyright 2015 FUJITSU LABORATORIES LIMITED
はじめに
グループポリシー(GBP)をトラフィック制御に用いる
実行例を紹介します
前回はOpenFlowをベースにして仮想スイッチだけを
制御しましたが、今回は、IETFで標準化が進んでい
るOpFlexプロトコルを用いて仮想・物理スイッチを
制御します
MD-SALのアプリを開発する人にとっては参考になる
かと思います
 注)LithiumではAD-SALのアプリがなくなり、MD-SALのみとなります
MD-SAL: Model Driven Service Abstraction Layer
AD-SAL: API Driven Service Abstraction Layer
2
Copyright 2015 FUJITSU LABORATORIES LIMITED
GBP/OpFlexの紹介
3
Copyright 2015 FUJITSU LABORATORIES LIMITED
Group based Policy (GBP)
 Group based Policy(GBP)
 Endpoint(EP)をグループ化し、Endpoint Group(EPG)間の接続性を
記述したPolicyでネットワークを抽象化
 GBPで使用される用語
 Policy rule
Action : EPGのtrafficに対して何かの作業(QoSなど)を実施
Classifier : EPGのtrafficに対してdirection/matchingなどを実施
 Policy(Contract) : Policy ruleの集合 (ODLではRESTconfで記述)
 EPG:web-serverとEPG:web-client間のPolicy例
4
Copyright 2015 FUJITSU LABORATORIES LIMITED
OpenDaylight, GBP, and OpFlex
 ODLに着目したGBPの実装
5
MD-SAL(RESTconf)
MD-SAL(Data Store)
GBP renderer
Framework
(Ofoverlay, opflex)
…
3 rd Party
 OpenFlowはFlowという具体的なものを
制御するが、OpFlexは抽象度が
高いPolicyに基づいて制御する
OpenDaylight
OpFlex
 OpFlexの特徴
Orchestration
OpenFlow
 RESTconf : Northbound protocol
 Data Store : RESTconfからのデータを保存
(Yangで記述)
 Renderer Framework
Ofoverlay, opflex rendererが存在
 OpenFlow, OpFlex, …, 3rd party :
Southbound protocol
Copyright 2015 FUJITSU LABORATORIES LIMITED
OpFlexシステム
 OpFlexシステムアーキテクチャー
 Policy Repository (PR) :ポリシーを一元管理するコンポーネント
 Endpoint Repository (EPR):エンドポイントを格納するコンポーネント
 Observer:システムのモニタリングを行うサブシステム
 Policy Agent:ポリシーを機器に適用するコンポーネント
「Policy Element (PE)とも呼ばれる」
6
Copyright 2015 FUJITSU LABORATORIES LIMITED
GBP projectのRenderer紹介
7
Copyright 2015 FUJITSU LABORATORIES LIMITED
GBP renderers
 GBP rendererの紹介
 基本的には同じ形式のRESTconf messageを使用してユーザとODL間
でやり取りを実施し、Southbound protocol (OVSDB, OpenFlow or
OpFlex)に変換してネットワーク機器の制御を行う
 https://wiki.opendaylight.org/view/Group_Policy:Main
 https://github.com/opendaylight/groupbasedpolicy
 主なGBP rendererの特徴
Name
Target
特徴
ofoverlay
renderer
OpenFlow
&IP-overlay
OpenFlowスイッチ(OVS)とOpenFlow protocolを
利用してやり取りを行い、ODLが直接Renderingを
実施
(ODL Hackfest Tokyo 2014ではOfoverlay
rendererをベースに試作してデモを実施)
https://wiki.opendaylight.org/images/c/c2/GBP_demo_HackFest_20141029_v8.pdf
opFlex
renderer
OpFlex
一般的なネットワーク機器を制御するためのOpFlex
agentとOpFlex protocolを利用してやり取りを行い
実際のRenderingはPolicy agentが実施
8
Copyright 2015 FUJITSU LABORATORIES LIMITED
GBPを用いたネットワーク
設定の実行例
9
Copyright 2015 FUJITSU LABORATORIES LIMITED
データセンターのトラヒックの特徴
 データセンターのトラヒックの分類
 大容量のデータ通信
Elephant : スループットが重要
 細かい制御メッセージやその応答
Mice : 遅延が重要
 データセンターのトラヒックの構成1)
多数のMice(90%)と少数のElephant(10%)で構成
1) The Nature of Data Center traffic: Measurements & Analysis, In IMC, 2009
10
10
Copyright 2015 FUJITSU LABORATORIES LIMITED
前回のデモでは…(ODL hackfest 2014)
 ofoverlay rendererをベースに仮想スイッチを制御するため
にDSCP markingする部分を試作し、事前設定した
物理スイッチと連携してIP-overlay(VXLAN)環境でTarget
flow(Elephantフロー)を優先制御
Background
traffic
Physical Switch
(10 Gbps)
192.168.1.220
Mice flows
Tunnel remote IP
192.168.100.20
35.2
Elephant flow
Ubuntu
14.04
eth7
OVS 2.3
S3
Tunnel remote IP
192.168.100.20
DSCP
Marking (20)
OVS 2.3
S4
35.4
36.2
EG1
EG2
10.0.35.1/24 10.0.36.1/24
EG3
10.0.35.1/24
11
11
Ubuntu
14.04
eth4
DSCP
Marking (20)
36.4
EG4
10.0.36.1/24
* 全てのLink:
10Gbps
Copyright 2015 FUJITSU LABORATORIES LIMITED
デモ概要
ねらい
OpFlexプロトコルを用いて物理・仮想ネットワーク機器を
制御して仮想ネットワーク(VLAN)でTarget flowを優先制御
実現方法
Target flowを優先制御するために、EPGとPolicyを
作成してRESTconfを利用して伝送
Renderingする対象としてVLANによる仮想ネットワーク
Endpoint登録時、VLANを決定
ポリシーに基づいて特定のVLANのCoSを設定するように
仮想スイッチ(OVS)を設定
ポリシーのActionを利用してQoSをHighで設定してCoSに
基づいて物理スイッチでキューを分ける
12
12
Copyright 2015 FUJITSU LABORATORIES LIMITED
ODLを中心にした優先制御の手順
 ODLを中心にした全体の動作手順
1. UserはEPG[VLAN ID]/Policy[優先制御]を登録するために、
RESTconf Message(Northbound)を作成し、ODLに送信
2. ODLのMD-SAL(RESTconf)はMessageを解釈して、Data Storeに保存
3. ODLのOpFlex rendererはData StoreからEPG[VLAN ID]/Policy
[優先制御]の情報を取り出してOpflex messageを作成
4. ODLのOpFlex rendererはOpFlex protocol(Southbound)を利用して
EPGに関連するPolicy agentにPolicy[優先制御]を送信
RESTconf
protocol
User
OpenDaylight
MD-SAL(RESTconf)
MD-SAL(Data Store)
Opflex renderer
OpFlex protocol
13
13
OpFlex
Protocol
Policy
Policy
Policy
agent
agent
Agent
Copyright 2015 FUJITSU LABORATORIES LIMITED
OpFlexを基にしたFlowの優先制御
 優先制御の手順
1. iperf clientのEPG(EPG3)にCoS=2/VLAN(202)を割り当て
EPG3から待ち受けサーバに(iperf server)のEPG(EPG4)にデータを伝送
2. Background trafficとして毎秒ごとに100個のMice flows(756KB)が
待ち受けサーバに伝送され、Target flowに対して輻輳を再現
3. EPG3に対して優先制御のPolicyが設定され、Target flowに対しては
仮想・物理スイッチが連携して輻輳時にキューを分ける優先制御を実施
観測データ可視化
* 全てのLink:
10Gbps
14
14
Copyright 2015 FUJITSU LABORATORIES LIMITED
実際デモ
当日(6/2)
公開予定 !!
15
15
Copyright 2015 FUJITSU LABORATORIES LIMITED
OpenDaylightのRendererに
新しい機能を追加してみよう!
16
16
Copyright 2015 FUJITSU LABORATORIES LIMITED
OpenDaylightに新機能追加
 OpenDaylightを新しい機能を追加するために必要な知識
 YANG
 SAL (AD-SAL/MD-SAL)
 RESTconf
 JAVA
Concurrent programming (Multithreading)
Generic
Object Orient Programming (OOP)
 Maven
17
17
Copyright 2015 FUJITSU LABORATORIES LIMITED
Yang
 Yangって何?
 Data modeling languageの一つで、代表的にNetconfで利用される
 なぜ、Yangが必要か?
 次のODL(Lithium)ではAD-SALが完全になくなり、MD-SALに
移行される予定
 MD-SALで内部のデータ構造がYangで記述されているので、
必ず理解する必要がある
 Yangで記述したものがJAVAのClassやObjectとしてマップされる
 参考文献&資料
 YangのRFC
https://tools.ietf.org/html/rfc6020
18
18
Copyright 2015 FUJITSU LABORATORIES LIMITED
SAL (AD-SAL/MD-SAL)
 Service Abstraction Layer (SAL)って何?
 SALはOSのKernelのようなもの
 AD-SAL/MD-SALの違い
 AD-SAL : Application(Feature)のData modelの構造を個別に設計・
実装する必要があり、RESTAPIのmessageを個別のData storeに保存
 MD-SAL : Data modelをYangで記述して必要なAPIなどをYangtools
が自動生成したりRESTconfのmessageを共通のData storeに保存
RESTAPI (Northbound)
RESTconf (Northbound)
ODL(MD-SAL)
ODL(AD-SAL)
Feature
Feature
Data
Store
Data
Store
Feature
Feature
Data
Store
・共通のDatastoreでDataの管理
・必要なAPIなどの自動生成
・個別のDatastoreでDataの管理
・必要なAPIなどの直接設計・実装
19
19
Copyright 2015 FUJITSU LABORATORIES LIMITED
MD-SAL/RESTconf
 MD-SALの参考資料
 第一回ODLUGでのNEC社の資料「MD-SAL技術紹介」(Shigeru Yasuda)
 https://wiki.opendaylight.org/view/Ping (Ping featureの実装)
 RESTconfって何?
 MD-SALで利用されるNorthboundのProtocolであり,Rest + Netconf
 Endpoint/Policyなどで必要な機能を追加してPUT/POST/DELETE/GET
を利用してODLのData storeを操作
 参考資料
RESTconfのRFC
• https://tools.ietf.org/id/draft-bierman-netconf-restconf-04.txt
ODL APIdoc
• http://your host ip:8181/apidoc/explorer/index.html
>feature:install odl-mdsal-apidocs (ODL[karaf]でAPIdocを有効)
• 使用するRESTconf messageがどのType(PUT/POST/DELETE/GET)をサポートして
いるかを記述
20
20
Copyright 2015 FUJITSU LABORATORIES LIMITED
JAVA – (1)
 なぜJAVA concurrent programmingの知識が必要か?
 ODLはJAVAベースであり、RendererもJAVAで実装
 Rendererの内部実装がMultithreading構造になっていて
複数のThreadが同時に実行されるケースが頻繁に存在
 Callback methodもかなり登場
 実際よく登場するケースと対策
 Methodの最初にObjectがNULLであるかどうかをCheckしてNULLで
あればそのままThreadが終了されるケースが頻繁に存在
→どこで終了されたのかを把握することがとても困難
 最後にThreadが終了された部分を探す時にLogger(Debug mode)を
利用すると割と役に立つ
21
21
Copyright 2015 FUJITSU LABORATORIES LIMITED
JAVA – (2)
 なぜGenericの知識が必要か?
 Yangtoolsで変換されてDataStoreに保存されたObjectの中で
必要なObjectだけを取り出して保存するために必要
 内部実装でGoogleのpackage(com.google.common.collect)も
良く使われるので覚えたほうが良い
 なぜOOPの知識が必要か?
 多くの内部実装がJAVA classの単一継承や複数のInterfaceを利用した
多重継承を普通に使用
22
22
Copyright 2015 FUJITSU LABORATORIES LIMITED
Maven
 Mavenって何?
 作ったアプリケーション(feature)をコンパイルする時に利用されるtool
 なぜMavenの知識が必要か?
 単純にコンパイルだけできれば良いのではないか?
→ NO,コンパイルする際にいろいろoptionがあり、POM.XMLを修正して
作ったfeatureを新たにODL(karaf)上でfeatureとしてDeployするために必要
 覚えておくと役に立つ機能
 -Dmaven.test.skip=true
Unit testをSkip (Skipしたくなければ、test codeを実装すればOK)
 -o
Offline modeで実行
ControllerのCore部分(MD-SALなど)がたまたま変わることもあり、
突然ODL上でちゃんとFeatureをinstallできない状況がある
MavenをOffline modeでTestをskipして実行
23
23
Copyright 2015 FUJITSU LABORATORIES LIMITED
実践編)OpFlex rendererに新機能の追加
 Action(QoS)を追加するための全体的な手順
 Actionは現時点のOSS版では実装されていない(2015/06/01)
① Data Storeのために、Yang(Data model)でActionを追加・修正
② Data Storeの保存されているPolicy objectから必要な部分だけを
取り出すためのMethodの実装
③ Policy agentにActionを渡すためのOpFlex messageを作成する
Methodの実装
④ Mavenを利用してコンパイルして、RESTconf message
(Northbound)を作成してOpFlex message(Southbound)が
降りてくることを確認
User
RESTconf
protocol
OpenDaylight
MD-SAL(RESTconf) ④
MD-SAL(Data Store) ①
Opflex renderer ②③
OpFlex protocol ④
24
24
OpFlex
Protocol
Policy
Policy
Policy
agent
agent
agent
Copyright 2015 FUJITSU LABORATORIES LIMITED
YangでPolicy action部分を修正
 Yang fileを修正
 Policyを修正するために以下のPathにあるYangを修正
groupbasedpolicy/groupbasedpolicy/src/main/yang/model/policy.yang
action-ref(修正あり),action-instance(修正なし)はJAVA classとして
importされてDataStoreからDataを取り出す時に利用される
 Instanceを使えるようにinstance-nameを追加して修正
Action-ref
< After >
< Before >
25
25
Copyright 2015 FUJITSU LABORATORIES LIMITED
DataStoreからObjectを取り出す – (1)
 DataStoreからObjectをParsing
 Policyを修正するために以下のPathにあるYangを修正
groupbasedpolicy/renderers/opflex/src/main/java/org/opendaylight/gr
oupbasedpolicy/renderer/opflex/MessageUtils.java
 まず,actionに関連するJAVA classをimport
これらのClassの実体は存在せず、yangtoolsから自動生成
import
org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.
policy.rev140421.has.action.refs.ActionRef;
import
org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.
policy.rev140421.tenants.tenant.subject.feature.instances.
ActionInstance;
26
26
Copyright 2015 FUJITSU LABORATORIES LIMITED
DataStoreからObjectを取り出す – (2)
 DataStoreからObjectをParsing
 DataStoreのInstanceをparsing部分の実装
 実装するmethod : getRuleMo()
InstanceがActionであるかどうかを確認してAction instanceであれば
JAVA Generic(PolicyObjectInstance poi)に保存
Action
instanceを
処理
27
27
Copyright 2015 FUJITSU LABORATORIES LIMITED
OpFlex 関連部分の実装
 RESTconfのQoS部分をOpFlexに変換
 RESTconfのQoS(high/mid/low)をOpFlexのQoS(2/1/0)に変換
high/mid/lowがこちらの
値としてopflexでマップ
high/mid/lowが
処理される
28
28
Copyright 2015 FUJITSU LABORATORIES LIMITED
Policy登録 (RESTconf)
 OpFlex renderer用のRESTconf message
 Demo(ODL wiki*)のRESTconf(Policy登録部分)のmessageがベースで
あり、今回実装したQoS(Action)を入れるため、以下の部分を追加
“parameter-value” : [
{
“name” : “qos”
“string-value” : “high”
}
]
<ContractでAction-refを追加>
*https://wiki.opendaylight.org/view/ Group_Policy:Building_and_Running
29
29
<Subject-feature-instancesで
action-instanceを追加>
Copyright 2015 FUJITSU LABORATORIES LIMITED
Policyの確認 (OpFlex)
 Policyの中でAction部分を確認してQoS設定値を確認
 Policy resolveを通じてQoS設定部分を確認することが可能
{"subject":"GbpeL24Action","uri":{"value":"/PolicyUniverse/PolicySpace/f5c7d
344-d1c7-4208-0000-2c2693657e12/GbpeL24Action/qoshigh"},"properties":[{"name":"qos","data":2},{"name":"name","data":"qoshigh"}],"parent_subject":"PolicySpace","parent_uri":{"value":"/PolicyUniverse
/PolicySpace/f5c7d344-d1c7-4208-0000-2c2693657e12"}
30
30
Copyright 2015 FUJITSU LABORATORIES LIMITED
まとめ
OpFlexを用いて仮想&物理スイッチを
制御するデモを実施
OpenDaylightに新機能追加するために,
必要な事前知識について説明
実際に、OpenDaylightで機能を追加する時の
方法について説明
31
31
Copyright 2015 FUJITSU LABORATORIES LIMITED
最後に
OpenDaylightのFeature(Application)を
作ることは大変であるが、いろいろ新しい
技術を学ぶことが可能
多くの資料は残念ながら英語であるが、
いろいろ揃っており書いてあることは
だいたい可能
各Projectサイズは膨大であり、Bug tracking
は地獄!!!
意外にLoggerが役に立つかも!?
32
32
Copyright 2015 FUJITSU LABORATORIES LIMITED
33
33
Copyright 2015 FUJITSU LABORATORIES LIMITED