SlideShare a Scribd company logo
1 of 25
Copyright©2019 NTT Corp. All Rights Reserved.
NTT ソフトウェアイノベーションセンタ
須田 瑛大
root権限無しでKubernetesを動かす
Kubernetes Meetup Tokyo #17 (2019/03/18)
https://slideshare.net/AkihiroSuda
2
Copyright©2019 NTT Corp. All Rights Reserved.
• コンテナ関連OSSのメンテナ(いわゆるコミッタ)を務めている
• Docker Moby メンテナ (2016年11月~)
• 2017年4月,OSSプロジェクトとしてのDockerはMobyに名前が変わった
• 商用製品としてのDockerはMobyをベースとして開発されている
• Moby BuildKitメンテナ (2017年夏 プロジェクト発足時~)
• 次世代 `docker build`
• CNCF containerdメンテナ (2017年9月~)
• Kubernetesなどで利用できる次世代コンテナランタイム
: ≒ :
RHEL Fedora
自己紹介
3
Copyright©2019 NTT Corp. All Rights Reserved.
デモ
4
Copyright©2019 NTT Corp. All Rights Reserved.
• Kubernetes全体を非特権ユーザで動作させることにより,セキ
ュリティを強化
• OCIランタイム (runc)
• CRIランタイム (containerd, CRI-O, Docker)
• CNIプラグイン (Flannel)
• kubelet, kube-proxy, kube-apiserver, kube-scheduler, kube-
controller-manager
• securityContext.runAsUser とか Node-level UserNSとは別
• これらはコンテナを非特権ユーザで動作させるが,Kubernetesそのもの
やコンテナランタイムはrootで動作
Rootless Kubernetes
5
Copyright©2019 NTT Corp. All Rights Reserved.
•Kubernetesやランタイムが抱えうる脆弱性の影響範囲を
限定
•root権限を与えられない環境へのKubernetesのデプロイ
(特にHPC)
•Kubernetes-on-Kubernetes
Rootless Kubernetesの目的
6
Copyright©2019 NTT Corp. All Rights Reserved.
•Kubernetes CVE-2017-1002101, CVE-2017-
1002102
• volume関係の脆弱性を通じて,ホストのファイルシステムへのアクセス
が可能
•Git CVE-2018-11235 (KubernetesのgitRepo volume
に影響)
• 不正なリポジトリをcloneすると,任意のバイナリがホスト上のrootで実
行される
•Kubernetes CVE-2018-1002105
• 不正なAPI呼び出しにより,cluster-adminの奪取が可能
Kubernetesの脆弱性
7
Copyright©2019 NTT Corp. All Rights Reserved.
•2019年初,須田が発見,Giuseppe Scrivano (Red
Hat)が修正
•DOCKER_RAMDISK=1 が設定されている環境で,/proc
や /sys に対するマスクを解除することが可能だった
• /proc/sys/kernel/core_pattern や /sys/kernel/uevent_helper
を通じて,ホスト上のroot権限で任意のコマンドの実行が可能
•Minikube v0.33.0以前のbreakoutが可能
runc #1962
8
Copyright©2019 NTT Corp. All Rights Reserved.
•/proc/self を通じてruncバイナリの書き換えが可能
•LXCやOpenVZなど,runc以外のコンテナ実装にも同じ脆
弱性が存在していた
•コンテナをセキュアに実装することは本質的に難しい
→今後も色々な脆弱性が見つかることが予想される
runc CVE-2019-5736
9
Copyright©2019 NTT Corp. All Rights Reserved.
仕組み
10
Copyright©2019 NTT Corp. All Rights Reserved.
•非特権ユーザをrootに見せかけることが出来る
• 見かけのUIDが0になる
• Network namespacesやmount namespacesを作成できるようになる
•真のroot権限を与えるわけではない (sudoとは全く異なる)
• user namespace外でアクセスできないファイルは,user namespace内の
rootでもやはりアクセスできない (UID 65534で所有されているように見え
る)
• カーネルモジュールの読み込みは出来ない
• 再起動出来ない
User namespaces
11
Copyright©2019 NTT Corp. All Rights Reserved.
•非特権ユーザでは,UID 0のみが存在するuser
namespaceしか作れないので,コンテナには不都合
•SETUIDバイナリ /usr/bin/newuidmap,
/usr/bin/newgidmapを用いることで,複数ユーザのマッ
ピングが可能
• カーネル 4.14ではCAP_SETUID, CAP_SETGID file capabilityさえ設定し
ておけば,SETUID不要
User namespaces
12
Copyright©2019 NTT Corp. All Rights Reserved.
User namespaces
/etc/subuid:
1000:420000:65536
/proc/42/uid_map:
0 1000 1
1 420000 65536
rootで予め設定を記述しておく
(最近のdistroではたいてい
adduser時に自動的に記述される)
UID 1000がNS内では0
420000-485535がNS内では1-65536
にマップされる
13
Copyright©2019 NTT Corp. All Rights Reserved.
•subuidはLDAP環境だと設定が困難
•案1: LDAPに対応したSETUIDバイナリを作る
• https://github.com/shadow-maint/shadow/issues/154
• 正しく実装しないとホストのrootを奪われる可能性がある
•案2: ptraceやseccomp from user space (kernel 5.0)を
用いて,単一UIDでsubuidをエミュレートする
• ptraceによるPOC: https://github.com/rootless-containers/runrootless
• 正しく実装しないとNS内の非rootにNS内のrootを奪われる可能性がある
(が,ホストのrootは守られる)
User namespaces: Future work
14
Copyright©2019 NTT Corp. All Rights Reserved.
•User namespaceを作ることで,非特権ユーザでも
network namespacesを作れるようになる
• iptables, VXLANなどを操作できるようになる他, abstract socketのアイ
ソレーションなども可能になる
• tcpdumpなども使えるようになるので,コンテナ以外にもユースケースが色
々ありそう
•ただし,ホスト上にbridgeデバイスを作成したり,NSと繋
がるveth pairを作成したりはできない
• インターネットに出られないので,従来はあまり役に立たなかった
Network namespaces
15
Copyright©2019 NTT Corp. All Rights Reserved.
•veth pairの代わりにSlirpを用いることで,インターネット
に出ることが可能
• ユーザモードのTCP/IP実装
•NS内にTAPデバイスを作成し,NS外のSlirpとUNIX
domain socketで通信する
•slirp4netnsやVPNKitなど,複数の実装がある
• slirp4netnsは qemuの –netdev userをベースとし,須田が中心となって
開発
• VPNKitはMirageOSをベースとし,Docker社が開発
• Docker for MacやDocker for Windowsで使われている
Network namespaces
16
Copyright©2019 NTT Corp. All Rights Reserved.
•slirp4netnsが最も高速
• network namespacesに用途を絞っているので,パケットを余計にコピー
しなくて済んでいる
• 未だ改善の余地あり
Network namespaces
MTU=1500 MTU=4000 MTU=16384 MTU=65520
vde_plug 763 Mbps Unsupported Unsupported Unsupported
VPNKit 514 Mbps 526 Mbps 540 Mbps Unsupported
slirp4netns 1.07 Gbps 2.78 Gbps 4.55 Gbps 9.21 Gbps
cf. rootful veth 52.1 Gbps 45.4 Gbps 43.6 Gbps 51.5 Gbps
ベンチマーク: iperf3 (netns -> host), Travis上で測定 rootless-containers/rootlesskit#12
17
Copyright©2019 NTT Corp. All Rights Reserved.
•NS内のportには外から接続できないので,個別にexposeす
る必要がある
•slirp4netns: 7.82 Gbps
•socat: 8.50 Gbps
•RootlessKit: 23.7 Gbps
Network namespaces: inbound
ベンチマーク: iperf3 (host -> netns), Travis上で測定 rootless-containers/rootlesskit#33
L2を飛ばして直接L3で転送できる
余計なパケットコピーを更に削減
18
Copyright©2019 NTT Corp. All Rights Reserved.
•SETUIDバイナリ lxc-user-nicを用いた,非slirpモードも
対応予定
• ただし過去にCVE-2017-5985, CVE-2018-6556が見つかっている (いず
れもCVSS v3スコア 3.3)
•パフォーマンスとセキュリティのバランスを柔軟に調節で
きるようになる
Network namespaces: future work
19
Copyright©2019 NTT Corp. All Rights Reserved.
•User namespaceを作ることで,非特権ユーザでもmount
namespacesを作れるようになる
•しかし,bind-mount, tmpfs, procfs, sysfsくらいしか
mountできない
•特にoverlayfsが使えないことがコンテナ用途では問題
• ただしUbuntuではカーネルにパッチが当てられているので使える
Mount namespaces
20
Copyright©2019 NTT Corp. All Rights Reserved.
•XFSでは copy_file_range (2) を用いてCoW出来る
•kernel 4.18以降では,fuse-overlayfsを利用できる
• 今のところCRIランタイムではCRI-Oのみが対応
Mount namespaces
21
Copyright©2019 NTT Corp. All Rights Reserved.
•cgroup2では,非特権ユーザへの権限委譲が正式にサポー
トされている (nsdelegate)
•OCIランタイムでは,未だcgroup2は正式にサポートされて
いない
• https://github.com/opencontainers/runtime-spec/issues/1002
•Kubernetesエコシステム全体でcgroup2が使えるようにな
るには,1年くらいはかかりそう
• 今のところは,単にcgroupを無効化するのが安全
Cgroup
22
Copyright©2019 NTT Corp. All Rights Reserved.
実装状況
23
Copyright©2019 NTT Corp. All Rights Reserved.
•kubelet と kube-proxy にパッチを当てる必要がある
• cgroup 及び,sysctl関連のコードを無効化
•kubeadmは未だ使えない
•OCIランタイム: runcに加え,nvidia-container-runtime
が利用可能
•CRIランタイム: containerd, CRI-O, Docker いずれも利
用可能 (experimental)
•CNIプラグイン: Flannelが利用可能
実装状況
24
Copyright©2019 NTT Corp. All Rights Reserved.
•root権限を不要化した,実験的なKubernetesディストリビ
ューション
https://github.com/rootless-containers/usernetes
•ホームディレクトリに簡単にインストールできる
Usernetes
$ tar xjvf usernetes-x86_64.tbz
$ cd usernetes
$ ./run.sh
$ ./kubectl.sh apply –f foo.yaml
25
Copyright©2019 NTT Corp. All Rights Reserved.
•Rancher社が開発する軽量Kubernetesディストリビューシ
ョン https://github.com/rancher/k3s
• "5 less than k8s"
• etcdをsqlite3で置き換えたり,かなり大規模な変更がなされている
•Usernetesの成果物がマージされつつある
• https://github.com/rancher/k3s/pull/195
k3s

More Related Content

What's hot

Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPFShuji Yamada
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Platform - Japan
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動Kohei Tokunaga
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48Preferred Networks
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)NTT DATA Technology & Innovation
 

What's hot (20)

Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
自宅k8s/vSphere入門
自宅k8s/vSphere入門自宅k8s/vSphere入門
自宅k8s/vSphere入門
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
 

Similar to root権限無しでKubernetesを動かす

BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)Akihiro Suda
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
RootlessコンテナAkihiro Suda
 
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)Akihiro Suda
 
高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)
高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)
高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)Akihiro Suda
 
日本と世界のDockerコミュニティ
日本と世界のDockerコミュニティ日本と世界のDockerコミュニティ
日本と世界のDockerコミュニティAkihiro Suda
 
make x dockerで作るAlpaca流開発環境
make x dockerで作るAlpaca流開発環境make x dockerで作るAlpaca流開発環境
make x dockerで作るAlpaca流開発環境Tomoya Kitayama
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向NTT Software Innovation Center
 
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)NTT DATA Technology & Innovation
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマットAkihiro Suda
 
Moby Project (May 25, 2017, Tokyo)
Moby Project (May 25, 2017, Tokyo)Moby Project (May 25, 2017, Tokyo)
Moby Project (May 25, 2017, Tokyo)Akihiro Suda
 
