有没有一种安全的方法可以在同一个Kubernetes pod中的另一个容器中触发命令



我正在创建一个代理服务,它接受网络调用,并可以在同一pod中的任何其他容器中触发命令。当然,这不是pods的常见用例,但我知道一些CI工具也有类似的功能,比如Jenkins和它的Kubernetes插件。

目前,我让它在代理容器中使用kubectl工作,并让它运行kubectl exec <pod> -c <container> -- <command>,它工作得很好。但这似乎是一个巨大的漏洞机会。

为了使代理具有kubectl exec访问权限,它需要对pod/exec具有特权,从而可以访问同一命名空间中的所有pod。

rules:
- apiGroups: [""]
resources: ["pods", "pods/exec"]
verbs: ["get", "list", "watch", "create"]

如果没有更好的方法,我只会将exec命令烘焙到我的代理中,使其只接受对同一pod的调用。

但我最担心的是从代理执行未知代码,以及它获得超出应有权限的访问权限。在Jenkins的例子中,如果有人有一个测试他们代码的管道,而他们是恶意的,并且包含了一个实际使用kubernetes客户端库并调用命名空间中其他pod的测试,那么在仍然启用容器到容器通信的情况下,如何防止这种情况发生?

如果有任何建议,我将不胜感激!

听起来你想在pod中执行命令,但又不想碰到kube apiserver。此外,看起来您的应用程序正在侦听触发器(在某种基于偶数的代理或应用程序上(并执行命令。

我的建议是让应用程序"shell out"自己运行命令,而不是让kubectl在与exec相同的pod上运行它。您没有指定应用程序是用什么语言编写的,但大多数常见语言都有一个库来执行系统调用或管理进程。即Golang、Python等

✌️

最新更新