在K8s使用ig,无需安装,感谢kubectl debug

admin 2024年10月9日09:38:27评论16 views字数 3321阅读11分4秒阅读模式

在K8s使用ig,无需安装,感谢kubectl debug

作者:Francis Laniel

Inspektor Gadget 可以通过多种方式在 Kubernetes(k8s)集群上使用:

  • 作为针对特定 k8s 节点的一次性调试命令,使用 kubectl-debug。
  • 作为长期监控解决方案,结合定制工具、日志服务或行业标准工具如 Prometheus。
  • 作为跨 k8s 集群的交互工具,使用 kubectl-gadget。
  • 作为集成在应用中的 golang 包。

在这篇博客中,我们将重点介绍如何使用 Inspektor Gadget 作为一次性调试命令,通过 kubectl debug。这条命令允许以交互方式调试特定的 k8s 节点。它不自带调试工具,而是依赖于指定任何容器镜像,在命令生命周期内作为调试容器运行。由于 ig 也可以作为容器镜像使用,我们可以利用它通过 kubectl debug 来运行:

$ kubectl debug --profile=sysadmin node/minikube-docker -ti --image=ghcr.io/inspektor-gadget/ig -- ig trace exec
Creating debugging pod node-debugger-minikube-docker-c2wfw with container debugger on node minikube-docker.
If you dont see a command prompt, try pressing enter.
RUNTIME.CONTAINERNAME          PID              PPID             COMM             RET ARGS
k8s_shell_shell_default_b4ebb… 3186934          3186270          cat              0   /bin/cat file

ig 运行 eBPF 程序的要求

要运行 eBPF 程序并增强生成的事件,ig 需要以特权进程运行。特别地,它依赖于 Linux 内核提供的若干能力。Linux 内核能力是限制任务特权的手段,而不是让任务拥有全局特权。例如,具有 CAP_KILL 的任务可以向其他任务发送信号。在 ig 的情况下,我们依赖于 CAP_SYS_ADMIN 等能力。

通过 kubectl debug 初次运行 ig

起初,无法轻松地使用 kubectl debug 运行 ig,因为后者缺少特权执行配置文件。为了解决这个问题,我们添加了一个变通方法,将 ig 作为 systemd 单元运行。这样,ig 可以获得在 kubectl debug 中运行时缺失的特权。因此,用户可以使用以下命令运行 ig:

$ kubectl debug node/minikube-docker -ti --image=ghcr.io/inspektor-gadget/ig -- ig --auto-sd-unit-restart trace exec
Creating debugging pod node-debugger-minikube-docker-c2wfw with container debugger on node minikube-docker.
If you dont see a command prompt, try pressing enter.
CONTAINER                                                     PID        PPID       COMM             RET ARGS
k8s_test01_test01_default_0aca2685-a8d2-49c7-9580-58fb806270… 1802638    1800551    cat              0   /bin/cat README

向 kubectl debug 添加 sysadmin 配置文件的上游工作

随后,我们决定通过添加特权配置文件来改进 kubectl debug,因为这对 ig 是必要的,同时对其他工具也有帮助。因此,我们提交了一个PR[1],以将 sysadmin 配置文件添加到 kubectl debug。此 PR 的审核过程显示,最初的 Kubernetes 增强提案(KEP)需要更新。确实,KEP 建议 sysadmin 配置文件仅具有 CAP_SYS_ADMIN 而使用特权则更合适。因此,我们也提交了一个PR[2]来更新相应的 KEP。随着这个 PR 的合并,我们能够合并第一个 PR,将 sysadmin 配置文件添加到 kubectl debug。

移除 ig 的变通方法

sysadmin 配置文件功能将在 kubectl debug 1.30.0 中实现。与此同时,我们致力于移除在 ig 中基于 systemd 的变通方法,最终目标是使用以下命令来运行 ig:

$ kubectl debug --profile=sysadmin node/minikube-docker -ti --image=ghcr.io/inspektor-gadget/ig -- ig trace exec

可惜的是,在测试时,我们发现 list-containers 命令存在一些问题。特别是,该命令并未依赖主机文件系统来查找容器运行时套接字路径。我们提交了一个PR[3]来修复这个问题。请注意,之前的提交以及为另一个贡献编写的提交使我们能够在运行 ig 时不再需要挂载/run 作为卷。

随着这个 bug 的修复,现在是时候去掉整个--auto-sd-unit-restart 变通方法了。

总结

经过这些工作,你现在可以简单地通过 kubectl debug 使用以下命令运行 ig:

$ kubectl debug --profile=sysadmin node/minikube-docker -ti --image=ghcr.io/inspektor-gadget/ig -- ig trace exec
Creating debugging pod node-debugger-minikube-docker-c2wfw with container debugger on node minikube-docker.
If you dont see a command prompt, try pressing enter.
RUNTIME.CONTAINERNAME          PID              PPID             COMM             RET ARGS
k8s_shell_shell_default_b4ebb… 3186934          3186270          cat              0   /bin/cat file

这项工作展示了“上游优先”思维的重要性。确实,现在人们更容易运行 ig,而 kubectl debug 也获得了一个有用的新调试功能。

致谢

这项工作得以实现,离不开以下人员的建议和审查:Alban Crequy、Arda Güçlü、josemotafbn、kfox1111、Gerard de Leeuw、Keita Mochizuki、Maciej Szulik 和 Lee Verberne。我们对此表示感谢!

参考资料
[1]

PR: https://github.com/kubernetes/kubernetes/pull/119200

[2]

PR: https://github.com/kubernetes/enhancements/pull/4234

[3]

PR: https://github.com/inspektor-gadget/inspektor-gadget/pull/3030

(版权归原作者所有,侵删)

免责声明:本文内容来源于网络,所载内容仅供参考。转载仅为学习和交流之目的,如无意中侵犯您的合法权益,请及时联系Docker中文社区!

在K8s使用ig,无需安装,感谢kubectl debug在K8s使用ig,无需安装,感谢kubectl debug

原文始发于微信公众号(Docker中文社区):在K8s使用ig,无需安装,感谢kubectl debug

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月9日09:38:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   在K8s使用ig,无需安装,感谢kubectl debughttps://cn-sec.com/archives/3244231.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息