看看下面的情况是否可能 -
假设用户(
user1
)只能访问命名空间default
和marketing
。
当我们执行
kubectl get ns
时,它应该显示两个命名空间。
即使存在其他命名空间,也不应显示它们,因为
user1
无权访问任何其他命名空间。
我们可以将此场景与数据库联系起来,其中用户在执行
show databases
时只能看到他们有权访问的数据库
这在 Kubernetes 中是不可能的。命名空间是提供作用域机制以限制对其他资源的可见性的资源。没有元命名空间为命名空间提供范围规则。
这可以通过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
请注意,这有两个缺点:
根据您的具体情况,此解决方案可能仍然足够。