Your SlideShare is downloading. ×
OpenContrailのソースコードを探検しよう!
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

OpenContrailのソースコードを探検しよう!

2,619
views

Published on

2014年1月15日にmixiで開催された OpenContrail勉強会の発表資料になります。 …

2014年1月15日にmixiで開催された OpenContrail勉強会の発表資料になります。
みんなでOpenContrailのコードの世界を探検してみましょう!

Published in: Technology

0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,619
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
43
Comments
0
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. OpenContrailのソースコードを 探検しよう! Takashi Sogabe(@rev4t) Internet Initiative Japan., Inc.
  • 2. 自己紹介 • Takashi Sogabe (@rev4t) • IIJで新サービスやデバイスの開発をしていま す http://seil.jp/ http://sacm.jp/
  • 3. OpenContrail情報源 • http://opencontrail.org/getting-started/ – 開発に必要な情報が集結している • https://github.com/Juniper/contrail-vnc – opencontrailをビルドするためのスクリプト – SCons (Pythonベースのビルドツール)でビルドす る • https://github.com/dsetia/devstack – opencontrail対応のdevstack
  • 4. OpenContrail ビルド環境 • Ubuntu12.04LTSサーバ – Ubuntu13.10やFC17でも大丈夫 – devstack を使う場合は、contrail/README を読ん でビルド環境を作る
  • 5. devstackの準備(1) • 必要なパッケージをインストール $ sudo apt-get update; sudo apt-get upgrade $ sudo apt-get install git-core $ sudo apt-get install build-essential pkg-config linux-headers-virtual $ ssh-keygen (sshのkeyをgithubに登録する) $ ssh –T git@github.com (正しく登録できていれば、”You’ve successfully authenticated” と返ってくる) $ git clone https://github.com/dsetia/devstack
  • 6. devstackの準備(2) • localrcを作成する $ cp contrail/localrc-single localrc $ vi localrc localrc (環境に合わせて適宜書き換える) … PHYSICAL_INTERFACE=eth0 SERVICE_HOST=192.168.0.1
  • 7. devstackの準備(3) • ビルドスクリプトの実行 – スクリプトの実行が完了すると、OpenStackと opencontrailのプロセスが起動する $ ./stack.sh $ tail log/stack.log … S2014-01-10 23:53:24 stack.sh completed in 4584 seconds. $ screen –ls There are screens on: 5060.contrail (01/10/14 23:51:03) (Detached) 32518.stack (01/10/14 23:50:29) (Detached) 2 Sockets in /var/run/screen/S-userx.
  • 8. ソースコード一覧(1) • /opt/stack/contrail/ – controller/ • opencontrail controller ソースコード – vrouter/ • vrouter ソースコード – third_party/ • 3rd party のソースコード – build/ • devstack ビルドディレクトリ
  • 9. ソースコード一覧(2) • /opt/stack/neutron/ – plugins/juniper/ • Neutron opencontrail plugin • 2014年1月現在、本家には取り込まれていない • https://github.com/dsetia/neutron.git
  • 10. OpenContrail アーキテクチャ
  • 11. コンポーネント一覧(1) • Configuration node – 抽象化された設定情報(high-level data model)を 保持 – 各ネットワーク機器向けの low-level data model への変換(compile) – 分散Database • Cassandra をNoSQLとして利用
  • 12. コンポーネント一覧(2) • Control node – Control plane を担う – XMPP(又は BGP + netconf)をプロトコルに用いる • Analytics node – 統計情報やログ、エラー等を収集して解析する • Compute node – 仮想マシンのホスト – vRouterが組み込まれる
  • 13. Control Plane REST-API Analytics node Analytics node Configuration node Configuration node IF-MAP Control node iBGP Control node BGP,Netconf XMPP Compute node Gateway node Service node
  • 14. Compute Node (vRouter)
  • 15. vRouter agent • contrail/controller/src/vnsw – 全てC++で書かれている (vnswad daemon) – 設定ファイル: /etc/contrail/agent.conf • XMPPを用いて Controller node から制御情報を交換 する • Low level configuration を XMPPを用いてController nodeから受け取る • Analytics情報を Analytics node に送信する • Forwarding情報の登録 • Forwarding Policy の適用 • DHCP/ARP/DNS/MDNS Proxy
  • 16. vRouter Forwarding Plane
  • 17. vRouter(Linux kernel) • Linux Kernel Module – contrail/vrouter • Overlay Protocol の Encap/Decap – MPLS over GRE – MPLS over UDP – VXLAN • MPLSパケットの処理 – VNIに従い、適切なRouting Instanceに振り分け – パケットの lookup及び転送処理 – Flow table に載っていないパケット(一発目のパケット)に ついては vRouter Agent に問い合わせて flow tableを追 加する
  • 18. Control Node
  • 19. REST-API • controller/src/config/api-server – Python Package • vnc-cfg-api-server • vnc-api (client library) – default port: 8082 (/etc/contrail/api_server.conf) • REST-API – curl http://localhost:8082/ | json_pp | more
  • 20. control-node • controller/src/control-node/ – Python Package: Control-Node – 心臓部は C++ で書かれている (control-node daemon) • • • • IF-MAPプロトコル経由でconfig node から設定情報を受信 他の control node との iBGPピアリング(East-West) vRouter agent とのXMPPによる経路交換 特定の種類のトラフィックについては control-nodeが proxy の役目を担う • gateway node との経路交換(bgp + netconf) – netconfによるコンフィグ設定は、現時点ではコードパスを通ら ない模様 (method自体は存在している)
  • 21. Configuration Node
  • 22. DB / MQ • Cassandra – 永続的なデータの保存に用いる • Redis – Message Bus (Message Queue)として用いる
  • 23. generateDS • XML Schema -> 言語バインディング自動生成 ツール – C++, Python, Java に対応 – REST APIのモデル毎のコードも自動生成される – https://github.com/juniper/contrail-generateDS – config/api-server/SConscript • src/schema 以下の xml schema ファイルから各言語向 けのinterfaceを自動生成 • 例) build/debug/config/apiserver/vnc_config_api_server/gen/*.py
  • 24. Schema Transformer • controller/src/config/schema-transformer – Python package: schema-transformer – high level data model の変更がmessage bus から 通知されると、該当する low level data modelに変 換する • 現在対応している low level data model は BGP
  • 25. Neutron plugin • opencontrail REST-APIを用いてネットワーク設 定を行なう – 設定ファイル: /etc/neutron/plugins/juniper/contrail/ContrailPlu gin.ini – neutron/plugins/juniper/contrail/ctdb/ • config_db.py • vnc-api(Python版 contrail API client)の使い方を学ぶの にお勧め
  • 26. zookeeper • Configuration Node – Service discovery • vRouter agentは何処のControl node(active-active pair) に問い合わせると良いか – Subnet allocate/create/free • 厳密なロックが必要なため?
  • 27. 分かったこと • 各モジュールの独立性が高い – 拡張、修正が比較的容易にできる – Northbound API (REST-API)だけで全ての制御が可能 – OpenStack以外に独自の Orchestration Layer を持っている事業 者でもOpenContrailを使える • スケールアウト性の高い設計 – Database • Cassandraを用いた分散DB • 一部 zookeeper を用いている – Messaging • Redisを用いた Message Bus – Forwarding • vRouterを用いた分散Forwarding • Forwardingについては kernel moduleでの実装により高速化を実現

×