繁体   English   中英

限制/控制 kubectl exec 命令

[英]Limit/Controlled kubectl exec command

我还是 kube.netes 的新手。 但我正在寻找一种方法,让开发人员可以控制对 kubectl exec 命令的访问。 我想让他们运行大部分只读命令,但阻止一些高风险命令,并阻止交互式下载/安装等。还想在会话期间记录他们的所有操作以供审计。

我没有看到任何使用 rbac 的直接方法。 也没有在牧场主中看到这些选项。 我正在寻找一些指导和方向来实现这种能力。

我相信你们中的一些人已经以某种方式实现了它。

Kube.netes RBAC 只能在你可以或不能exec到 pod 时进行验证(通过检查create verb on pods/exec资源),之后它切换到 SPDY 协议并传递你的输入并从你的docker exec的模拟返回 output容器运行时,实际上并不关心进出的内容

使用 rbac,您还必须指定 pod 名称,如果您使用 Deployments,这可能会出现问题,其中每个新修订版都会生成不同的 pod 名称。 由于 rbac 中未实现模式匹配 - 每次生成新的 pod 名称时,您都必须更改您的角色。

所以答案是“不,你不能用 rbac 做到这一点”

另一种解决方案是使用某种 CI/CD(jenkins、gitlab-ci 等)或编排工具(rundeck、ansible-tower 等),您将在其中创建某种脚本,您的开发人员将在其中将 arguments 传递给工作,由你控制,即

kubectl exec deploy/foo -- /bin/bar baz "$DEV_ARGUMENT"

从本质上讲,这意味着您将负责管理对该作业/脚本的访问,为该脚本创建和维护 serviceAccount 等。

如果你害怕图像可变性,即你不希望你的开发人员在运行的容器中安装一些东西,但是给他们 shell 就可以了(记住,他们仍然可以读取任何秘密/env vars/configMaps 甚至 serviceAccount pod 使用的令牌默认挂载它们),您应该考虑以下事项:

  1. 不要以root身份运行容器。 尝试使用支持 rootles 操作的图像,然后在securityContextrunAsUser字段中指定正确的非 root UID,或者配置runAsNonRoot: true标志以拒绝以 root 身份运行的容器。
  2. 更好的通用解决方案是利用 PodSecurityPolicy(已弃用,在 1.25 中删除)、Pod Security Admission 或一些第 3 方准入控制器(如 OPA Gatekeeper)来拒绝在您的命名空间中以 root 身份运行的容器
  3. 您还可以通过在安全上下文中使用readOnlyRootFilesystem使您的 pod 不可变,这将拒绝对 pod 临时存储的写操作(但如果您将任何卷安装为 RW - 它们仍然可以进行写操作)。 这种方法的可行性取决于您的应用何时使用某种临时文件

相关链接:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM