vitochaを用いた jail+vimage webインターフェイス

Post on 03-Jul-2015

581 Views

Category:

Internet

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

中間発表で研究内容を公開してしまったのでこちらにもスライドを公開します。 中間発表ではスライドを15枚に収めましたが完全版は103枚あります。

TRANSCRIPT

Vitochaを用いた Jail+VIMAGE Webインターフェイス

@shutingrz しゅーと

目次• 目的

• 結果

• 前提知識

• 研究紹介

• 開発言語・仕様

• 処理概要

• 画面・機能

• 課題点

目的• 2014年現在までにFreeBSD Jail+Vimageをグラフィカルなネットワーク図でリアルタイム表示しながら操作できるソフトウェアが無い

• FreeNASの機能ではネットワークエミュレータとして不十分(ネットワーク図が無いため)

• Vitochaで作られたプロダクトが無い

結果

• 本研究で、ブラウザからワンクリックで簡単高速に仮想マシンを作成、操作可能なクライアントソフトウェアを作成することができた

前提知識

仮想化• OSレベルでの仮想化ホストコンピュータのOSに依存する

• ユーザ機能タイムシェアリングシステムを用いた仮想化

• chrootリソースを隔離chroot内のプロセスはそこから出られない

• 仮想マシン型主にホストコンピュータのOSに依存しない

• OSをエミュレートする等

chrootを発展させた仮想化

• コンテナ型CPU、メモリ等のデバイスは全てのコンテナで共有プロセス、ネットワーク、ファイルシステム等分離

• LinuxLXC(Docker), OpenVZ, Virtuozzo

• FreeBSDFreeBSD Jail

FreeBSD Jail(qjail)• プロセス分離 ホストからは全てのJailのプロセスが見える

• リソース分離chroot

• qjail3.6 Jailを簡単に扱うためのフレームワーク nullfsを用いてjail外のファイルへアクセス BASEファイルの共有をしディスクリソース節約

ネットワーク仮想化

• Linuxveth

• FreeBSD

• VIMAGE

• Vitocha鈴木常彦教授が開発したVIMAGEライブラリ

VIMAGE

• ネットワークスタック仮想化システム

• epairという仮想ケーブルを用いてJail同士を接続

• 片方はepair[X]a,もう片方はepair[X]b X = 0,1,2…

• FreeBSD VIMAGEフレームワーク

• sh,ifconfig,bridge,vnet,epairのサポートepairはOSのバグがあるが、Vitochaはそれを回避

Vitocha

本研究の紹介

•開発言語・仕様

•処理概要

•画面・機能

開発言語・仕様

• 通信方法WebSocket + JSON

• サーバサイドruby + Jail(qjail) + VIMAGE(Vitocha) + SQLite3 + webshell

• クライアントサイドJavaScript + JQuery2.1 + Bootstrap3 + D3.js

WebSocket

従来のHTTP通信

ブラウザ

①HTTPリクエスト

②HTTPレスポンスサーバ

ブラウザ①プッシュ

サーバ

WebSocket

ブラウザ ①リクエスト サーバ

ブラウザ①プッシュ

サーバ

JSON例1{"name": "John Smith", "age": 33}

“name”,”age” =>キー“John Smith”,33 =>データ

