---
# System prepended metadata

title: 修士論文改善案

---

# 修士論文改善案
## 研究目的
本コースで現在利用しているシステムは 2015 年の10月に構築され，2020年2月まで4年と4ヶ月の期間，本チームの管理の下運用されてきた.2020年10月にシステム更新が行われる．この運用期間内に情報技術は目まぐるしく変化しているが，現行システムにおいて大きな変化はなかった．また，本チームにおいて，メンバーの入れ替わりが多くあり，メンバーの人数が安定しない，ノウハウの属人化，引継ぎが常に課題となっている．本研究の目的は，管理者が安定して教育研究情報システムのサービスを運用し，現行システムでは使われていない技術を用いた新たなサービスを構築する．本論文では，現行システム内で利用されていないコンテナ技術を用いた新規サービスの構築，現行システムとシステム管理チームの運用を改善する取り組みについて報告する.

## 改善案の目次
技術概要やあまり本論文に関係ない部分は割愛しました．

第1章 序論
1.1 はじめに
1.2 システム管理チーム
　1.2.1 システム管理チームの情報共有について
　1.2.2 勉強会による技術力の向上
　1.2.3 システム更新 
　1.2.4 研究目的
1.3 論文の構成
第2章 技術概要
2.1 仮想化
　2.1.1 ハイパーバイザー型
　2.1.2 コンテナ型
2.2 ハイパーバイザー型
　2.2.1 KVM
2.3 コンテナ型
　2.3.1 Docker
2.4 コンテナオーケストレーション
　2.4.1 Kubernetes
2.5 コンテナレジストリ
　2.5.1 DockerHub
　2.5.2 DockerRegistry
2.9 LDAP
2.10 DNS
2.11 バージョン管理
　2.11.1 Git
　2.11.2 GitLab
2.12 MetalLB
2.13 NginxIngressController
2.14 Mattermost
2.15 サイバーレンジ演習環境
　2.15.1 WordPress
　2.15.2 Selenium
　2.15.3 Metabase
　2.15.4 Hydra
　2.15.5 Ansible
第3章 現行システム
3.1 オンプレミス環境
3.2 仮想環境
3.4 基幹サーバ
3.5 Akatsuki
3.6 VM貸出サービス
3.7 サービスに関するオペレーションについて
第4章 新規システムの構築
4.1 コンテナ貸出サービスについて
4.2 要件定義
4.2 システム概要
4.3 Kubernetesの検証
　4.3.1 ユーザごとのNamespasce作成
　4.3.2 ユーザごとのkubectlコマンドの権限
　4.3.3 ユーザごとのリソース割当
　4.3.4 ネットワークの設定
4.4 Webコントロールパネル
4.5 実装評価
第5章 運用の改善に関する取り組み
5.1 オペレーションの簡易化システム
　5.1.1 要件定義
　5.1.2 システム概要
　5.1.3 オペレーションの簡易化システムの実装
　5.1.4 実装評価
5.2 システム管理チームメンバーの技術力の向上を図る演習環境
　5.2.1 拡張の要件定義
　5.2.2 演習概要
　5.2.3 演習構成
　5.2.4 演習結果
　5.2.5 拡張評価
　5.2.6 考察
第6章 まとめ 
6.1 総括
6.2 今後の課題
　6.2.1 コンテナ貸出サービスについて
　6.2.2 オペレーションの簡易化システムの拡張
　6.2.3 セキュリティ演習環境の改善
　6.2.4 知能情報コースシステム更新について

### コンテナ貸出サービス
#### 従来のVM貸出サービスと比較
**VM貸出サービス**
- 1台につきメモリ1GB，CPU1コア，ストレージ容量10GB
- いつでも利用できない -> 申請が必要
- 複数台VMを立てようとすると再度申請が必要
- リソースの拡張に申請が必要(メールで申請)
    - KVMの場合は複数のコマンドとKVMの操作が必要になる
- 常時起動し電源のOn，Offができる
- 自動で固定のIPアドレスが振られる
- 学内のみVMにアクセスが可能
- グローバルIPアドレスを申請すると利用できる
- 外部にはWebアプリケーションは公開できない
    - プライベートIPアドレスなので
- ドメイン名の設定
    - 作成時に希望ドメインを入力
- OSを選択できる
    - CentOS7
    - CentOS8
    - Debian8
    - Debian10
    - Fedore25
    - Ubuntu16
    - Ubuntu18

**コンテナ貸出サービス**
- 事前にユーザごとにリソースが決められている ->　申請なしに作成することが可能
- リソースの拡張には申請が必要（Webから申請可能にする）
    - YAMLファイルを拡張したいリソースの量で再度適用することで変更が可能
- いつでも利用できる -> コンテナを立ち上げるには申請がいらないため
- 台数制限なし -> リソースの範囲内であれば
- 24時間でコンテナは削除される
- 外部からアクセスがコンテナ可能 -> 外部からコマンドを実行できるようにするため
- IPアドレスはKubernetesが使うIPのみしか振られない
- 自ら作成したコンテナイメージを利用してコンテナを作成する
    - 存在するDocker ImageであればどのOSでも使うことができる
