Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,429 views

Published on

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

Published in: Technology
  • Be the first to comment

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

  1. 1. OpenContrailのソースコードを 探検しよう! Takashi Sogabe(@rev4t) Internet Initiative Japan., Inc.
  2. 2. 自己紹介 • Takashi Sogabe (@rev4t) • IIJで新サービスやデバイスの開発をしていま す http://seil.jp/ http://sacm.jp/
  3. 3. OpenContrail情報源 • http://opencontrail.org/getting-started/ – 開発に必要な情報が集結している • https://github.com/Juniper/contrail-vnc – opencontrailをビルドするためのスクリプト – SCons (Pythonベースのビルドツール)でビルドす る • https://github.com/dsetia/devstack – opencontrail対応のdevstack
  4. 4. OpenContrail ビルド環境 • Ubuntu12.04LTSサーバ – Ubuntu13.10やFC17でも大丈夫 – devstack を使う場合は、contrail/README を読ん でビルド環境を作る
  5. 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. 6. devstackの準備(2) • localrcを作成する $ cp contrail/localrc-single localrc $ vi localrc localrc (環境に合わせて適宜書き換える) … PHYSICAL_INTERFACE=eth0 SERVICE_HOST=192.168.0.1
  7. 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. 8. ソースコード一覧(1) • /opt/stack/contrail/ – controller/ • opencontrail controller ソースコード – vrouter/ • vrouter ソースコード – third_party/ • 3rd party のソースコード – build/ • devstack ビルドディレクトリ
  9. 9. ソースコード一覧(2) • /opt/stack/neutron/ – plugins/juniper/ • Neutron opencontrail plugin • 2014年1月現在、本家には取り込まれていない • https://github.com/dsetia/neutron.git
  10. 10. OpenContrail アーキテクチャ
  11. 11. コンポーネント一覧(1) • Configuration node – 抽象化された設定情報(high-level data model)を 保持 – 各ネットワーク機器向けの low-level data model への変換(compile) – 分散Database • Cassandra をNoSQLとして利用
  12. 12. コンポーネント一覧(2) • Control node – Control plane を担う – XMPP(又は BGP + netconf)をプロトコルに用いる • Analytics node – 統計情報やログ、エラー等を収集して解析する • Compute node – 仮想マシンのホスト – vRouterが組み込まれる
  13. 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. 14. Compute Node (vRouter)
  15. 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. 16. vRouter Forwarding Plane
  17. 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. 18. Control Node
  19. 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. 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. 21. Configuration Node
  22. 22. DB / MQ • Cassandra – 永続的なデータの保存に用いる • Redis – Message Bus (Message Queue)として用いる
  23. 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. 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. 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. 26. zookeeper • Configuration Node – Service discovery • vRouter agentは何処のControl node(active-active pair) に問い合わせると良いか – Subnet allocate/create/free • 厳密なロックが必要なため?
  27. 27. 分かったこと • 各モジュールの独立性が高い – 拡張、修正が比較的容易にできる – Northbound API (REST-API)だけで全ての制御が可能 – OpenStack以外に独自の Orchestration Layer を持っている事業 者でもOpenContrailを使える • スケールアウト性の高い設計 – Database • Cassandraを用いた分散DB • 一部 zookeeper を用いている – Messaging • Redisを用いた Message Bus – Forwarding • vRouterを用いた分散Forwarding • Forwardingについては kernel moduleでの実装により高速化を実現

×