
ユーザースペースのアプリケーションカーネルを介してコンテナをサンドボックス化し、システムコールをインターセプトしてホストカーネルへのアクセスを制限し、OCIランタイムを通じてDocker/Kubernetesと統合します。

gVisor は、実行中のアプリケーションとホストオペレーティングシステムの 間に強力な分離層を提供します。これはLinux互換インターフェースを 実装するアプリケーションカーネルです。Linuxとは異なり、メモリ安全な言語 (Go)で書かれており、ユーザースペースで動作します。
gVisorには、既存のコンテナツールと連携しやすくするrunscという
Open Container Initiative(OCI)ランタイムが含まれています。runsc
ランタイムはDockerおよびKubernetesと統合されており、サンドボックス化された
コンテナを簡単に実行できます。
seccomp-bpf)でも、
Linux分離プリミティブのラッパー(例:firejail、AppArmorなど)でも
ありません。gVisorは独自の第三のアプローチを取っており、VMの多くのセキュリティ上の 利点を提供しつつ、通常のユーザースペースアプリケーションの低リソース消費、 高速起動、柔軟性を維持しています。
コンテナはサンドボックスではありません。コンテナはアプリケーションの 開発、パッケージ化、デプロイ方法に革命をもたらしましたが、追加の分離なしに 信頼できないコードや悪意のある可能性のあるコードを実行するためにコンテナを 使用することは良い考えではありません。単一の共有カーネルを使用すると効率性と パフォーマンスの向上が得られますが、その一方で、単一の脆弱性によってコンテナ エスケープが可能になることも意味します。
gVisorはコンテナ向けのアプリケーションカーネルです。アプリケーションが期待する すべての機能へのアクセスを提供しつつ、アプリケーションからアクセス可能なホスト カーネルの攻撃面を制限します。ほとんどのカーネルとは異なり、gVisorは固定の物理 リソースセットを想定または要求しません。代わりに、既存のホストカーネル機能を 活用し、通常のプロセスとして実行されます。言い換えれば、gVisorはLinuxを介して Linuxを実装します。
gVisorは、外部の脅威に対するコンテナの堅牢化、追加の整合性チェックの提供、 またはサービスのアクセス範囲の制限を行う技術やツールと混同しないでください。 コンテナにどのデータを公開するかについては常に注意を払う必要があります。
クイックスタートガイドを含むユーザードキュメントと技術アーキテクチャは、 gvisor.devにあります。
gVisorはx86_64およびARM64でビルドできます。他のアーキテクチャは将来 サポートされる可能性があります。
これらの手順では、bazelおよびその他のビルド依存関係がビルドコンテナに
ラップされています。bazelを直接使用するか、標準ターゲットについては
make helpと入力することもできます。
次の依存関係がインストールされていることを確認してください:
runsc、containerd-shim-runsc-v1 containerdシム、およびrunscが自身の
隣のgvisor-bin/ディレクトリに存在することを期待するいくつかのサイドカー
バイナリを含むリリースtarballをビルドし、それを/usr/local/binに展開します:
make release-tarball DESTINATION=bin/
sudo tar -C /usr/local/bin -xf bin/gvisor.tar.bz2
特定のライブラリやバイナリをビルドするには、ターゲットを指定できます:
make build TARGETS="//pkg/tcpip:tcpip"
余分なオーバーヘッドのため、Bazelを直接使用することは推奨されませんが、 始めるには以下の手順に従います:
依存関係をセットアップした後、Bazelの使用はMakefileと同様です:
bazel build -c opt //debian:gvisor-release-tar
標準のテストスイートを実行するには、次を使用できます:
make unit-tests
make tests
特定のテストを実行するには、ターゲットを指定できます:
# Makefile
make test TARGETS="//runsc:version_test"
# Bazel
bazel test //runsc:version_test
一部のパッケージはmacOS上でテストを直接実行できます。この記事の執筆時点では、 gVisorにはbazel 8が必要であり、homebrewを使用してインストールできます:
brew install bazel@8
# You can then run the tests, e.g.:
$(brew --prefix bazel@8)/bin/bazel test --macos_sdk_version=$(xcrun --show-sdk-version) -- //tools/nogo/... //tools/check{aligned,const,escape,linkname,locks,unsafe}/...
go getの使用このプロジェクトはビルドと依存関係の管理にbazelを使用しています。
利便性のために、標準のgoツールと互換性のある合成goブランチが維持されて
います。これは、gVisorサブパッケージ(例:Netstack経由のユーザースペース
ネットワーキング)に依存する外部パッケージやライブラリが、gVisorのGoコードを
自社のGoプロジェクトにインポートする場合に役立ちます。
goブランチクエリでこのブランチを明示的に選択してください。@latestは
masterに解決されますが、これはBazelを必要とし、標準のGoツールとは互換性が
ありません:
go get gvisor.dev/gvisor/pkg/tcpip/transport/tcp@go
注記:このブランチからのrunscビルドはサポートされていません。
gVisorとrunscが機能するには、いくつかのバイナリ(その一部はGoで書かれて
いないものもあります)が必要です。goブランチはベストエフォートでサポート
されており、このブランチでの直接の開発はサポートされていません。開発は
masterブランチで行う必要があり、その後goブランチに反映されます。
プロジェクトのガバナンス情報については、GOVERNANCE.mdを 参照してください。
gvisor-usersメーリングリストと gvisor-devメーリングリストは、質問や議論の良い出発点です。
SECURITY.mdを参照してください。
Contributing.mdを参照してください。