Upgrade to Pro — share decks privately, control downloads, hide ads and more …

kubectl debugを試してみた

33dd5188ff5f608ca2a1e007b9528e6b?s=47 Naoki Oketani
February 08, 2021

kubectl debugを試してみた

Kubernetes Novice Tokyo #8

33dd5188ff5f608ca2a1e007b9528e6b?s=128

Naoki Oketani

February 08, 2021
Tweet

Transcript

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

    Naoki Oketani
  2. $ cat whoami.yaml social: github: oke-py twitter: ngoktanio job: role:

    Cloud Native Security Architect keyword: [“NIST SP 800-190”, “Sysdig”]
  3. 目次 1. kubectl debugのユースケース 2. kubectl debugの使い方 3. まとめ

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

  5. distroless 使ってる?

  6. 攻撃ベクトルを小さくする centos distroless App App bash openssl “Minimal images lower

    operational burden and reduce attack vectors.” [3][4]
  7. デプロイを高速化する 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]
  8. distrolessベースのコンテナを運用していた、ある日のこと

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

  10. $ 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の出番
  11. 目次 1. kubectl debugのユースケース 2. kubectl debugの使い方 3. まとめ

  12. エフェメラルコンテナを利用する $ 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
  13. エフェメラルコンテナを利用する $ 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
  14. 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
  15. 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] 強力すぎてセキュリティおじさんはヒヤヒヤしてしまう マルチテナントクラスターでは使えるとまずいかも?
  16. 目次 1. kubectl debugのユースケース 2. kubectl debugの使い方 3. まとめ

  17. kubectl debugは強力、Minimal imagesを実現しよう centos distroless App App bash openssl “Minimal

    images lower operational burden and reduce attack vectors.” [3][4]
  18. GAしていないため変更の可能性あり エフェメラルコンテナ • v1.16 alpha • v1.21 beta [5] kubectl

    debug • v1.18 alpha • v1.20 beta
  19. kubectl debug 完全に理解した

  20. 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