OS 授業向けのマルチユーザ VM 環境の構築
琉球大学大学院 理工学研究科 情報工学専攻
平良 太貴
VM を用いた Web サービスの教育
- 学生でも Web サービスを開発する技術は必須なものとなっており、学生個人での Web サービス開発でも、手持ちの PC でサービスを構築し外部の VPS やクラウド等へデプロイするワークフローを学ぶ必要がある。
- しかし外部のサービスを利用する場合に、学生が VM の管理を十分に行うことが難しく、コストの支払いも困難である。クラウド上で学生が使う VM の管理方法は、クラウドの運営者と協調して API などを通して実現する必要がある。
- ここでは学校にあるブレードなどのサーバ機器を用いて Web サービスを学生が構築、開発、運用する方法の実装を行った。
VM を用いた Web サービスの教育
- 本学の情報工学科で提供している Operating System という授業で、OS について学習し課題を提出させる。課題では VM の環境を学生が設定し、情報工学科の持つブレードサーバ上にアップロードし、プログラムの実装や計測を行う。
- これを教師あるいはシステム管理者が学生の一つ一つの VM に対して対応を行うのは現実的ではない。
- 情報工学科のブレードサーバ上に VM に対する適切な権限を学生に委譲し、VM の起動・停止等の操作をさせる必要がある。また、VM 上で動く OS のセキュリティを適切に管理する必要がある。
ie-virsh 導入前の VM 管理システム
ie-virsh を実装し適用する前に、VMWare ESXI / vSphere Client を利用していた。
VMWare ESXI / vSphere Client
- vSphere Client は仮想環境の統合管理をするプラットフォーム vCenter Server と接続し、管理する
- vSphere Client は詳細な権限の設定が可能で、複数の学生に対して VM を配布し権限を管理する事ができる
KVM / ie-virsh への変更
- 手動で権限を移譲する場合は管理者側の操作が増え、学生への権限の配布に手間と時間が掛かる。
- ie-virsh は権限を移譲するという操作が必要なく、機能も学生が VM を操作するには十分である。
- KVM / ie-virsh はオープンソースであり、導入コストやランニングコストがかからない
授業 Operating System に使用するために、VMWare ESXI / vSphere Client の代わりにie-virsh を実装した。授業 Operating System で使用する。
目次
- 授業 Operating System で要求されること
- ie-virsh の実装
- ie-virsh の機能
- リソースの制限
- OCFS2 を使った構成
- ホストのブレードサーバの構成
- Vagrant Box の使用
- 他の管理ツールとの比較
- ie-virsh の改善点
- まとめと今後の課題
授業 Operating System で要求されること
授業 Operating System では、VM を使って課題や実験を行う。VM を学生が操作するにあたっての基本的な要件を満たす必要があり、また教師や管理者側の負担を減らさなければならない。
- 学生のノート PC で環境設定したイメージを、ブレードサーバ上で VM として動作させることができる
- 作成した VM を、VM を持つ学生だけが削除することができる
- 学生自身の VM のみを起動・停止することができる
- VM へ ssh でのアクセスが可能である
- パスワードやフィルタリングなどの安易な設定をチェックし、設定し直すよう勧告する
ie-virsh では以上のことを行えるように実装する必要がある。
ie-virsh の実装
virsh をラップし、複数の学生が学生自身の VM のみを操作できるように実装した。virsh の個々の VM を操作するのに必要な機能だけを抜き出し、学生に提供する。
libvirt
仮想マシンの制御を抽象化したライブラリで、VM の情報を習得・操作することができる API 群である。KVM の他にも VMWare や Xen など多くのハイパーバイザに対応しており、アクセスすることができる。
virsh
- libvirt にある CLI ツールである
- libvirt がアクセスできるハイパーバイザを操作できる
- libvirt の API を制御することができる
- VM の起動や停止、情報の表示、ゲストが接続しているネットワークデバイスの管理をすることができる
- 別のホストへゲストを移動することができる
ie-virsh の機能
ie-virsh は virsh にある機能を制限し、学生に VM に必要な基本的な操作を提供する。またこれらの操作を、学生自身の VM 以外の VM に対して適応不可にする。
command |
説明 |
define |
XML の template を元に domain を作成 |
undefine |
define で作成した domain の削除 |
list |
define で作成した domain を一覧表示 |
start
| 指定した domain の VM を起動 |
destroy
| 指定した domain の VM を停止 |
dumpxml
| domain の XML を参照 |
マルチユーザへの対応
各個人のリソースや操作を制限することによって、複数の学生の VM 使用を管理することができる。
- 学生の Web サービス構築の学習や、授業 Operating System での課題をさせるためにはマルチユーザに対応する必要がある。
- ホストを、情報工学科の LDAP サーバの情報を利用して、学生が情報工学科のアカウントで ssh ログイン可能な状態に設定した。
- そうすることで独自にアカウントを登録させる必要がなく、またアカウントは学籍番号で登録されているため管理が用意になる。
リソースの制限
限られたリソースをマルチユーザとして複数の学生に配布するためには、学生が個人で大量のリソースを取らないよう、制限する必要がある。
XML template
libvirt は VM を、XML の設定ファイルを使用して管理している。ie-virsh ではその XML ファイルを template として用意することにより、リソースを制限した。
これらの設定を学生が使用する template XML ファイルに記述し、domain の作成時に学生に使用させる。
ドメイン数の制限
学生は VM のインスタンスを最大4つまで作ることができる。これは学生が大量にVM を起動し、メモリや CPU を消費することを防ぐためである。
OCFS2 を使った構成
OCFS2 とは汎用の共有ディスククラスタファイルシステムであり、一つのブロックデバイスを複数の PC から同時に読み書きすることができる。
|
ie-virsh は情報工学科のブレードサーバの一つで動作している。OCFS2 により、ストレージは複数のブレードサーバから同時に参照することができる。ブレードサーバ同士での VM の移動やコピーを容易に行うことができる。
|
またこのブレードサーバの一つを、学生に使用させる。
ホストのブレードサーバの構成
学生は ie-virsh を使用するためにホスト OS へアクセスし、ie-virsh によって学生自身の VM を操作する。
|
ie-virsh は情報工学科のブレードサーバの一つで動作している。そこへ学生は ssh でアクセスし、ie-virsh を使用して VM を操作することができる。情報工学科の IP アドレス配布に対応するため、仮想ブリッジで外部ネットワークと接続する。
|
Vagrant Box の使用
- VM を使用する際は学生の PC で VM を設定させ、VM イメージをアップロードさせるという形をとった。授業 Operating System では VM を学ぶ環境として学生の PC で Vagrant を使用させた。
- Vagrant Box は Vagrant での、仮想マシンのベースとなるイメージファイルである。
- Vagrant Box イメージは簡易なパスワードとユーザ名で Vagrant から管理されており、そのままブレードサーバへアップロードしグローバル IP アドレスを割り当ててしまうと、外部からの攻撃を受けてしまう。そのためブレードサーバへアップロードしたイメージを検知し、攻撃されないような設定かどうかを確認する必要がある。
他のツールとの比較
OCFS2 と NAS
- ie-virsh の動作するサーバ構成では SAN へ複数の PC がアクセスし、同時にアクセスするため ext3・ext4 のようなファイルシステムでフォーマットを行うと整合性が取れない。
- OCFS2 は SAN 上の複数の PC から書き込まれてもファイルは整合性を保てる。
KVM と VMWare ESXI
- ie-virsh はハイパーバイザとして KVM を使用している。
- 情報工学科では VMWare ESXI を利用しているが VMWare を使用するためにはコストがかかる。
- KVM であれば Linux ベースの OS で利用できるため、無償で利用可能である。
他の管理ツールとの比較 [1/2]
Vagrant
- KVM をプロバイダとするプラグインを持っているため、KVM を VirtualBox の用にプロバイダとして使用できる。
- Vagrant をマルチユーザへ対応させ、学生が使えるように設定できるか試したが、Vagrant の KVM プラグイン vagrant-kvm が複数でネットワークを使用できるように実装されていなかった。
- また ie-virsh と できることがほぼ同じであり、既存の Box を使える以外の利点はない。
OpenStack
- クラウド基盤ソフトウエアであり、仮想サーバやブロックストレージ、仮想ネットワークなどのリソースを提供する。
- OpenStack はマルチユーザではないため、今回の複数の学生の権限を管理するツールとしては適さない。
他の管理ツールとの比較 [2/2]
Web サービス実装
- ie-virsh とは別に、vSphere の API を使用した Web サービスが情報工学科で利用されている。
- 情報工学科の VMWare ESXI に VM を作成し、起動、停止することができる。
- Web サービスは GUI を操作するためにブラウザを起動しなければならず、また新しく GUI の操作になれる必要がある。
- 情報工学科の Web サービスは IP アドレスの配布と連携しているため IP アドレスの登録を自動で行う。ie-virsh は IP アドレスの登録は情報工学科のサービスを利用して行うため、新規に VM を作成する際には複数のサービスにまたがって比較する必要がある。
- VM を管理するツールとして、webvirt が複数の VM を管理するために実装されている。仮想環境の Web 管理ツールである。
- シングルノードのみを管理する目的で開発されているため、複数の学生が使用するにはそういったように実装する必要がある。
ie-virsh の改善点
ie-virsh を実装し使用して発見した改善点を挙げる
VM のセキュリティチェック
学生が VM のセキュリティ設定をしているか確認し、また VM に対して攻撃や不正なアクセスがないかを検査する機能が ie-virsh に必要である。
- 簡単に VM へ侵入されてしまうことを防ぐために、簡易なパスワードやユーザ名が設定されている VM のパスワードやユーザ名を変更するように促す。
- 侵入後に他の VM や外部へ攻撃しているかをチェックするために、VM までのトラフィックを監視し、学生の VM が外部へ不正なトラフィックを送っていないかをみる。
- 外部からの不正なトラフィックを受け取らないように、ファイアウォールなどの機能が適切に設定されているかをチェックする。
ie-virsh の改善点
クラウドへのデプロイ
学生が Web サービスを構築し、運用を続けるためには遠方からのアクセスにも対応する必要が出てくる。そのためには AWS やさくら VPS などの外部のクラウドサービスへ VM をデプロイできるようにする。
|
始めに学生は学生の PC 上の VM を設定し、ブレードサーバへアップロードする。Web サービスの構築を終わらせ、ブレードサーバでの運用が可能になると、遠方からのアクセスに対応しなければならない。
遠方からのアクセスはネットワークの速度が遅く、クラウドサービスを利用する必要がある。そのため、ブレードサーバから外部のクラウドサービスへ Web サービスをデプロイする仕組みが必要である。
|
まとめ
- ie-virsh を実装し、既存の管理ツールとの比較を行った。
- 学生の権限を制限し、使用できる資源を絞る事によって管理者の手間を減らす事ができ、また学生と管理者のやりとりを減らすこともできた。
- 学生は情報工学科のアカウントを持っていれば、Web サービスの構築や課題の学習の為に管理者とのやりとりなしに VM を作成し利用することができる。
今後の課題
- 安易なパスワードやユーザ名の設定されている VM を検出し、運営している学生に対して連絡する仕組みを実装する
- 学生の VM に対してスキャンをかけ、適切なフィルタリングかを確認する
- 不正なトラフィックを監視する
- クラウドサービスへ簡単にデプロイできるようにする
- 起動したまま放置されている VM を見つけ、学生へ報告する仕組みを作る