27
Brocade SDN Controller -Sample Code for Brocade vRouter-

Brocade SDN Controller -Sample Code for Brocade vRouter-

  • Upload
    brocade

  • View
    424

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Brocade SDN Controller -Sample Code for Brocade vRouter-

Brocade SDN Controller -Sample Code for Brocade vRouter-

Page 2: Brocade SDN Controller -Sample Code for Brocade vRouter-

次世代ネットワーク技術の課題整理

サービス管理のために動的なネットワーク構成変更が重要となる

サービス品目を多様化させたい 固定資産をコスト削減したい

NFV SDN

IAx86技術導入で

機器更新を簡素化 導入メリット

より柔軟なネットワーク構成管理の手法が必要

動的な構成変更 (多頻度)

永続的な資産継承 (コスト削減)

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 2

Page 3: Brocade SDN Controller -Sample Code for Brocade vRouter-

クラウド環境における課題整理

仮想サーバーやルーターなどを統一的に管理する手法が必要となる

ルーター スイッチ

ルーター スイッチ

ルーター スイッチ

ルーター スイッチ

ルーター スイッチ

ユーザー毎に異なる仮想マシン環境 (パブリッククラウド/プライベートクラウドの場合)

いますぐ 変更して!

Virtual Machine (仮想サーバー) Virtual Machine

(仮想サーバー) Virtual Machine (仮想サーバー)

Virtual Machine (仮想サーバー) Virtual Machine

(仮想サーバー) Virtual Machine (仮想サーバー)

Virtual Machine (仮想サーバー) Virtual Machine

(仮想サーバー) Virtual Machine (仮想サーバー)

ユーザー向けのサービス構成とネットワーク構成が一致していない。一元管理できていない、もっと迅速にできないか?...

手作業!?

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 3

Page 4: Brocade SDN Controller -Sample Code for Brocade vRouter-

OpenDaylightを用いた課題解決

既存設備と新規設備をシームレスにつないでいくスキルが必要となる

ネットワーク構成管理プログラム (自社開発)

AAAアプリケーション (Authentication, Authorization, Accounting)

(既存設備)

OpenDaylightベースコントローラー (正常系)

OpenDaylightベースコントローラー (予備系)

Virtual Router (仮想ルーター)

Virtual Router (仮想ルーター)

Virtual Router (仮想ルーター)

Virtual Router (仮想ルーター)

Virtual Router (仮想ルーター)

Virtual Router (仮想ルーター)

ユーザーからのサービス変更通知 (Webサービス経由のトリガー)

NETCONF over SSH

(自社開発) 作業待ちキューを経てプログラムが起動される

REST API over HTTP/HTTPS (YANGモデル)

データセンター事業者が保有する 顧客管理システムおよびアプリケーション

OpenDaylightベースコントローラーで管理される ネットワーク構成管理システム領域

いますぐ 変更して!

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 4

Page 5: Brocade SDN Controller -Sample Code for Brocade vRouter-

Brocade SDN Controllerの導入手順

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 5

Page 6: Brocade SDN Controller -Sample Code for Brocade vRouter-

Brocade SDN Controllerを導入する

必要なソフトウェアパッケージを事前用意しておく

ネットワーク構成管理プログラム (自社開発)

OpenDaylightベースコントローラー (正常系)

Virtual Router (仮想ルーター)

OpenDaylightベースコントローラーで管理される ネットワーク構成管理システム領域

$ tar zvxf ./server-jre-7u80-linux-x64.tar.gz $ sudo mv ./jdk1.7.0_80/ /opt $ export JAVA_HOME=/opt/jdk1.7.0_80/jre/ $ sudo apt-get update $ sudo apt-get install zip unzip openssh-server $ dpkg -l curl $ sudo apt-get update $ sudo apt-get install curl $ curl -sL https://deb.nodesource.com/setup | sudo bash - $ sudo apt-get install nodejs $ sudo mkdir /opt/bvc $ sudo chown $USER /opt/bvc/ $ unzip -o bvc-1.3.0.zip -d /opt $ unzip -o bvc-dependencies-1.3.0.zip -d /opt $ unzip -o bvc-app-vyattaems-packaging-1.2.0.zip -d /opt $ cd /opt/bvc $ ./install Starting NODEJS server .................. [ OK ] Server @ http://100.64.81.81:9000/

