Upload
imai-shutingrz
View
582
Download
2
Embed Size (px)
DESCRIPTION
中間発表で研究内容を公開してしまったのでこちらにもスライドを公開します。 中間発表ではスライドを15枚に収めましたが完全版は103枚あります。
Citation preview
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機能
質疑応答