OpenStack + OpenContrailで実現するマルチテナントIaaS
のご紹介
Takashi Sogabe(@rev4t)
Internet Initiative Japan., Inc.
あなた、誰?
• Takashi Sogabe (@rev4t)
• IIJという会社でサービスやデバイスの開発をしています
–最近は、新しいサービスを作るためにソフトウェアを検証したり、ネットワーク構築もやっています
–自称フルスタックエンジニアです
何したいの?
• Contrail がオープンソースになりました!
–エンジニアとしては使って試すのが理解への早道
– ソースコードを眺めてニヤニヤしたい
–まずはデモ環境を作って遊んでみよう
OpenContrailって何?
• スケールアウト性の高いIaaSを簡単に構築できるソフトウェア
–いわゆるSDN製品です
• OpenStack, CloudStackと連係して動作する
• コントロールプレイン: BGP又はXMPP
• データプレイン: MPLS over GRE
– MPLS over UDP, VXLANにも対応している模様
情報源
• http://opencontrail.org/
–各種ドキュメントやパッケージが提供されている
• https://github.com/Juniper/contrail-controller
– ソースコードはgithub上に公開されている
• http://juni.pr/17tlcQh
– Juniper有村さんがJ-NETに投稿された、OpenContrailの貴重な日本語情報です
何故MPLS/BGPなの?
• 何といっても、枯れた技術なので安心して使える
– ISP各社が既に IP-VPNサービスとしてMPLSを利用中
–沢山のVPNコネクションを張っても性能が出る
– DC間の接続やハイブリッドクラウドが簡単に出来る
• External routerはL3VPNルータなので、相互接続が簡単に出来る
他に何かできるの?
• Service Chaining
–いわゆるNFV
– Firewallなど、色々な機能をVMに挟み込める
• Network Monitoring
–通信中のセッション情報をWeb画面から閲覧
–必要であれば、Web画面からtcpdumpが出来る
• Remote SPAN(RSPAN)のオーバーレイネットワーク版という感じ
テストに必要な最小構成は?
• PC server 1台
– Juniper推奨は5台以上です
–テスト目的であれば、1台あれば十分です
• ルータ 1台
– MPLS VPNが喋られる物
– Juniper MX や SRXが使えます
– External Router不要であれば無くても大丈夫
デモ環境のサーバ構成
External Router(Gateway Router)
• Contrail System • OpenStack (controller, etc) • OpenStack(nova-compute)
• vRouter
インターネット接続ルータ
192.168.192.0/24
.64
.79
10.0.0.1/24
OpenContrail アーキテクチャ
インストール(1)
• http://juni.pr/1alNn7h – sourceからビルド
• git + repo – セットアップが大変なので、ビルドのみの用途に向いている
• devstack – https://github.com/dsetia/devstack
– Binaryパッケージを使用 • Juniper提供のOSイメージ • rpmパッケージ (CentOS or Fedora) • Juniper.net のアカウントが必要
– Online formから申請すれば、1日程度でアカウントが発行されるとのこと
• 今回のデモでは、OSイメージを使用 – Contrail Install Media for CentOS 90-day EVAL (Release 1.02) – OpenStack Grizzly
インストール(2)
1. OSイメージをダウンロード、PCにインストール
2. setup.sh の実行 – cd /opt/contrail/contrail_packages; ./setup.sh
3. testbedファイルの作成
4. システムのインストール – cd /opt/contrail/utils; fab install_contrail
– (自動的に再起動されます)
– cd /opt/contrail/utils; fab setup_all
– (自動的に再起動されます)
testbedファイル
• cd /opt/contrail/utils/fabfile/testbeds • cp testbed_singlebox_example.py testbed.py • vi testbed.py を編集
ext_routers = *(‘srx1’, ‘192.168.192.79’)+ (external router が無い場合はコメントのままにしておく)
host1 = ‘[email protected]’ host_build = ‘[email protected]’ env.passwords = { host1: ‘<ホストのパスワード>’, host_build: ‘<ホストのパスワード>’, }
インストール(3)
• インストールが成功すれば、Horizon及びContrailのWeb画面にログインできるようになります – Horizon
• http://(ホストのIPアドレス)/
• username: admin
• password: contrail123
– Contrail • http://(ホストのIPアドレス):8080/
• username, password は Horizonと同じ
External Routerの設定(1)
• Interfaceの設定
interfaces { ge-0/0/0 { unit 0 { family inet { address 192.168.192.79/24; } } } ge-0/0/1 { unit 0 { family inet { address 10.0.0.1/24; } } }
External Routerの設定(2)
• L3VPNの設定
routing-options { static { route 0.0.0.0/0 next-hop 192.168.192.5; } route-distinguisher-id 192.168.192.79; autonomous-system 64512; dynamic-tunnels { setup1 { source-address 192.168.192.79; gre; destination-networks { 192.168.192.0/24; } } } }
protocols { bgp { group contrail-controller { type internal; local-address 192.168.192.79; family inet-vpn { unicast; } neighbor 192.168.192.64; } } stp; }
External Routerの設定(3)
• VRFの設定
routing-instances { cusotomer-public { instance-type vrf; interface ge-0/0/1.0; vrf-target target:64512:10000; routing-options { static { route 0.0.0.0/0 next-hop 10.0.0.2; } } } }
External Routerの設定(4)
• SRXを使う場合は forwarding mode を packet basedにする
security { forwarding-options { family { inet6 { mode packet-based; } mpls { mode packet-based; } iso { mode packet-based; } } } }
root> show security flow status Flow forwarding mode: Inet forwarding mode: packet based Inet6 forwarding mode: packet based MPLS forwarding mode: packet based ISO forwarding mode: packet based Flow trace status Flow tracing status: off
Flowベースだと、security zone に dynamic tunnelを追加する方法が無い模様です
OPENCONTRAILを使ったテナントネットワークの構築
ネットワークの設定(1)
• 設定方法は3つ
– OpenContrail Web画面から設定
– OpenStackから設定
• 但し、一部パラメタはneutron(quantum)から設定できない
– OpenContrail REST API
• API server: http://(controller_host):8082/
• 今のところ、ドキュメントが全くありません – Top level のURLを叩けば、使い方は大体分かると思います
テナントネットワーク
vRouter
private 10.254.0.0/24
.253
.254
.254
public 10.255.0.0/24
test-private-1
test-public-1
.253
external network 10.0.0.0/24
.252
test-private-2
10.1.0.253 global 10.1.0.0/24
Floating-ip
.254
vRouter
External router
.252
test-public-2
.1
ネットワークの作成(public)
IPアドレスブロックの作成(public)
Globalネットワークの設定
test-public-1, test-public-2 起動
Ping from test-public-1 to 10.0.0.1
Privateネットワークの作成
test-private-1, test-private-2 起動
Ping from test-private-1 to test-public-1
Policyの作成
Policyの適用
再度 Ping from test-private-1 to test-public-1
Floating-ipの作成、割り当て
Ping from ext-router to test-public-1
root> ping 10.1.0.253 routing-instance cusotomer-public PING 10.1.0.253 (10.1.0.253): 56 data bytes 64 bytes from 10.1.0.253: icmp_seq=0 ttl=62 time=31.423 ms 64 bytes from 10.1.0.253: icmp_seq=1 ttl=62 time=2.510 ms ^C --- 10.1.0.253 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss
External router show route (1)
root> show route inet.0: 5 destinations, 5 routes (4 active, 0 holddown, 1 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[Static/5] 1d 20:49:14 > to 192.168.192.5 via ge-0/0/0.0 10.1.0.1/32 *[Local/0] 1d 20:49:29 Reject 192.168.192.0/24 *[Direct/0] 1d 20:49:14 > via ge-0/0/0.0 192.168.192.79/32 *[Local/0] 1d 20:49:20 Local via ge-0/0/0.0
External router show route (2)
inet.3: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 192.168.192.0/24 *[Tunnel/300] 1d 20:49:46 Tunnel 192.168.192.64/32 *[Tunnel/300] 00:56:35 > via gr-0/0/0.32769
External router show route (3)
cusotomer-public.inet.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[Static/5] 1d 20:49:14 > to 10.0.0.2 via ge-0/0/1.0 10.0.0.0/24 *[Direct/0] 1d 20:49:14 > via ge-0/0/1.0 10.0.0.1/32 *[Local/0] 1d 20:49:19 Local via ge-0/0/1.0 10.1.0.253/32 *[BGP/170] 00:07:40, localpref 100, from 192.168.192.64 AS path: ? > via gr-0/0/0.32769, Push 16
External router show route (4)
mpls.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 299792 *[VPN/170] 02:02:08 > to 10.0.0.2 via ge-0/0/1.0, Pop bgp.l3vpn.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 192.168.192.64:2:10.1.0.253/32 *[BGP/170] 00:07:40, localpref 100, from 192.168.192.64 AS path: ? > via gr-0/0/0.32769, Push 16
Network管理(1)
Network管理(2)
Network管理(3)
Flowの情報をリアルタイムに把握できる
Network管理(4)
Routing Table の情報を確認
Analyzerを使う(1)
• L3SWのRemote SPAN(RSPAN)機能を便利にしたようなもの
–パケットを捕捉したいネットワークとパケットの種類を指定 • Analyzerインスタンスが自動的に起動する
• 管理者は、OpenStackの管理画面上からWiresharkを操作することでパケットダンプを閲覧できる
– Compute Nodeにログインしてtapインタフェースを直接tcpdumpすることもできるけれど、Analyzerの方がずっと便利
Analyzerを使う(2)
Analyzerを使う(3)
まとめ
• とても使いやすい管理画面 – オーバレイ上の通信を把握できる
• スケールアウトが期待できそうなアーキテクチャ – オーバーレイ上の通信は各ノードが自律的に行なうため、コントローラの仕事が少ない
– Cassandraを用いたスケールアウト性能の高いバックエンドデータベース
– External router はL3VPNルータを沢山接続することでアップリンクを増強できる • VXLANも使えるらしいけれど、管理画面からはまだ設定できない模様
今後調べたいこと
• Service Chaining
• ノード数を増やしてスケールアウト性能を測定
• VXLANで external router を終端
• Havana対応版を使ってみたい