- ドメイン名の設定
    - Webアプリケーションの場合に利用する
- 外部にはWebアプリケーションは公開できない
    - プライベートIPアドレスなので

**コンテナ貸出サービスとVM貸出サービスの大きな違い**
コンテナ貸出サービスは
- いつでも利用可能
- 自ら作成したコンテナイメージを利用できるので選択しがたくさんある
- 24時間で削除されてしまう
- リソースの範囲内であれば好きなだけ台数を立ち上げることができる
- コンテナに対してグローバルIPを付与することはできない
- 外部からコンテナに対してアクセスできる
#### 評価方法
要件定義を行い，要件の達成度を評価する．

#### 要件定義
全体の要件
- [x] コンテナを運用・管理すること -> コンテナオーケストレーションツール Kubernetes
- [x] コンテナイメージの保存場所を用意する ->　GitLabのContainer Registry
- [x] コンテナを作成した場合，原則24時間経過すると削除すること
- [x] コンテナを24時間以上利用したい場合，運用管理者に申請を行う
- [x] ユーザが1人あたりのリソースを管理者が制御できること
- [x] ユーザを管理するための仕組み -> 建てたコンテナやサービス等
- [x] 台数関係なくリソースの範囲内であれば作成可能であること
- [ ] ユーザごとのファイル管理 -> コンテナ内のデータ管理
- [x] 外部からの利用
- [x] Pod内で複数のコンテナを建てれるようにする

Webコントロールパネル
- [x] Pod(コンテナ)の作成
  - [x] Imageの選択
  - [x] Pod名の入力
  - [x] Podのポート番号
  - [x] リソースの割当てる値の入力
- [x] Podの削除
- [x] Pod(コンテナ)内で複数コンテナ作成
- [x] Podの一覧ができること
- [ ] Podにディレクトリをマウントする
- [x] Podを作成したDeploymentの表示
- [x] 利用できるリソースとリソースの量が表示
- [x] GitLabのContainer RegistryからImageの情報を取得
- [ ] DockerHubからImageの取得 
- [x] kubectlコマンドの設定コマンド表示
- [x] 24時間で削除しないための延長申請画面 -> rails側のcronで行う
- [x] 管理者画面 -> 延長を承認するため
- [x] ドメインの名の設定 -> ingress

バックエンド(Kubernetes)
- [x] Podの作成・削除
- [x] Serviceの作成・削除 -> Service 建てたコンテナに対してアクセスできる設定
- [x] 1人あたりのリソースが制限できるか -> quota
- [x] ユーザごとにPodなどの管理を切り分ける -> Namespace
- [x] kubectlコマンドを外部利用 -> RBAC
- [ ] ストレージの管理
- [x] ドメイン名の利用設定

### オペレーションの簡易化システム
- VM貸出
- 無線LAN
- ユーザの作成
- コマンド実行履歴
#### 評価方法
要件定義を行い，要件の達成度を評価する．

#### 要件定義
- [x] 一つのコマンドでなるべく完結する -> Mattermostを利用する
- [ ] システム管理者である人のみ実行可能にする
- VM貸出
  - [x] VMの利用権限付与・完了メール送信
  - [x] VMの利用権限付与
  - [x] VMの利用権限剥奪
  - [x] ユーザの現在の利用権限数の確認
  - [x] 利用できるコマンドのhelpの表示 
- 無線LAN
  - [ ] 8文字以上のパスワードかチェック
  - [x] 無線LANの作成・完了メール送信
  - [x] 無線LANの作成
  - [x] 無線LANの削除
  - [x] 無線LANの有効化
  - [x] 無線LANの無効化
  - [x] 無線LANの一覧
  - [x] 利用できるコマンドのhelpの表示
- ユーザの作成
  - [ ] ユーザの作成・完了メール送信・Gmailとの同期 -> UidnumberとPasswordを自動生成するようにした
  - [x] ユーザの作成
  - [x] ユーザの削除 -> sshしてldapのコマンドで削除していた
  - [x] ユーザの検索 -> これもldapserachしていたので同じようにできる
  - [x] sudoersの権限追加
  - [x] 利用できるコマンドのhelpの表示
- コマンド履歴
  - [ ] 履歴の一覧　パラメータによって表示できる量を変更する -> 表示する量の変更ができてない 今は10個
  - [x] 利用できるコマンドのhelpの表示

### サイバーレンジ演習環境
- 知能情報コースの教育研究情報システムの構成に近づける
  - DNS・DHCP・LDAP・Mail等
#### 評価方法
拡張内容の要件定義を行い，要件の達成度を評価する

#### 要件定義
- 脆弱性のシナリオ作成
  - [x] Mysqlを使ったもの -> 外部からアクセスできるような設定
  - [x] DNSサーバを使ったもの -> rndcコマンドが外部から利用可能，CVE-2015-5477
  - [ ] DHCPサーバを使ったもの
  - [ ] LDAPサーバを使ったもの 
  - [ ] メールサーバを使ったもの
- [x] DNSサーバの追加
- [x] DHCPサーバの追加
- [ ] LDAPサーバの追加 
- [ ] メールサーバの追加