Docker registry入門 第五回コンテナ型仮想化の情報交換会
Docker registry入門 第五回コンテナ型仮想化の情報交換会Docker registry入門 第五回コンテナ型仮想化の情報交換会
Docker registry入門 第五回コンテナ型仮想化の情報交換会Kengo Okitsu
 
Provisioning Nutanix VMs with Terraform
Provisioning Nutanix VMs with TerraformProvisioning Nutanix VMs with Terraform
Provisioning Nutanix VMs with TerraformWataru Unno
 
TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理Yuki Yamashita
 
CNCF Updates 2019 Winter version and Knative
CNCF Updates 2019  Winter version and KnativeCNCF Updates 2019  Winter version and Knative
CNCF Updates 2019 Winter version and KnativeMasahito Zembutsu
 
ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118Atomu Hidaka
 
ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発YASUKAZU NAGATOMI
 
KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)Akihiro Suda
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことbitbank, Inc. Tokyo, Japan
 
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとはKoto Shigeru
 

Similar to root権限無しでKubernetesを動かす (20)

BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
 
高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)
高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)
高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)
 
日本と世界のDockerコミュニティ
日本と世界のDockerコミュニティ日本と世界のDockerコミュニティ
日本と世界のDockerコミュニティ
 
make x dockerで作るAlpaca流開発環境
make x dockerで作るAlpaca流開発環境make x dockerで作るAlpaca流開発環境
make x dockerで作るAlpaca流開発環境
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向
 
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット
 
