Slide 1

Slide 1 text

Kubernetes Novice Tokyo #8 kubectl debug を試してみた February 9, 2021 Naoki Oketani

Slide 2

Slide 2 text

$ cat whoami.yaml social: github: oke-py twitter: ngoktanio job: role: Cloud Native Security Architect keyword: [“NIST SP 800-190”, “Sysdig”]

Slide 3

Slide 3 text

目次 1. kubectl debugのユースケース 2. kubectl debugの使い方 3. まとめ

Slide 4

Slide 4 text

目次 1. kubectl debugのユースケース 2. kubectl debugの使い方 3. まとめ

Slide 5

Slide 5 text

distroless 使ってる?

Slide 6

Slide 6 text

攻撃ベクトルを小さくする centos distroless App App bash openssl “Minimal images lower operational burden and reduce attack vectors.” [3][4]

Slide 7

Slide 7 text

デプロイを高速化する REPOSITORY TAG SIZE alpine latest 5.35MB ubuntu 18.04 56.7MB centos 7 301MB gcr.io/distroless/base-debian10 latest 16.1MB “Smaller image size reduces resource usage and speeds deployments.” [3][4]

Slide 8

Slide 8 text

distrolessベースのコンテナを運用していた、ある日のこと

Slide 9

Slide 9 text

ん、おかしいな。デバッグしよう。

Slide 10

Slide 10 text

$ kubectl exec -it ephemeral-demo -- sh [2] OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown あ、”sh”が入っていなくてトラブルシューティングできない・・・ ここで、エフェメラルコンテナとkubectl debugの出番

Slide 11

Slide 11 text

目次 1. kubectl debugのユースケース 2. kubectl debugの使い方 3. まとめ

Slide 12

Slide 12 text

エフェメラルコンテナを利用する $ k run demo --image=k8s.gcr.io/pause:3.1 --restart=Never $ k debug -it demo --image=busybox # ps aux PID USER TIME COMMAND 1 root 0:00 sh 7 root 0:00 ps aux プロセスをみることができない Pod: demo Container pause EphemeralContainer busybox

Slide 13

Slide 13 text

エフェメラルコンテナを利用する $ k run demo --image=k8s.gcr.io/pause:3.1 --restart=Never $ k debug -it demo --image=busybox --target=demo # ps aux PID USER TIME COMMAND 1 root 0:00 /pause 8 root 0:00 sh 15 root 0:00 ps aux Pod: demo Container pause EphemeralContainer busybox

Slide 14

Slide 14 text

Podのコピーを利用する $ k run myapp --image=busybox --restart=Never -- sleep 1d $ k debug myapp -it --image=ubuntu --share-processes \ --copy-to=myapp-debug $ k get pod NAME READY ... myapp 1/1 myapp-debug 2/2 Pod: myapp-debug Container busybox Container ubuntu Pod: myapp Container busybox

Slide 15

Slide 15 text

Nodeのデバッグをする $ k debug node/mynode -it --image=ubuntu “The container runs in the host IPC, Network, and PID namespaces. The root filesystem of the Node will be mounted at /host.” [2] 強力すぎてセキュリティおじさんはヒヤヒヤしてしまう マルチテナントクラスターでは使えるとまずいかも?

Slide 16

Slide 16 text

目次 1. kubectl debugのユースケース 2. kubectl debugの使い方 3. まとめ

Slide 17

Slide 17 text

kubectl debugは強力、Minimal imagesを実現しよう centos distroless App App bash openssl “Minimal images lower operational burden and reduce attack vectors.” [3][4]

Slide 18

Slide 18 text

GAしていないため変更の可能性あり エフェメラルコンテナ ● v1.16 alpha ● v1.21 beta [5] kubectl debug ● v1.18 alpha ● v1.20 beta

Slide 19

Slide 19 text

kubectl debug 完全に理解した

Slide 20

Slide 20 text

reference [1] Ephemeral Containers https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/ [2] Debug Running Pods https://kubernetes.io/docs/tasks/debug-application-cluster/debug-running-pod/ [3] KEP-277: Ephemeral Containers https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/277-ephemeral-containers [4] KEP-1441: kubectl debug https://github.com/kubernetes/enhancements/tree/master/keps/sig-cli/1441-kubectl-debug [5] Update Ephemeral Containers KEP for beta in 1.21 https://github.com/kubernetes/enhancements/pull/2244