如何防止 pods 在同一个命名空间中安装机密?

How do I prevent pods from mounting secrets in the same namespace?

我的命名空间包含多个机密和 pods。使用部署规范将机密作为卷选择性地安装在 pods 上。是否可以在某些 pods 中拒绝将特定机密作为卷安装。我测试了 RBAC,它阻止 pods 通过 api 访问机密。考虑到允许将所有机密安装在同一命名空间的 pods 中存在安全风险,是否存在用于安装机密的类似机制。

没有简单的方法可以做到这一点,因为密钥是由 kubelet 安装的。但是您可以配置一个验证 web-hook 来拦截所有到达 Kubernetes API 服务器的 pod 创建请求。您将在 web-hook 中编写代码以验证并仅在 pod 规范没有任何无效或不需要的秘密时才允许 pod 创建请求,否则它会拒绝 pod 创建请求。

另一种选择是让 Open Policy Agent 验证 pod 创建请求,您可以在其中编写策略来实现类似的验证。

另一个答案是正确的,但为了完整起见,您可以编写一个准入控制器来根据某种策略检查请求。这就是内置的 NodeRestriction 准入控制器所做的,它有助于限制事物,因此 kubelet 只能访问 pods 的秘密,它应该是 运行。