1

我们想为我们的客户提供一个预装应用程序的集群,因此希望给客户除我们提供的命名空间和系统命名空间(例如“kube-system”)之外的所有权利,以便他们看不到敏感信息秘密中的信息或破坏那里的任何东西。我们已经用 OPA 进行了测试,但不幸的是你不能在那里拦截 GET 请求,这意味着秘密仍然可以查看。它也不适用于 RBAC,因为您不能拒绝访问那里的特定命名空间。

有没有办法做到这一点?

谢谢和最好的问候

吠陀

4

2 回答 2

2

我通过给用户一个只对命名空间具有权限的 ClusterRole 和一个对所有东西都具有权限的 ClusterRole 来解决了这个问题。我将命名空间的 ClusterRole 与 ClusterRoleBinding 绑定,将另一个 ClusterRole 与 RoleBinding 绑定。因此,用户还拥有对他动态创建的命名空间的权限,他需要在 ClusterRole 上使用 RoleBinding 来允许执行所有操作。

为了自动执行此操作,我使用工具 Argo-Events,它在命名空间创建事件上触发 RoleBinding 部署。通过 OPA,我可以防止用户更改或删除命名空间。

于 2021-01-28T09:15:06.487 回答
2

您绝对可以使用 OPA 来评估 GET 请求,而不是通过准入控制器(因为它最终决定了将在 Kubernetes 中持久化的内容,而 GET 请求本质上只能读取)。您将要使用的是 Kubernetes授权 webhook,您可以将其添加到针对任何请求咨询的授权者链中。是一篇关于该主题的非常好的博客文章。

需要考虑的一些注意事项:

  1. 您需要完全控制集群才能使用自定义授权器配置 API 服务器。目前,许多托管云产品无法做到这一点。
  2. Gatekeeper 等流行工具不支持,即您需要为此部署和管理“vanilla”OPA。
于 2021-01-20T16:07:30.267 回答