例2{“user": {“name”: ”John Smith”, “age”: 33}}

“user” =>キー{“name”: ”John Smith”, “age”: 33} =>データ

WebShell

①Marc S. Ressl氏の作成したWebShell + ②FreeNASチームの作成したWebShell

①をベースに②のJIDによる並列処理機能をマージ

JQuery

• 軽量なJavascriptライブラリ

• 煩雑な各機能を簡単に触れるようにセレクタ操作、イベント、DOM、CSS操作、etc…

Bootstrap

• 広範囲に渡る機能を備えたデザインテンプレート集

• 本研究にはModal,Tabs,Buttonに使用

D3.js

• Javascriptで動く様々なデータの可視化ライブラリ

• データセットにより様々なレイアウトを使用可能本研究ではForce Layoutを使用

仕様

仕様

• マシン機能qjailを用いてJailを作成する

• パッケージ機能パッケージシステム”pkg”を使用ダウンロード、インストールを行う

• テンプレート機能ダウンロードしたパッケージをひとまとめにする

仕様

• Jailからは直接ホストコンピュータの外にブリッジでパケットを送るようにしない

• 管理用JailとしてmasterRouterを配置し、 ホストコンピュータとmasterRouterの間で NATを行う

• masterRouterはブラウザからは削除出来ない

仕様

• 通常のマシン作成に加えて簡易作成を実装Server,Switch,Routerの3パターン

• 設定は全てデフォルト

本研究の紹介

•開発言語・仕様

•処理概要

•画面・機能

サーバサイド

処理図 (サーバ)

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

gvitocha.rb・WebScoket通信を待ち受ける

{msgType:x, msg:y} x … 1 CONSOLE (=>console.rb) 2 STATUS (予約) 3 MACHINE (=>machine.rb) 4 NETWORK (=>network.rb) 10 ETC (予約)msgデータ部を各機能部に転送xを定義することで簡単に拡張可能

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

machine.rb• マシン関係のスクリプトのクッション用

data = {mode:x, *****} x … “jail” =>jail.rb “pkg” =>pkg.rb “template” =>template.rbmode含むdataを各機能部に転送xを定義することで簡単に拡張可能

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

jail.rb• qjailを使ってjailの操作をする

• create,delete,start,stop

• Jail作成時、テンプレートを選択した場合は pkg.rbを呼び出す

• 作成日時を記録

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

pkg.rb

• pkg(8)を用いてpkgの操作を行う

fetch…インターネットからpkgをダウンロードadd …ダウンロードしたpkgをインストール

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

template.rb

• 指定された、ダウンロード済のパッケージをひとまとめにする

• クライアントでマシンを作成する際はテンプレートからインストールするパッケージを選択する

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

sql.rb

• Jail、パッケージ、テンプレート情報を格納上記操作時は大抵sql.rbを呼び出し保存する

• 初回起動(=データベースが存在しない)を感知して初期設定を行う

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

network.rb

• Vitochaを操作してネットワーク構成を変更静的操作のみ対応のVitochaを動的に操作する

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

console.rb

• webshell.pyに接続しキーコードを送信

• 現在ブラウザで開いているJail情報を記憶register/unregister

gvitocha.rb machine.rb pkg.rb

jail.rb

template.rbsendmsg.rb

console.rb

sql.rb

MACHINE

webshell.py

network.rb Vitocha

クライアント

SQLite

クライアント

WebSocket

WebSocket

qjail(8)

pkg(8)

sendmsg.rb• 各機能から呼び出され、JSONデータを作成する {msgType:x, msg:y} x … 1 CONSOLE (<=console.rb) 2 STATUS (予約) 3 MACHINE (<=machine.rb) 4 NETWORK (<=network.rb)y … 自由 新機能を拡張した場合はこちらも対応する必要あり ・割り込みであれば既存のままで可能(MACHINE等)

クライアントサイド

処理図 (クライアント/送信時)

app.js pkg.js

jail.js

template.js app.js

console.js

MACHINE

webshell.js

diag.js

サーバユーザ

WebSocket

処理図 (クライアント/受信時)

app.js pkg.js

jail.js

template.js 画面

console.js

db.js

MACHINE

diagram.js

サーバ

d3.js

diag.jswebshell.js

本研究の紹介

•開発言語・仕様

•画面・機能

実演

マシンタブ

全Jailの一覧、情報

マシンタブ

マシンタブ

新規マシン

マシンタブ

新規パッケージ

マシンタブ

新規テンプレート

マシンタブ

全マシンの削除

新しいマシンを作成

新しいマシンを作成

Jailの名前 英数字とアンダースコア

新しいマシンを作成

マシンタイプ Server Router Switch から選択

新しいマシンを作成

テンプレート 別途作成したテンプレートから選択

新しいマシンを作成

パッケージ 選択したテンプレートに応じた パッケージが表示される

新しいマシンを作成

フレーバー 未実装

default固定

新しいマシンを作成

コメント

パッケージの追加

パッケージの追加

インストール済の パッケージ一覧

パッケージの追加

パッケージ検索画面

パッケージの追加

パッケージ検索結果 追加したいパッケージを選択

テンプレートの作成

テンプレートの作成

テンプレート名

テンプレートの作成

インストール済の パッケージ一覧 追加したいパッケージに チェックをつける

処理進捗画面

処理進捗画面

処理をしている操作 末尾に処理の進捗表示

処理進捗画面

行う処理

処理進捗画面

処理の詳細ログ

全マシンの削除

ネットワークタブ

ネットワークタブ

簡易作成 _Server* _Router* _Switch*

ネットワークタブ

表示設定

ネットワークタブ

表示設定

ネットワークタブ

ネットワーク図

ネットワーク図 凡例  : Router  : Server  : Switch

ネットワーク図 凡例  : Router  : Server  : Switch

接続されているepair

ネットワーク図 凡例  : Router  : Server  : Switch

停止中のJail (半透明)

ネットワーク図 凡例  : Router  : Server  : Switch

ネットワーク図 凡例  : Router  : Server  : Switch

他のマシンに接続

ネットワーク図 凡例  : Router  : Server  : Switch

接続可能なJailの周りに点線円の表示 停止状態等、接続不可のJailは超半透明に

詳細情報

詳細情報

マシン情報

詳細情報

ネットワーク

詳細情報

コンソール

ネットワーク

ネットワーク

epair一覧

ネットワーク

接続先

ネットワーク

ネットワーク情報 設定したい欄の 情報を入力

コンソール

課題点

課題点

• Jail作成DSL、ネットワーク作成DSL

• 一度に数百台のJailを作成、ネットワークの構築

• フレーバー、アーカイブ

• 任意のJailを選択し、複製ができるように

課題点• LinuxのJailを作成FreeBSDのLinux Emulator機能を使用

• 帯域制御DUMMYNETをブラウザから設定できるように

• VLAN機能

• OpenvSwitch機能

質疑応答

top related