Moby Project (May 25, 2017, Tokyo)
Moby Project (May 25, 2017, Tokyo)Moby Project (May 25, 2017, Tokyo)
Moby Project (May 25, 2017, Tokyo)
 
Docker registry入門 第五回コンテナ型仮想化の情報交換会
Docker registry入門 第五回コンテナ型仮想化の情報交換会Docker registry入門 第五回コンテナ型仮想化の情報交換会
Docker registry入門 第五回コンテナ型仮想化の情報交換会
 
Provisioning Nutanix VMs with Terraform
Provisioning Nutanix VMs with TerraformProvisioning Nutanix VMs with Terraform
Provisioning Nutanix VMs with Terraform
 
TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理TungstenFabricでOpenStackとk8sをラクラク管理
TungstenFabricでOpenStackとk8sをラクラク管理
 
CNCF Updates 2019 Winter version and Knative
CNCF Updates 2019  Winter version and KnativeCNCF Updates 2019  Winter version and Knative
CNCF Updates 2019 Winter version and Knative
 
ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118
 
ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発
 
KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
 
SkyWay HandsOn
SkyWay HandsOnSkyWay HandsOn
SkyWay HandsOn
 

More from Akihiro Suda

20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
20240321 [KubeCon EU Pavilion] Lima.pdf_
20240321 [KubeCon EU Pavilion] Lima.pdf_20240321 [KubeCon EU Pavilion] Lima.pdf_
20240321 [KubeCon EU Pavilion] Lima.pdf_Akihiro Suda
 
20240320 [KubeCon EU Pavilion] containerd.pdf
20240320 [KubeCon EU Pavilion] containerd.pdf20240320 [KubeCon EU Pavilion] containerd.pdf
20240320 [KubeCon EU Pavilion] containerd.pdfAkihiro Suda
 
20240201 [HPC Containers] Rootless Containers.pdf
20240201 [HPC Containers] Rootless Containers.pdf20240201 [HPC Containers] Rootless Containers.pdf
20240201 [HPC Containers] Rootless Containers.pdfAkihiro Suda
 
[Podman Special Event] Kubernetes in Rootless Podman
[Podman Special Event] Kubernetes in Rootless Podman[Podman Special Event] Kubernetes in Rootless Podman
[Podman Special Event] Kubernetes in Rootless PodmanAkihiro Suda
 