Brocade SDN Contoller @ Ubuntu Server 1404 LTS (4 vCPU + 4GB DRAM + 16GB SSD)

NETCONF over SSH

REST API over

HTTP/HTTPS

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 6

Page 7: Brocade SDN Controller -Sample Code for Brocade vRouter-

仮想ルーターにNETCONFを設定する

NETCONF over SSH (port 830)を設定する

ネットワーク構成管理プログラム (自社開発)

OpenDaylightベースコントローラー (正常系)

Virtual Router (仮想ルーター)

NETCONF over SSH

REST API over

HTTP/HTTPS

$ configure # set service netconf # set service ssh port 830 # set service ssh port 22 # commit # save

Brocade vRouter 3.2.1R6 (4 vCPU + 4G DRAM + 16G SSD)

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 7

Page 8: Brocade SDN Controller -Sample Code for Brocade vRouter-

ネットワーク構成管理情報を登録する

ODLコントローラーを経由し仮想ルーターを構成管理する

LinuxにおけるPython環境およびpybvcライブラリー

$ wget https://bootstrap.pypa.io/get-pip.py $ sudo python get-pip.py $ sudo pip install pybvc $ sudo pip install pybvc --upgrade $ cat > mount-vr-100.64.64.64 import pybvc from pybvc.netconfdev.vrouter.vrouter5600 import VRouter5600 from pybvc.controller.controller import Controller ctrl = Controller("100.64.81.81", "8181" , "admin" , "SeCrEt") vrouter = VRouter5600(ctrl, "100.64.64.64", "100.64.64.64", 830, "vyatta", "PaSsWoRd") result = ctrl.add_netconf_node(vrouter) $ python mount-vr-100.64.64.64

ネットワーク管理プログラム(自社開発)を経て OpenDaylightベースコントローラーが

Virtual Router(仮想ルーター)の構成情報を取得管理する

ネットワーク構成管理プログラム (自社開発)

OpenDaylightベースコントローラー (正常系)

Virtual Router (仮想ルーター)

OpenDaylightベースコントローラーで管理される ネットワーク構成管理システム領域

NETCONF over SSH

REST API over

HTTP/HTTPS

100.64.64.64 Port 830

100.64.81.81 Port 8181

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 8

Page 9: Brocade SDN Controller -Sample Code for Brocade vRouter-

ネットワーク構成管理情報を確認する

REST API経由で得られるネットワーク構成管理情報(JSON)を確認する

ネットワーク構成管理プログラム (自社開発)

OpenDaylightベースコントローラー (正常系)

Virtual Router (仮想ルーター) 100.64.64.64

OpenDaylightベースコントローラーで管理される ネットワーク構成管理システム領域

NETCONF over SSH

REST API over

HTTP/HTTPS

100.64.64.64 Port 830

100.64.81.81 Port 8181

$ curl -u admin:SeCrEt http://100.64.81.81:8181/restconf/config /opendaylight-inventory:nodes/node/100.64.64.64 /yang-ext:mount/vyatta-interfaces:interfaces/ | python -mjson.tool

出力結果 (JSON形式) ↓

{ "interfaces": { "vyatta-interfaces-dataplane:dataplane": [ { "address": [ "1.1.1.1/24" ], "tagnode": "dp0p224p1" }, : ] } }

LinuxにおけるPython環境およびpybvcライブラリー

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 9

Page 10: Brocade SDN Controller -Sample Code for Brocade vRouter-

Brocade SDN Controllerの利用実験

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 10

Page 11: Brocade SDN Controller -Sample Code for Brocade vRouter-

FWaaS (Firewall as a Service) サンプルコード

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 11

Page 12: Brocade SDN Controller -Sample Code for Brocade vRouter-

ネットワーク構成管理プログラム (自社開発)

OpenDaylightベースコントローラー (正常系)

Virtual Router (仮想ルーター)

