SlideShare a Scribd company logo
Container SIG 2018 Summer
さくらインターネット株式会社
Shuji Yamada (山田 修司)
@uzyexeMay	28,	2018
20分でわかる gVisor入門
Shuji Yamada
• さくらインターネット所属
• コンテナホスティング「Arukas」担当
• 以前は「さくらのクラウド」運用担当
• 好きなクラスタ Mesos/Marathon
(山田 修司)
Trust me. I am Engineer _(┐¦_ ε:)
2
• アプリケーションをパッケージングして展開。
• コンテナはホストカーネルを共有。
• オーバーヘッドほぼ0。
3
Build Ship Run
Docker コンテナのおさらい
コンテナは
ホストカーネルを共有
4
5
VM B VM CVM A
Server Hardware
Linux Kernel
Hyper Visor
Bins/Libs
App
Kernel
Bins/Libs
App
Kernel
Bins/Libs
App
Kernel
6
Container B Container CContainer A
Server Hardware
Linux Kernel
Docker Engine
Bins/Libs
App
Bins/Libs
App
Bins/Libs
App
7
Container B Container CContainer A
Server Hardware
Linux Kernel
Docker Engine
Bins/Libs
App
Bins/Libs
App
Bins/Libs
App
Docker Engine
Linux Kernel
8
Container B Container CContainer A
Server Hardware
Bins/Libs
App
Bins/Libs
App
Bins/Libs
App
• ゲストプロセスはホストカーネル上で実行。
• ゲストプロセスを十分には隔離していない。
• 単一の脆弱性で、ホストを破壊可能。
9
コンテナはサンドボックスではない
Docker Engine
Container B Container CContainer A
Server Hardware
Linux Kernel
Bins/Libs
App
Bins/Libs
App
Bins/Libs
App
“Containers do not contain”

-Dan Walsh, 2014-
10
• VMによるコンテナ隔離
• オーバーヘッドが大きい。
• IaaS 上では、Nested Virtualization が必要条件。
• seccomp、SELinux、AppArmor
• 事後防衛的(脆弱性を突かれたときだけ有効)
11
いくつかの防護策
過去、コンテナにも影響した重大な脆弱性
• CVE-2016-5195 DirtyCow
• コンテナから脱獄してホストのroot権限を奪取可能

• CVE-2017-5753/5715/5754 Spectre/Meltdown
• ホストのカーネルメモリ漏洩
12
ルールベース・アクセス制御の特徴
13
Application
Host Kernel
Limited system calls
Hardware
ルールベース・アクセス制御の課題
14
• 完璧なポリシーの定義は現実的には困難。
• ポリシーを過剰に設定しやすい。
• 逆にポリシーが不足することもある。
• カーネルの脆弱性は防げない。
• 他の防護策と掛け合わせた運用が不可欠。
Application
Host Kernel
Limited system calls
Hardware
VMの特徴
• VM = ハードウェア仮想化してゲストに提供
• VM内で動作するプロセスは完全に隔離。
• アプリケーション互換性も高い。
• 完全仮想化なら…
• Meltdown/Spector にも有効。
15
Application
Guest Kernel
System calls
VMM
Virtual hardware
System calls
Host Kernel
Hardware
VMの課題
• HyperVisor + VMM + Guest Kernel
• オーバーヘッドが大きい。
• パフォーマンスが劣化。
• リソース配備の柔軟性が低下
• CPUやメモリリソースを固定的に確保。
• 他のコンテナとのリソース共有不可。
16
Application
Guest Kernel
System calls
VMM
Virtual hardware
System calls
Host Kernel
Hardware
VMの課題
• 1VM:1Container 構成は煩雑
• エージェントの追加インストールが必要。
• 監視エージェント
• サービスディスカバリ用エージェント
• モノリシックなアプリ構成になりがち。
17
Application
Guest Kernel
System calls
VMM
Virtual hardware
System calls
Host Kernel
Hardware
gVisor とは
• ユーザー空間で実行可能なゲストカーネル。
• アプリケーションとホストカーネルを分離。
• およそ20万行のGo言語で実装。
• ptrace版、KVM版がある。
• Docker、Kubernetes に対応。

