![](/img/trans.png)
[英]Kubectl command throwing error: Unable to connect to the server: getting credentials: exec: exit status 2
[英]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 使用的令牌默认挂载它们),您应该考虑以下事项:
root
身份运行容器。 尝试使用支持 rootles 操作的图像,然后在securityContext
的runAsUser
字段中指定正确的非 root UID,或者配置runAsNonRoot: true
标志以拒绝以 root 身份运行的容器。readOnlyRootFilesystem
使您的 pod 不可变,这将拒绝对 pod 临时存储的写操作(但如果您将任何卷安装为 RW - 它们仍然可以进行写操作)。 这种方法的可行性取决于您的应用何时使用某种临时文件相关链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.