-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrunj.html
executable file
·150 lines (143 loc) · 7.12 KB
/
runj.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
<meta property='og:type' content='website'>
<meta property='og:title' content='坂口颯麻のポートフォリオ'>
<meta property='og:url' content='https://soumasakaguchi.github.io/portfolio/runj.html'>
<meta property='og:description' content='坂口颯麻のポートフォリオサイトです。'>
<meta property="og:image" content="img/ogp.png">
<meta name="description" content="坂口颯麻のポートフォリオサイトです" />
<title>坂口颯麻のポートフォリオ</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Material+Icons+Outlined" rel="stylesheet">
<link href="css/ress.css" media="all" rel="stylesheet" type="text/css" />
<link href="css/style.css" media="all" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="img/favicon.ico" />
<link rel=”canonical” href="https://soumasakaguchi.github.io/portfolio/runj.html" />
</head>
<body>
<div class="wrapper">
<!-- header -->
<header class="header ">
<div class="container">
<h1 class="header-logo">
<a href=".">Souma Sakaguchi</a>
</h1>
<nav class="gnav">
<ul class="gnav-list">
<li class="gnav-item"><a href="./#about">ABOUT</a></li>
<li class="gnav-item"><a href="./#skill">SKILL</a></li>
<li class="gnav-item"><a href=".#works">WORKS</a></li>
<li class="gnav-item"><a href="./#contact">CONTACT</a></li>
</ul>
</nav>
</div>
</header>
<!-- /header -->
<main class="content">
<article class="article">
<div class="article-container">
<h2 class="article-title">FreeBSD環境におけるNetwork Namespace互換機能の実現</h2>
<div class="article-body">
<p>
<img src="img/runj.png" alt="">
</p>
<p>
<b>キーワード:</b> Network Namespace / vnet / コンテナランタイム<br>
<a href="https://soumasakaguchi.github.io/portfolio/research.html">異種OS機能連携のためのセキュアコンテナネットワーキング機構の実現</a>を達成するために、Network Namespace互換機能の実現する必要がある。FreeBSDでのネットワークスタック分離機能であるvnetと、jailの入れ子構造を利用することでNetwork Namespace互換機能を実現する。このNetwork Namespace機能をOCI準拠jailランタイムであるrunjに実装することで、FreeBSDで単一ノード上コンテナ間通信が実現した。
</p>
<h3>背景</h3>
<ul>
<li>
異種OS機能連携によるセキュアコンテナを実現するにあたって、Netwrok Namespaceが必要
<ul>
<li>複数コンテナが1つのネットワークスタックをを共有するために必要</li>
<li>KubernetesのPodやサイドカーコンテナとして利用</li>
</ul>
</li>
<li>Linuxコンテナネットワーキングの標準規格であるCNIへの準拠が必要</li>
</ul>
<h3>課題</h3>
<ul>
<li>
FreeBSDのネットワークスタック分離機能であるvnetは、複数のjailが同居することが不可能
<ul>
<li>vnetとjailは1-1対応になっている</li>
</ul>
</li>
<li>
CNIコアプラグインは一部FreeBSDでも利用可能だが、Linuxと同等の操作を行えるようにする必要がある
<ul>
<li>分離されたネットワークスタックの指定方法に差異</li>
</ul>
</li>
</ul>
<h3>実装</h3>
<p>
<img src="img/runj-imp.png" alt="">
</p>
<ul>
<li>
FreeBSDでjailを作成できる低レベルコンテナランタイムであるrunjに、Network Namespace互換機能を実装
<ul>
<li>vnet jailにjailを入れ子構造で作成することで、Network Namespace互換とし、ネットワークスタックを共有可能</li>
<li>Network Namespace互換を管理するファイル等も用意することで、Linuxと同等の管理インタフェースを用意</li>
</ul>
</li>
<li>
CNIコアプラグインを、実装したNetwork Namespace互換機能を指定できるように改良
<ul>
<li>bridgeプラグインをNetwork Namespace互換に対応させた</li>
<li>nerdctl + containerdを用いた動作確認</li>
</ul>
</li>
</ul>
<h3>評価</h3>
<ul>
<li>
仮想ブリッジを用いた従来のjail間通信とNetwork Namespace互換を用いたjail間通信を比較
<ul>
<li>Network Namespace互換を用いたjail間通信の方が通信スループットが向上<br>→ネットワークスタックを共有したことによる通信特性の変化</li>
</ul>
</li>
<li>
jailの入れ子によるアプリケーションへの影響をUnixBenchによって評価
<ul>
<li>性能に大きな影響は見られなかった<br>→入れ子構造を用いたNetwork Namespace互換は、jail内アプリケーションに与える影響が少なく済んでいる</li>
</ul>
</li>
</ul>
<h3>頑張った点</h3>
<ul>
<li>vnetと入れ子構造に着目したNetwork Namespace互換の構造を提案することで、大きく改変を加えることなくNetwork Namespace互換を実現できた</li>
<li>インフラに興味を持ってから最初のWorkであり、わからないことを調べ、それを実際に動かして確認するということの大切さを学ぶことができた</li>
<li>学会発表などを通して、他者へわかりやすく伝える力を培うことができた</li>
</ul>
<h3>URL</h3>
<p>
<b>runj (GitHub):</b><a href="https://github.com/SoumaSakaguchi/souma-runj-pablic" target="_blank" rel="noopener">https://github.com/SoumaSakaguchi/souma-runj-pablic</a><br>
<b>cni-plugin (GitHub):</b><a href="https://github.com/SoumaSakaguchi/souma-cni-plugin-pablic" target="_blank" rel="noopener">https://github.com/SoumaSakaguchi/souma-cni-plugin-pablic</a>
</p>
</div>
<div class="home-link">
<a href="./#works">Works一覧へ</a>
</div>
</div>
</article>
<div class="page-top" id="js-page-top">
<span class="material-icons-outlined">expand_less</span>
</div>
</main>
<!-- footer -->
<footer class="footer">
<div class="copyright">©Souma Sakaguchi</div>
</footer>
<!-- /footer -->
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type='text/javascript' src="js/script.js"></script>
</body>
</html>