(runsc というOCIランタイムで提供)
18
Application
gVisor
System calls
Host Kernel
Limited system calls
Hardware
Docker Engine
Containerd
runcrunc runc
Docker Engine
Containerd
runscrunsc runsc
gVisor のパフォーマンス
21
150ms 15MB
コンテナ起動にかかる時間 メモリのオーバーヘッド
User
Kernel
Host Kernel
Application
Gofer
(File system proxy)
Sentry
(Guest Kernel)
ptrace seccomp
9P
runsc
• ゲストカーネルのシステムコールを奪取(ptrace)
• 奪取したシステムコールをフィルタ(seccomp)
• ゲストカーネルでシステムコールを命令置換(gvisor)
• 無害なシステムコールが、ホストカーネルに転送。
gVisor の挙動
23
「Linuxの機能で、Linuxを実装している。」
Sentry プロセス
• ゲストカーネル(互換カーネル)
• 空のユーザー名前空間 (User Namespace) で実行。
• ゲストのシステムコールを待ち受ける。
• seccomp でホストに転送するシステムコールを制限。
• 安全なユーザコード実行とシステムコール処理を担当。
24
Gofer プロセス
• ファイルシステムプロキシ
• サンドボックスを経由するファイルシステム操作を担当。
• アプリの代わりにホストのファイルをオープン。
• オープンしたファイルを Sentry に転送。

(Sentry はホストファイルに直接アクセスしない。)
25
netstack
• gVisor 独自のネットワークスタック
• ネットワーク通信は Sentry が担当。
• ホストのネットワークスタックからは完全に隔離。
• データリンク層のフレームは、Dockerが持つネットワー
ク名前空間内にある仮想デバイスに直接書き込み。
• ネットワーク・パススルーもサポート。
26
gVisor の技術的トレードオフ
27
• コンテナのセキュリティは向上
• ホストカーネルを隠 。
• VM相当のプロセス隔離を実現。
• エミュレーションによるパフォーマンス劣化
• アプリケーション互換性が低下。
• 頻繁なシステムコールでは性能が劣化。
Application
gVisor
System calls
Host Kernel
Limited system calls
Hardware
• ptrace のパフォーマンスがネック。
• 将来的には、ptrace 以外のものに置き換わるかも。
• (実験的に)KVM を使用するアプローチも選べる。
28
まだまだ課題はある・・・
• 約200のシステムコールをサポートしているが・・・
• 未実装のシステムコールも多い
• System V 共有メモリ(PostgreSQLが動かない…)
• SOCK_RAW(Pingが動かない…)
• etc…
• パフォーマンス確認に使いたいベンチマークも動かない…
29
まだまだ課題はある・・・
• GPUに非対応
• どのようなシステムコールが送信されるかが不明瞭。
• バイナリBLOBなドライバはVMでの隔離がおすすめ
• ルールベースのポリシーでの保護が困難。
• 脆弱性を勝手に修正できない。
30
まだまだ課題はある・・・
31
ま と め
• VM(ハードウェア仮想化)
• リソースやプロセスを完全に隔離可能。
• コンテナ(ネームスペース分離)
• 単一の脆弱性で収容ホスト内部を破壊される。
• gVisor(ゲストカーネル、互換カーネル)
• ゲストカーネルの特権を奪取されても被害は最小限。
32
まとめ
Quick Start
• Go to: https://github.com/google/gvisor
• Build and Install gVisor
33
$ docker run --runtime=runsc hello-world
$ docker run -d --runtime=runsc -p 80:80 nginx
THANK YOU!

More Related Content

PDF
BuildKitの概要と最近の機能
PPTX
本当は恐ろしい分散システムの話
PDF
Fluentdのお勧めシステム構成パターン
PPTX
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
PPTX
Dockerからcontainerdへの移行
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PDF
Dockerからcontainerdへの移行
PPTX
Docker Tokyo
BuildKitの概要と最近の機能
本当は恐ろしい分散システムの話
Fluentdのお勧めシステム構成パターン
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
Dockerからcontainerdへの移行
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Dockerからcontainerdへの移行
Docker Tokyo

What's hot (20)