NETCONF over SSH

REST API over HTTP/HTTPS (YANGモデル)

Firewallルール

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 12

Page 13: Brocade SDN Controller -Sample Code for Brocade vRouter-

Firewallルールの作成

$ cat fw-rule-test.py import json, requests data={ "vyatta-security:security": { "vyatta-security-firewall:firewall": { "name": [ { "default-action": "accept", "rule": [ { "action": "drop", "destination": { "port": "135-137" }, "protocol": "udp", "tagnode": 10 } ], "tagnode": "TEST" } ] } } } Mount="/yang-ext:mount/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="admin" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.post(url, data=payload, auth=(username, password), headers=headers) $ python fw-rule-test.py

仮想ルーターへの設定投入項目

Brocade SDN Controllerへの接続手順 ↑

OpenDaylightベースコントローラー

←仮想ルーター ←設定投入するマウント項目

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 13

Page 14: Brocade SDN Controller -Sample Code for Brocade vRouter-

Firewallルールの適用

$ cat fw-if-test.py import json, requests data={ "vyatta-security-firewall:firewall": { "in": [ "TEST" ] } } Mount="/yang-ext:mount/vyatta-interfaces:interfaces/vyatta-interfaces-dataplane:dataplane/dp0p224p1/vyatta-security-firewall:firewall" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) $ python fw-if-test.py

仮想ルーターへの設定投入項目

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 14

Page 15: Brocade SDN Controller -Sample Code for Brocade vRouter-

RaaS (Routing as a Service) サンプルコード

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 15

Page 16: Brocade SDN Controller -Sample Code for Brocade vRouter-

ネットワーク構成管理プログラム (自社開発)

OpenDaylightベースコントローラー (正常系)

Virtual Router (仮想ルーター)

NETCONF over SSH

REST API over HTTP/HTTPS (YANGモデル)

Virtual Private Server

(仮想サーバー)

PBR(Policy Base Routing) ポリシーベースルーティング

DSR(Direct Server Response) ダイレクトサーバーレスポンス

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 16

Page 17: Brocade SDN Controller -Sample Code for Brocade vRouter-

ポリシールーティングのルール作成

import json, requests data={ "policy": { "vyatta-policy-route:route": { "vyatta-policy-pbr:pbr": [ { "rule": [ { "action": "accept", "address-family": "ipv4", "destination": { "address": "1.2.3.4/32" }, "table": 11, "tagnode": 11 } ], "tagnode": "SRC-ROUTE-SLB" } ] } } } Mount="/yang-ext:mount/vyatta-policy:policy/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) $ python pbr-rule-test.py

仮想ルーターへの設定投入項目

Brocade SDN Controllerへの接続手順

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 17

Page 18: Brocade SDN Controller -Sample Code for Brocade vRouter-

PBRルーティングテーブルの作成

import json, requests data={ "protocols": { "vyatta-protocols-static:static": { "table": [ { "route": [ { "next-hop": [ { "tagnode": "192.168.11.33" } ], "tagnode": "0.0.0.0/0" } ], "tagnode": 11 } ] } } } Mount="/yang-ext:mount/vyatta-protocols:protocols/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) $ python pbr-table-test.py

仮想ルーターへの設定投入項目

Brocade SDN Controllerへの接続手順

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 18

Page 19: Brocade SDN Controller -Sample Code for Brocade vRouter-

PBRルールの適用

import json, requests data={ "vyatta-policy-pbr:policy": { "route": [ "SRC-ROUTE-SLB" ] } } Mount="/yang-ext:mount/vyatta-interfaces:interfaces/vyatta-interfaces-dataplane:dataplane/dp0p224p1/vyatta-policy-pbr:policy/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) $ python pbr-if-test.py

仮想ルーターへの設定投入項目

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 19

Page 20: Brocade SDN Controller -Sample Code for Brocade vRouter-

VPNaaS (VPN as a Service) サンプルコード

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 20

Page 21: Brocade SDN Controller -Sample Code for Brocade vRouter-

ネットワーク構成管理プログラム (自社開発)

OpenDaylightベースコントローラー (正常系)