[KubeConNA2023] Lima pavilion
[KubeConNA2023] Lima pavilion[KubeConNA2023] Lima pavilion
[KubeConNA2023] Lima pavilionAkihiro Suda
 
[KubeConNA2023] containerd pavilion
[KubeConNA2023] containerd pavilion[KubeConNA2023] containerd pavilion
[KubeConNA2023] containerd pavilionAkihiro Suda
 
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdfAkihiro Suda
 
[CNCF TAG-Runtime] Usernetes Gen2
[CNCF TAG-Runtime] Usernetes Gen2[CNCF TAG-Runtime] Usernetes Gen2
[CNCF TAG-Runtime] Usernetes Gen2Akihiro Suda
 
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...Akihiro Suda
 
The internals and the latest trends of container runtimes
The internals and the latest trends of container runtimesThe internals and the latest trends of container runtimes
The internals and the latest trends of container runtimesAkihiro Suda
 
[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilion[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilionAkihiro Suda
 
[KubeConEU2023] containerd pavilion
[KubeConEU2023] containerd pavilion[KubeConEU2023] containerd pavilion
[KubeConEU2023] containerd pavilionAkihiro Suda
 
[Container Plumbing Days 2023] Why was nerdctl made?
[Container Plumbing Days 2023] Why was nerdctl made?[Container Plumbing Days 2023] Why was nerdctl made?
[Container Plumbing Days 2023] Why was nerdctl made?Akihiro Suda
 
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
[FOSDEM2023] Bit-for-bit reproducible builds with DockerfileAkihiro Suda
 
[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] LimaAkihiro Suda
 
[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOS[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOSAkihiro Suda
 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...Akihiro Suda
 
[Docker Tokyo #35] Docker 20.10
[Docker Tokyo #35] Docker 20.10[Docker Tokyo #35] Docker 20.10
[Docker Tokyo #35] Docker 20.10Akihiro Suda
 
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
[KubeCon EU 2021] Introduction and Deep Dive Into ContainerdAkihiro Suda
 

More from Akihiro Suda (20)

20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
20240321 [KubeCon EU Pavilion] Lima.pdf_
20240321 [KubeCon EU Pavilion] Lima.pdf_20240321 [KubeCon EU Pavilion] Lima.pdf_
20240321 [KubeCon EU Pavilion] Lima.pdf_
 
20240320 [KubeCon EU Pavilion] containerd.pdf
20240320 [KubeCon EU Pavilion] containerd.pdf20240320 [KubeCon EU Pavilion] containerd.pdf
20240320 [KubeCon EU Pavilion] containerd.pdf
 
20240201 [HPC Containers] Rootless Containers.pdf
20240201 [HPC Containers] Rootless Containers.pdf20240201 [HPC Containers] Rootless Containers.pdf
20240201 [HPC Containers] Rootless Containers.pdf
 
[Podman Special Event] Kubernetes in Rootless Podman
[Podman Special Event] Kubernetes in Rootless Podman[Podman Special Event] Kubernetes in Rootless Podman
[Podman Special Event] Kubernetes in Rootless Podman
 
[KubeConNA2023] Lima pavilion
[KubeConNA2023] Lima pavilion[KubeConNA2023] Lima pavilion
[KubeConNA2023] Lima pavilion
 
[KubeConNA2023] containerd pavilion
[KubeConNA2023] containerd pavilion[KubeConNA2023] containerd pavilion
[KubeConNA2023] containerd pavilion
 
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
 
[CNCF TAG-Runtime] Usernetes Gen2
[CNCF TAG-Runtime] Usernetes Gen2[CNCF TAG-Runtime] Usernetes Gen2
[CNCF TAG-Runtime] Usernetes Gen2
 
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
[DockerCon 2023] Reproducible builds with BuildKit for software supply chain ...
 
The internals and the latest trends of container runtimes
The internals and the latest trends of container runtimesThe internals and the latest trends of container runtimes
The internals and the latest trends of container runtimes
 
[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilion[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilion
 
[KubeConEU2023] containerd pavilion
[KubeConEU2023] containerd pavilion[KubeConEU2023] containerd pavilion
[KubeConEU2023] containerd pavilion
 
[Container Plumbing Days 2023] Why was nerdctl made?
[Container Plumbing Days 2023] Why was nerdctl made?[Container Plumbing Days 2023] Why was nerdctl made?
[Container Plumbing Days 2023] Why was nerdctl made?
 
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
[FOSDEM2023] Bit-for-bit reproducible builds with Dockerfile
 
[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima
 
[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOS[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOS
 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
 
[Docker Tokyo #35] Docker 20.10
[Docker Tokyo #35] Docker 20.10[Docker Tokyo #35] Docker 20.10
[Docker Tokyo #35] Docker 20.10
 
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
[KubeCon EU 2021] Introduction and Deep Dive Into Containerd
 

root権限無しでKubernetesを動かす

  • 1. Copyright©2019 NTT Corp. All Rights Reserved. NTT ソフトウェアイノベーションセンタ 須田 瑛大 root権限無しでKubernetesを動かす Kubernetes Meetup Tokyo #17 (2019/03/18) https://slideshare.net/AkihiroSuda
  • 2. 2 Copyright©2019 NTT Corp. All Rights Reserved. • コンテナ関連OSSのメンテナ(いわゆるコミッタ)を務めている • Docker Moby メンテナ (2016年11月~) • 2017年4月,OSSプロジェクトとしてのDockerはMobyに名前が変わった • 商用製品としてのDockerはMobyをベースとして開発されている • Moby BuildKitメンテナ (2017年夏 プロジェクト発足時~) • 次世代 `docker build` • CNCF containerdメンテナ (2017年9月~) • Kubernetesなどで利用できる次世代コンテナランタイム : ≒ : RHEL Fedora 自己紹介
  • 3. 3 Copyright©2019 NTT Corp. All Rights Reserved. デモ
  • 4. 4 Copyright©2019 NTT Corp. All Rights Reserved. • Kubernetes全体を非特権ユーザで動作させることにより,セキ ュリティを強化 • OCIランタイム (runc) • CRIランタイム (containerd, CRI-O, Docker) • CNIプラグイン (Flannel) • kubelet, kube-proxy, kube-apiserver, kube-scheduler, kube- controller-manager • securityContext.runAsUser とか Node-level UserNSとは別 • これらはコンテナを非特権ユーザで動作させるが,Kubernetesそのもの やコンテナランタイムはrootで動作 Rootless Kubernetes
  • 5. 5 Copyright©2019 NTT Corp. All Rights Reserved. •Kubernetesやランタイムが抱えうる脆弱性の影響範囲を 限定 •root権限を与えられない環境へのKubernetesのデプロイ (特にHPC) •Kubernetes-on-Kubernetes Rootless Kubernetesの目的
  • 6. 6 Copyright©2019 NTT Corp. All Rights Reserved. •Kubernetes CVE-2017-1002101, CVE-2017- 1002102 • volume関係の脆弱性を通じて,ホストのファイルシステムへのアクセス が可能 •Git CVE-2018-11235 (KubernetesのgitRepo volume に影響) • 不正なリポジトリをcloneすると,任意のバイナリがホスト上のrootで実 行される •Kubernetes CVE-2018-1002105 • 不正なAPI呼び出しにより,cluster-adminの奪取が可能 Kubernetesの脆弱性
  • 7. 7 Copyright©2019 NTT Corp. All Rights Reserved. •2019年初,須田が発見,Giuseppe Scrivano (Red Hat)が修正 •DOCKER_RAMDISK=1 が設定されている環境で,/proc や /sys に対するマスクを解除することが可能だった • /proc/sys/kernel/core_pattern や /sys/kernel/uevent_helper を通じて,ホスト上のroot権限で任意のコマンドの実行が可能 •Minikube v0.33.0以前のbreakoutが可能 runc #1962
  • 8. 8 Copyright©2019 NTT Corp. All Rights Reserved. •/proc/self を通じてruncバイナリの書き換えが可能 •LXCやOpenVZなど,runc以外のコンテナ実装にも同じ脆 弱性が存在していた •コンテナをセキュアに実装することは本質的に難しい →今後も色々な脆弱性が見つかることが予想される runc CVE-2019-5736
  • 9. 9 Copyright©2019 NTT Corp. All Rights Reserved. 仕組み
  • 10. 10 Copyright©2019 NTT Corp. All Rights Reserved. •非特権ユーザをrootに見せかけることが出来る • 見かけのUIDが0になる • Network namespacesやmount namespacesを作成できるようになる •真のroot権限を与えるわけではない (sudoとは全く異なる) • user namespace外でアクセスできないファイルは,user namespace内の rootでもやはりアクセスできない (UID 65534で所有されているように見え る) • カーネルモジュールの読み込みは出来ない • 再起動出来ない User namespaces
  • 11. 11 Copyright©2019 NTT Corp. All Rights Reserved. •非特権ユーザでは,UID 0のみが存在するuser namespaceしか作れないので,コンテナには不都合 •SETUIDバイナリ /usr/bin/newuidmap, /usr/bin/newgidmapを用いることで,複数ユーザのマッ ピングが可能 • カーネル 4.14ではCAP_SETUID, CAP_SETGID file capabilityさえ設定し ておけば,SETUID不要 User namespaces
  • 12. 12 Copyright©2019 NTT Corp. All Rights Reserved. User namespaces /etc/subuid: 1000:420000:65536 /proc/42/uid_map: 0 1000 1 1 420000 65536 rootで予め設定を記述しておく (最近のdistroではたいてい adduser時に自動的に記述される) UID 1000がNS内では0 420000-485535がNS内では1-65536 にマップされる
  • 13. 13 Copyright©2019 NTT Corp. All Rights Reserved. •subuidはLDAP環境だと設定が困難 •案1: LDAPに対応したSETUIDバイナリを作る • https://github.com/shadow-maint/shadow/issues/154 • 正しく実装しないとホストのrootを奪われる可能性がある •案2: ptraceやseccomp from user space (kernel 5.0)を 用いて,単一UIDでsubuidをエミュレートする • ptraceによるPOC: https://github.com/rootless-containers/runrootless • 正しく実装しないとNS内の非rootにNS内のrootを奪われる可能性がある (が,ホストのrootは守られる) User namespaces: Future work
  • 14. 14 Copyright©2019 NTT Corp. All Rights Reserved. •User namespaceを作ることで,非特権ユーザでも network namespacesを作れるようになる • iptables, VXLANなどを操作できるようになる他, abstract socketのアイ ソレーションなども可能になる • tcpdumpなども使えるようになるので,コンテナ以外にもユースケースが色 々ありそう •ただし,ホスト上にbridgeデバイスを作成したり,NSと繋 がるveth pairを作成したりはできない • インターネットに出られないので,従来はあまり役に立たなかった Network namespaces
  • 15. 15 Copyright©2019 NTT Corp. All Rights Reserved. •veth pairの代わりにSlirpを用いることで,インターネット に出ることが可能 • ユーザモードのTCP/IP実装 •NS内にTAPデバイスを作成し,NS外のSlirpとUNIX domain socketで通信する •slirp4netnsやVPNKitなど,複数の実装がある • slirp4netnsは qemuの –netdev userをベースとし,須田が中心となって 開発 • VPNKitはMirageOSをベースとし,Docker社が開発 • Docker for MacやDocker for Windowsで使われている Network namespaces
  • 16. 16 Copyright©2019 NTT Corp. All Rights Reserved. •slirp4netnsが最も高速 • network namespacesに用途を絞っているので,パケットを余計にコピー しなくて済んでいる • 未だ改善の余地あり Network namespaces MTU=1500 MTU=4000 MTU=16384 MTU=65520 vde_plug 763 Mbps Unsupported Unsupported Unsupported VPNKit 514 Mbps 526 Mbps 540 Mbps Unsupported slirp4netns 1.07 Gbps 2.78 Gbps 4.55 Gbps 9.21 Gbps cf. rootful veth 52.1 Gbps 45.4 Gbps 43.6 Gbps 51.5 Gbps ベンチマーク: iperf3 (netns -> host), Travis上で測定 rootless-containers/rootlesskit#12
  • 17. 17 Copyright©2019 NTT Corp. All Rights Reserved. •NS内のportには外から接続できないので,個別にexposeす る必要がある •slirp4netns: 7.82 Gbps •socat: 8.50 Gbps •RootlessKit: 23.7 Gbps Network namespaces: inbound ベンチマーク: iperf3 (host -> netns), Travis上で測定 rootless-containers/rootlesskit#33 L2を飛ばして直接L3で転送できる 余計なパケットコピーを更に削減
  • 18. 18 Copyright©2019 NTT Corp. All Rights Reserved. •SETUIDバイナリ lxc-user-nicを用いた,非slirpモードも 対応予定 • ただし過去にCVE-2017-5985, CVE-2018-6556が見つかっている (いず れもCVSS v3スコア 3.3) •パフォーマンスとセキュリティのバランスを柔軟に調節で きるようになる Network namespaces: future work
  • 19. 19 Copyright©2019 NTT Corp. All Rights Reserved. •User namespaceを作ることで,非特権ユーザでもmount namespacesを作れるようになる •しかし,bind-mount, tmpfs, procfs, sysfsくらいしか mountできない •特にoverlayfsが使えないことがコンテナ用途では問題 • ただしUbuntuではカーネルにパッチが当てられているので使える Mount namespaces
  • 20. 20 Copyright©2019 NTT Corp. All Rights Reserved. •XFSでは copy_file_range (2) を用いてCoW出来る •kernel 4.18以降では,fuse-overlayfsを利用できる • 今のところCRIランタイムではCRI-Oのみが対応 Mount namespaces
  • 21. 21 Copyright©2019 NTT Corp. All Rights Reserved. •cgroup2では,非特権ユーザへの権限委譲が正式にサポー トされている (nsdelegate) •OCIランタイムでは,未だcgroup2は正式にサポートされて いない • https://github.com/opencontainers/runtime-spec/issues/1002 •Kubernetesエコシステム全体でcgroup2が使えるようにな るには,1年くらいはかかりそう • 今のところは,単にcgroupを無効化するのが安全 Cgroup
  • 22. 22 Copyright©2019 NTT Corp. All Rights Reserved. 実装状況
  • 23. 23 Copyright©2019 NTT Corp. All Rights Reserved. •kubelet と kube-proxy にパッチを当てる必要がある • cgroup 及び,sysctl関連のコードを無効化 •kubeadmは未だ使えない •OCIランタイム: runcに加え,nvidia-container-runtime が利用可能 •CRIランタイム: containerd, CRI-O, Docker いずれも利 用可能 (experimental) •CNIプラグイン: Flannelが利用可能 実装状況
  • 24. 24 Copyright©2019 NTT Corp. All Rights Reserved. •root権限を不要化した,実験的なKubernetesディストリビ ューション https://github.com/rootless-containers/usernetes •ホームディレクトリに簡単にインストールできる Usernetes $ tar xjvf usernetes-x86_64.tbz $ cd usernetes $ ./run.sh $ ./kubectl.sh apply –f foo.yaml
  • 25. 25 Copyright©2019 NTT Corp. All Rights Reserved. •Rancher社が開発する軽量Kubernetesディストリビューシ ョン https://github.com/rancher/k3s • "5 less than k8s" • etcdをsqlite3で置き換えたり,かなり大規模な変更がなされている •Usernetesの成果物がマージされつつある • https://github.com/rancher/k3s/pull/195 k3s