PPTX
BuildKitによる高速でセキュアなイメージビルド
PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
PDF
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
PDF
DPDKによる高速コンテナネットワーキング
PPTX
トランザクションをSerializableにする4つの方法
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
仮想化環境におけるパケットフォワーディング
PDF
Linux女子部 systemd徹底入門
PPTX
トランザクションの設計と進化
PDF
ゼロからはじめるKVM超入門
PDF
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PPTX
Redisの特徴と活用方法について
PDF
DockerとPodmanの比較
PDF
Docker Compose 徹底解説
PDF
ARMアーキテクチャにおけるセキュリティ機構の紹介
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
大規模DCのネットワークデザイン
PDF
SQL大量発行処理をいかにして高速化するか
BuildKitによる高速でセキュアなイメージビルド
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
DPDKによる高速コンテナネットワーキング
トランザクションをSerializableにする4つの方法
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
仮想化環境におけるパケットフォワーディング
Linux女子部 systemd徹底入門
トランザクションの設計と進化
ゼロからはじめるKVM超入門
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Redisの特徴と活用方法について
DockerとPodmanの比較
Docker Compose 徹底解説
ARMアーキテクチャにおけるセキュリティ機構の紹介
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
大規模DCのネットワークデザイン
SQL大量発行処理をいかにして高速化するか
Ad

Similar to 20分でわかるgVisor入門 (20)

PPTX
コンテナの基本 ~Docker実践~
PPTX
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
PDF
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
PPTX
BuildKitによる高速でセキュアなイメージビルド (LT)
PDF
Raspberry Pi用のコンテナをクラウドでビルドする方法
PPTX
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
Hajimete k3s agenda_201008
PPTX
サーバーレスで ガチ本番運用までやってるお話し
PPTX
Rootlessコンテナ
PDF
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
PPTX
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
PDF
VagrantユーザのためのDocker入門
PDF
Hajimete k3s agenda_200730
PDF
Windows Server 2016でコンテナを動かしてみた
PPTX
Introduction of Rancher at OSC Tokyo 17 Spring
PDF
Kubernetes上のWindows Server コンテナーのマイクロサービス間分離
PDF
Kubernetes Cluster Adminやってました #con_rider
PPTX
Web サービス インフラの近未来
PDF
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
コンテナの基本 ~Docker実践~
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
BuildKitによる高速でセキュアなイメージビルド (LT)
Raspberry Pi用のコンテナをクラウドでビルドする方法
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
コンテナ未経験新人が学ぶコンテナ技術入門
Hajimete k3s agenda_201008
サーバーレスで ガチ本番運用までやってるお話し
Rootlessコンテナ
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
VagrantユーザのためのDocker入門
Hajimete k3s agenda_200730
Windows Server 2016でコンテナを動かしてみた
Introduction of Rancher at OSC Tokyo 17 Spring
Kubernetes上のWindows Server コンテナーのマイクロサービス間分離
Kubernetes Cluster Adminやってました #con_rider
Web サービス インフラの近未来
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Ad

More from Shuji Yamada (17)

PDF
GitHub Enterpriseの導入事例と実践GitHub Actions
PDF
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
PDF
現場!実物!実践!マルチクラスタを運用するときの課題とコツ
PDF
Arukas meet Mesos/Marathon
PDF
10分でわかる Cilium と XDP / BPF
PDF
会社にGitHub Enterpriseを導入してみた話
PDF
10分でわかる marathon-lb
PDF
コンテナのユースケース考察
PDF
Kanban 301「プロセスマネジメント(成長エンジン)」
PDF
Kanban 101「明日から使えるかもしれないカンバン」
PDF
Velocity - Lean, Velocity and Anti-Fragile 「ボトルネックを飼い慣らせ!」
PDF
自動テストによって生み出される価値
PDF
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
PDF
お手軽OpenFlow試験環境 Mininet
PDF
Sensu -The Next Generateion Monitoring Framework-
PDF
【Interop Tokyo 2013】 どうする?どうなる?SDN/クラウド時代の運用管理 ~データセンター、クラウド提供事業者の立場から~
PDF
2015-01-27 Introduction to Docker
GitHub Enterpriseの導入事例と実践GitHub Actions
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
現場!実物!実践!マルチクラスタを運用するときの課題とコツ
Arukas meet Mesos/Marathon
10分でわかる Cilium と XDP / BPF
会社にGitHub Enterpriseを導入してみた話
10分でわかる marathon-lb
コンテナのユースケース考察
Kanban 301「プロセスマネジメント(成長エンジン)」
Kanban 101「明日から使えるかもしれないカンバン」
Velocity - Lean, Velocity and Anti-Fragile 「ボトルネックを飼い慣らせ!」
自動テストによって生み出される価値
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
お手軽OpenFlow試験環境 Mininet
Sensu -The Next Generateion Monitoring Framework-
【Interop Tokyo 2013】 どうする?どうなる?SDN/クラウド時代の運用管理 ~データセンター、クラウド提供事業者の立場から~
2015-01-27 Introduction to Docker

20分でわかるgVisor入門