在同一Kubernetes吊舱的另一个容器中是否有安全的方法触发命令?

在同一Kubernetes吊舱的另一个容器中是否有安全的方法触发命令?,kubernetes,Kubernetes,我正在创建一个代理服务,它接受网络调用,并可以触发同一pod中任何其他容器中的命令。当然,这不是pods的常见用例,但我知道一些CI工具也有类似的功能,比如Jenkins和它的Kubernetes插件 目前,我在代理容器中使用kubectl使其工作,并使其运行kubectl exec-c--,工作正常。但这似乎是一个巨大的漏洞机会 为了让代理具有kubectl exec访问权限,它需要在pod/exec上拥有特权,这使它能够访问同一命名空间中的所有pod 规则: -apiGroups:[“”]

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

目前,我在代理容器中使用kubectl使其工作,并使其运行
kubectl exec-c--
,工作正常。但这似乎是一个巨大的漏洞机会

为了让代理具有kubectl exec访问权限,它需要在
pod/exec
上拥有特权,这使它能够访问同一命名空间中的所有pod

规则:
-apiGroups:[“”]
资源:[“pods”,“pods/exec”]
动词:[“获取”、“列出”、“监视”、“创建”]
如果没有更好的方法,我将把exec命令烘焙到我的代理中,这样它就只接受对同一个pod的调用

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


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

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

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


✌️

关于你想做什么还有什么背景吗?是否在Kubernetes上安装CI/CD管道?(Tekton在这方面做得很好)或者通常,两个容器的通信方式是通过网络端口进行的,但这里听起来更像是要将容器视为旧的虚拟机?或者是为了某种无法通过日志记录、跟踪或其他方式完成的调试?嘿@Jonas,我正在为我的应用程序构建一个非常轻量级的CI组件。在最基本的情况下,它只是拉src+创建一个图像。我试图避免使用tekton或argo管道,但也许你是对的,这可能是最简单的。tekton以一种巧妙的方式做到了这一点,因此,Pod中的所有容器都是按顺序执行的。。。所以你可以先拉,然后建,然后推图像。。。或者你决定你的任务或管道做什么。嘿@Rico,我有一个带有代理容器的pod,我可以通过网络调用它,并将其“释放”。但我试图克服的挑战是,我希望能够添加具有不同依赖项(例如python、nodejs)的容器,就像Jenkins使用pod模板所做的那样。代理知道如何接收命令,然后在适当的容器上运行它们。因为依赖容器可以是任何东西,所以我不能为它们中的每一个插入一个侦听器,让它们去壳化。你能用一个通用的容器映像来处理所有依赖项吗?你和Jenkins到底在谈论什么,你可以指定依赖关系?pod模板是否也从容器图像开始?或者你想从一个单独的吊舱开始?但是常规的jenkins插件也调用kube apiserver