-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalico.html
executable file
·160 lines (153 loc) · 9.27 KB
/
calico.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
151
152
153
154
155
156
157
158
159
160
<!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/calico.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/calico.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">CalicoプラグインのFreeBSDへの移植</h2>
<div class="article-body">
<p>
<img src="img/calico.png" alt="">
</p>
<p>
<b>キーワード:</b> Calico / FreeBSD / netlink<br>
<a href="https://soumasakaguchi.github.io/portfolio/research.html">異種OS機能連携のためのセキュアコンテナネットワーキング機構の実現</a>を達成するために、複数ノードをまたいだコンテナ間通信を実現する必要がある。これは異種OS機能連携によるセキュアコンテナをクラウドコンピューティング基盤上で利用するための重要な一歩である。本実装では、FreeBSDにCNIプラグインのひとつであるCalicoを移植することで、Linuxと同等の複数ノード上コンテナ間通信が可能となると考えた。現在は、Calico移植のためのGoプラグインの移植などを行っている。
</p>
<h3>背景</h3>
<ul>
<li>
異種OS機能連携によるセキュアコンテナのクラウドコンピューティング基盤上での利用を想定
<ul>
<li>マイクロサービスアーキテクチャのような、コンテナが相互通信するシステム構成への対応</li>
</ul>
</li>
<li>Linuxと同等の複数ノードをまたぐコンテナ間通信の実現が必要不可欠</li>
</ul>
<h3>課題</h3>
<p>
<img src="img/calico-pro.png" alt="">
</p>
<ul>
<li>
<a href="https://soumasakaguchi.github.io/portfolio/runj.html">Network Namespace互換機能の実現</a>では、単一ノード上のコンテナ間通信を実現したが...
<ul>
<li>vnetとjailの入れ子構造を利用したNetwork Nameespace互換機能</li>
<li>CNIコアプラグインの利用</li>
</ul>
</li>
<li>
現状では、複数ノードをまたいだコンテナ間通信が実現不可能
<ul>
<li>Linuxでは、CalicoというCNIプラグインで実現</li>
<li>Calicoに必要となる機能モジュールもFreeBSD対応していないことがほとんど</li>
</ul>
</li>
</ul>
<h3>実装</h3>
<p>
<img src="img/calico-imp.png" alt="">
</p>
<h4>Calico Pluginの移植</h4>
<p>
高レベルコンテナランタイムやコンテナオーケストレーターから実行するバイナリとなるCNIプラグインの移植が必要となる。仮想インタフェースの作成やNetwork Namespace互換への接続を行うcalicoバイナリと、IPアドレスの割当を行うcalico-ipamバイナリそれぞれを移植する。実装では、LinuxとFreeBSDのネットワークスタックの差異を吸収する工夫が必要となる。
</p>
<h4>Felixの移植</h4>
<p>
Calicoの機能の中枢をになるFelixの移植が必要となる。Felixはiptablesの制御を担うが、FreeBSDではiptablesが存在しないため、iptablesと同等の機能を持つpfというファイアウォールを利用する。そのためiptablesのルールをpfのルールに変換する機構を実装する。
</p>
<p>
また、Felixは、NetlinkやNetwork Namespaceの操作をGo言語から行うことから、netlink packageやnetns packeageのFreeBSD移植が必要となる。これらはLinuxの機能に依存している箇所もあるため、FreeBSD用のパッケージを再実装しなければならない。現在はnetlink packageの機能を絞った再実装と、netns packageをvnetの操作に変換したvnet packageの実装を行っている。同時に、UnixパッケージやSyscallパッケージなどのGoパッケージに足りない部分もFreeBSD対応していく。
</p>
<h4>Calico-BIRDの移植</h4>
<p>
BIRDはBGPの通信を行うために用いられ、FreeBSDでも利用可能である。しかしCalico用に一部改変したBIRDであるCalico-BIRDはFreeBSDでは利用できない。そこで、FreeBSDで利用できるBIRDを参考に、Calico-BIRDの移植を行った。すでにFreeBSDでの動作を確認できているため、他の機能コンポーネントが完成次第、全体の動作を確認する。
</p>
<h4>Dockerの排除</h4>
<p>
Calicoの機能コンポーネントをまとめたCalico-nodeを実行するためには、Dockerを利用する必要がある。しかしFreeBSDでは、Dockerの利用が難しいため、正常に動作する、かつDocker互換であるnerdctlを用いるように改変を行った。すでにFreeBSDでの動作を確認できているため、他の機能コンポーネントが完成次第、全体の動作を確認する。
</p>
<h4>Network Namespace互換機能への対応</h4>
<p>
<a href="https://soumasakaguchi.github.io/portfolio/runj.html">Network Namespace互換機能の実現</a>で実現した、Network Namespace互換を利用するような実装を行う。これは、Calico PluginやFelixなどの機能コンポーネントの実装に影響してくるため、vnet packageを利用することを想定している。
</p>
<h3>頑張った点</h3>
<ul>
<li>やるべきことの列挙をしたことで全容を確認し、計画をたてることができた</li>
<li>過去に実装したNetwork Namespace互換を再利用する形で実装できた</li>
<li>CalicoのFreeBSD対応やFreeBSDで利用可能なパッケージの作成など、多方へのオープンソースの貢献ができる</li>
</ul>
<h3>今後の課題</h3>
<ul>
<li>
実装できていない部分の実装
<ul>
<li>Calico Pluginの移植</li>
<li>Felixの移植</li>
</ul>
</li>
<li>オープンソースへのコミット</li>
<li>評価</li>
</ul>
<h3>URL</h3>
<p>
<b>Calico (Github):</b><a href="https://github.com/SoumaSakaguchi/souma-calico-public" target="_blank" rel="noopener">https://github.com/SoumaSakaguchi/souma-calico-public</a><br>
<b>BIRD (Github):</b><a href="https://github.com/SoumaSakaguchi/souma-calico-bird-public" target="_blank" rel="noopener">https://github.com/SoumaSakaguchi/souma-calico-bird-public</a><br>
<b>netlink (Github):</b><a href="https://github.com/SoumaSakaguchi/netlink-public" target="_blank" rel="noopener">https://github.com/SoumaSakaguchi/netlink-public</a><br>
<b>vnet (Github):</b><a href="https://github.com/oss-fun/vnet" target="_blank" rel="noopener">https://github.com/oss-fun/vnet</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>