NETCONF over SSH

REST API over HTTP/HTTPS (YANGモデル)

IPSec Tunnel

Virtual Router (仮想ルーター)

Virtual Router (仮想ルーター)

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 21

Page 22: Brocade SDN Controller -Sample Code for Brocade vRouter-

IKE/ESPプロファイルの作成(A)

import json, requests data={ "security": { "vyatta-security-vpn-ipsec:vpn": { "ipsec": { "esp-group": [ { "lifetime": 1800, "proposal": [ { "encryption": "aes256", "tagnode": 1 } ], "tagnode": "ESP" } ], "ike-group": [ { "lifetime": 3600, "proposal": [ { "encryption": "aes256", "tagnode": 1 } ], "tagnode": "IKE" } ] } } } }

Mount="/yang-ext:mount/vyatta-security:security/" vRouter="100.64.99.99" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount …(略)…

仮想ルーターへの設定投入項目

Brocade SDN Controllerへの接続手順 <仮想ルーター(A)の場合>

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 22

Page 23: Brocade SDN Controller -Sample Code for Brocade vRouter-

IKE/ESPプロファイルの作成(B)

import json, requests data={ "security": { "vyatta-security-vpn-ipsec:vpn": { "ipsec": { "esp-group": [ { "lifetime": 1800, "proposal": [ { "encryption": "aes256", "tagnode": 1 } ], "tagnode": "ESP" } ], "ike-group": [ { "lifetime": 3600, "proposal": [ { "encryption": "aes256", "tagnode": 1 } ], "tagnode": "IKE" } ] } } } }

Mount="/yang-ext:mount/vyatta-security:security/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount …(略)…

仮想ルーターへの設定投入項目

Brocade SDN Controllerへの接続手順 <仮想ルーター(B)の場合>

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 23

Page 24: Brocade SDN Controller -Sample Code for Brocade vRouter-

IPsecサイト間VPNルール作成(A)

import json, requests data={ "vyatta-security-vpn-ipsec:site-to-site": { "peer": [ { "authentication": { "pre-shared-secret": "SeCrEt" }, "default-esp-group": "ESP", "ike-group": "IKE", "local-address": "192.168.11.11", "tagnode": "192.168.22.22", "tunnel": [ { "local": { "prefix": "10.1.1.0/24" }, "remote": { "prefix": "10.2.2.0/24" }, "tagnode": 0 } ] } ] } } Mount="/yang-ext:mount/vyatta-security:security/vyatta-security-vpn-ipsec:vpn/ipsec/site-to-site" vRouter="100.64.99.99" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers)

仮想ルーターへの設定投入項目

Brocade SDN Controllerへの接続手順 <仮想ルーター(A)の場合>

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 24

Page 25: Brocade SDN Controller -Sample Code for Brocade vRouter-

IPsecサイト間VPNルール作成(B)

import json, requests data={ "vyatta-security-vpn-ipsec:site-to-site": { "peer": [ { "authentication": { "pre-shared-secret": "SeCrEt" }, "default-esp-group": "ESP", "ike-group": "IKE", "local-address": "192.168.22.22", "tagnode": "192.168.11.11", "tunnel": [ { "local": { "prefix": "10.2.2.0/24" }, "remote": { "prefix": "10.1.1.0/24" }, "tagnode": 0 } ] } ] } } Mount="/yang-ext:mount/vyatta-security:security/vyatta-security-vpn-ipsec:vpn/ipsec/site-to-site" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers)

仮想ルーターへの設定投入項目

Brocade SDN Controllerへの接続手順 <仮想ルーター(B)の場合>

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 25

Page 26: Brocade SDN Controller -Sample Code for Brocade vRouter-

まとめ

サービス管理のために

Brocade SDN Controllerを用いた

動的なネットワーク構成変更が重要となる

©2015 BROCADE COMMUNICATIONS SYSTEMS, INC. 26

Page 27: Brocade SDN Controller -Sample Code for Brocade vRouter-

Thank you!!

本件に関するお問合せ

https://www.brocadejapan.com/form/contact ブロケード コミュニケーションズ システムズ株式会社