コンテナの軽量さと、より安全な分離を実現する「gVisor」、Googleがオープンソースで公開
Googleがオープンソースで公開したgVisorは、準仮想化のような仕組みを用いて従来のコンテナよりも安全性を高めたコンテナランタイムだ。Kubernetes時代の標準コンテナランタイムとなる有力候補かもしれない。
Dockerなどに代表されるコンテナ型仮想化は、OSのユーザー空間の名前空間を分離することなどで実現されています。
この仕組みの利点は、あらかじめ起動されているOSの上で名前空間を分離するだけでコンテナが起動できる点にあります。これがコンテナの迅速さや軽量さにつながっている一方、コンテナ間でOSのカーネルを共有しているためにコンテナ間の分離レベルは高くなく、同一OS上で稼働している別のコンテナの負荷の影響を受けやすかったり、コンテナからOSのシステムコールを直接呼び出せることなどによるセキュリティ上の課題を引き起こしやすくもあります。
OCIに準拠し、runc互換のgVisor
Googleがオープンソースで公開した「gVisor」は、従来のコンテナの軽量さを保ちつつ、コンテナの分離について新たな実装を提供することよって、準仮想化に近い、より安全な分離を提供するコンテナランタイムです。
gVisorはコンテナ実装の標準であるOCI(Open Container Interface)に準拠しておりDockerのコンテナ実装であるruncとの互換性を備えているため、runcと置き換えてDockerやKubernetesのコンテナランタイムとして用いることができると説明されています。
gVisorは安全に分離された「サンドボックス化されたコンテナ」
GoogleはgVisorを、従来のコンテナよりも安全に分離されたコンテナ環境として「サンドボックス化されたコンテナ(Sandboxed containers)」と呼んでいます。
gVisorはホストとなるカーネルの上に独自のgVisorレイヤを提供し、コンテナからのシステムコールをいったん受け止めています。このレイヤがあることによって、従来のコンテナよりも安全な分離と、カーネルに対するよりセキュアな環境を実現しているのです。
その仕組みは準仮想化に似ていると、次のように説明されています。
gVisor provides a strong isolation boundary by intercepting application system calls and acting as the guest kernel, all while running in user-space. Unlike a VM which requires a fixed set of resources on creation, gVisor can accommodate changing resources over time, as most normal Linux processes do.
gVisorはつねにユーザー空間で稼働していますが、ゲストカーネルとして振る舞い、アプリケーションのシステムコールを横取りすることで強力な分離境界を提供します。起動時に一定のリソースを要求する仮想マシンとは異なり、gVisorは通常のLinuxプロセスと同様、利用するリソースはそのときに応じて変化します。
gVisor can be thought of as an extremely paravirtualized operating system with a flexible resource footprint and lower fixed cost than a full VM.
gVisorは仮想マシンと比較して、柔軟なリソース容量に対応し小さなコストで実行できる、例外的な準仮想化オペレーティングシステムであると考えることができるでしょう。
gVisorによる分離は仮想マシンのそれとどのくらい差があるのでしょうか? Googleのプロダクトマネージャー Yoshi Tamura氏は、「非常に近いレベルだと確信している」(We believe that is kind of very closer level, for sure.)と説明しています(動画は本記事の最後に紹介しています)。また、gVisorは150ミリ秒以内に起動すると、軽量さについてもアピールしています。
Kubernetes時代の標準コンテナランタイムになるか
コンテナランタイムはコモディティ化し、今後はKubernetesを軸としたソリューションを提供することがコンテナの中心的な話題となるだろうと、以前の記事「Dockerコンテナ時代の第一章の終わり、そして第二章の展望など」で書きました。
コンテナ環境においてKubernetesが普及してくると、ホスト上に多様なアプリケーションのコンテナや、多様なテナントのコンテナが並行して実行されるようになるでしょう。
すると当然ながら、コンテナ間をより安全に分離したいという要求が高まってくるはずです。
すでに、より分離レベルを高めたコンテナ実装としてはOpenStack FoundationによるKata Containerや、マイクロソフトのHyper-V Containerなどがありますが、Kubernetesの開発元でもあるGoogleから登場したgVisorは、より安全性の高い分離を求められるKubernetes時代のコンテナランタイムとして、標準の座を狙える有力候補になるのかもしれません。
あわせて読みたい
クラウドでのシステム構築、インフラの分からないところはチャットで質問できて相談に乗ってくれるクラウドシステムインテグレータ[PR]
≪前の記事
Node.js 10がリリース、N-APIが安定化しV8非依存に。2年半前に初のLTSとなったNode.js 4.xはついにEOL