Kubectl - 仅列出用户可以访问的命名空间

问题描述 投票:0回答:2

看看下面的情况是否可能 -

假设用户(

user1
)只能访问命名空间
default
marketing

当我们执行

kubectl get ns
时,它应该显示两个命名空间。

即使存在其他命名空间,也不应显示它们,因为

user1
无权访问任何其他命名空间。

我们可以将此场景与数据库联系起来,其中用户在执行

show databases
时只能看到他们有权访问的数据库

kubernetes kubectl kubernetes-security
2个回答
6
投票

这在 Kubernetes 中是不可能的。命名空间是提供作用域机制以限制对其他资源的可见性的资源。没有元命名空间为命名空间提供范围规则。


0
投票

这可以通过shell脚本解决。

这个想法是迭代所有命名空间

kubectl get ns
返回,并针对每一个命名空间检查用户是否具有访问权限。

可以使用命名空间上的任何

kubectl get
命令执行访问检查。如果出现错误,它将返回非零退出代码,这很可能是由于访问限制造成的。

for namespaceWithType in $(kubectl get ns -o name); do
  namespace="${namespaceWithType#*/}" # remove `namespace/` prefix
  kubectl get -n "${namespace}" pods -o name >/dev/null 2>/dev/null \
      && echo "${namespace}"
done

请注意,这有两个缺点:

  • 对于 n 命名空间,需要 n+1 个 API 调用,这非常耗费时间和资源,并且
  • 所示的脚本不区分不同的错误类型,因此,如果您遇到访问限制以外的问题,您将不会知道。

根据您的具体情况,此解决方案可能仍然足够。

© www.soinside.com 2019 - 2024. All rights reserved.