Transcript
Page 1: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

OpenStack + OpenContrailで実現するマルチテナントIaaS

のご紹介

Takashi Sogabe(@rev4t)

Internet Initiative Japan., Inc.

Page 2: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

あなた、誰?

• Takashi Sogabe (@rev4t)

• IIJという会社でサービスやデバイスの開発をしています

–最近は、新しいサービスを作るためにソフトウェアを検証したり、ネットワーク構築もやっています

–自称フルスタックエンジニアです

Page 3: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

何したいの?

• Contrail がオープンソースになりました!

–エンジニアとしては使って試すのが理解への早道

– ソースコードを眺めてニヤニヤしたい

–まずはデモ環境を作って遊んでみよう

Page 4: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

OpenContrailって何?

• スケールアウト性の高いIaaSを簡単に構築できるソフトウェア

–いわゆるSDN製品です

• OpenStack, CloudStackと連係して動作する

• コントロールプレイン: BGP又はXMPP

• データプレイン: MPLS over GRE

– MPLS over UDP, VXLANにも対応している模様

Page 5: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

情報源

• http://opencontrail.org/

–各種ドキュメントやパッケージが提供されている

• https://github.com/Juniper/contrail-controller

– ソースコードはgithub上に公開されている

• http://juni.pr/17tlcQh

– Juniper有村さんがJ-NETに投稿された、OpenContrailの貴重な日本語情報です

Page 6: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

何故MPLS/BGPなの?

• 何といっても、枯れた技術なので安心して使える

– ISP各社が既に IP-VPNサービスとしてMPLSを利用中

–沢山のVPNコネクションを張っても性能が出る

– DC間の接続やハイブリッドクラウドが簡単に出来る

• External routerはL3VPNルータなので、相互接続が簡単に出来る

Page 7: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

他に何かできるの?

• Service Chaining

–いわゆるNFV

– Firewallなど、色々な機能をVMに挟み込める

• Network Monitoring

–通信中のセッション情報をWeb画面から閲覧

–必要であれば、Web画面からtcpdumpが出来る

• Remote SPAN(RSPAN)のオーバーレイネットワーク版という感じ

Page 8: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

テストに必要な最小構成は?

• PC server 1台

– Juniper推奨は5台以上です

–テスト目的であれば、1台あれば十分です

• ルータ 1台

– MPLS VPNが喋られる物

– Juniper MX や SRXが使えます

– External Router不要であれば無くても大丈夫

Page 9: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

デモ環境のサーバ構成

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

Page 10: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

OpenContrail アーキテクチャ

Page 11: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

インストール(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

Page 12: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

インストール(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

– (自動的に再起動されます)

Page 13: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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: ‘<ホストのパスワード>’, }

Page 14: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

インストール(3)

• インストールが成功すれば、Horizon及びContrailのWeb画面にログインできるようになります – Horizon

• http://(ホストのIPアドレス)/

• username: admin

• password: contrail123

– Contrail • http://(ホストのIPアドレス):8080/

• username, password は Horizonと同じ

Page 15: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
Page 16: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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; } } }

Page 17: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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; }

Page 18: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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; } } } }

Page 19: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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を追加する方法が無い模様です

Page 20: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

OPENCONTRAILを使ったテナントネットワークの構築

Page 21: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

ネットワークの設定(1)

• 設定方法は3つ

– OpenContrail Web画面から設定

– OpenStackから設定

• 但し、一部パラメタはneutron(quantum)から設定できない

– OpenContrail REST API

• API server: http://(controller_host):8082/

• 今のところ、ドキュメントが全くありません – Top level のURLを叩けば、使い方は大体分かると思います

Page 22: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

テナントネットワーク

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

Page 23: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

ネットワークの作成(public)

Page 24: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

IPアドレスブロックの作成(public)

Page 25: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Globalネットワークの設定

Page 26: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

test-public-1, test-public-2 起動

Page 27: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Ping from test-public-1 to 10.0.0.1

Page 28: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Privateネットワークの作成

Page 29: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

test-private-1, test-private-2 起動

Page 30: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Ping from test-private-1 to test-public-1

Page 31: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Policyの作成

Page 32: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Policyの適用

Page 33: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

再度 Ping from test-private-1 to test-public-1

Page 34: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Floating-ipの作成、割り当て

Page 35: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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

Page 36: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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

Page 37: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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

Page 38: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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

Page 39: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

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

Page 40: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Network管理(1)

Page 41: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Network管理(2)

Page 42: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Network管理(3)

Flowの情報をリアルタイムに把握できる

Page 43: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Network管理(4)

Routing Table の情報を確認

Page 44: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Analyzerを使う(1)

• L3SWのRemote SPAN(RSPAN)機能を便利にしたようなもの

–パケットを捕捉したいネットワークとパケットの種類を指定 • Analyzerインスタンスが自動的に起動する

• 管理者は、OpenStackの管理画面上からWiresharkを操作することでパケットダンプを閲覧できる

– Compute Nodeにログインしてtapインタフェースを直接tcpdumpすることもできるけれど、Analyzerの方がずっと便利

Page 45: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Analyzerを使う(2)

Page 46: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

Analyzerを使う(3)

Page 47: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

まとめ

• とても使いやすい管理画面 – オーバレイ上の通信を把握できる

• スケールアウトが期待できそうなアーキテクチャ – オーバーレイ上の通信は各ノードが自律的に行なうため、コントローラの仕事が少ない

– Cassandraを用いたスケールアウト性能の高いバックエンドデータベース

– External router はL3VPNルータを沢山接続することでアップリンクを増強できる • VXLANも使えるらしいけれど、管理画面からはまだ設定できない模様

Page 48: OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介

今後調べたいこと

• Service Chaining

• ノード数を増やしてスケールアウト性能を測定

• VXLANで external router を終端

• Havana対応版を使ってみたい