在kubernetes中,有没有办法在不遍历所有绑定的情况下找到与serviceAccount相关的RoleBinding/ClusterRoleBinding
?
当尝试解决Pod用于请求APIServer的身份验证相关问题时,这非常有用。
答案 0 :(得分:1)
如前所述,使用kubectl
并没有简单的方法,但是在技术上受支持。您可以传递“自定义列”来控制结果STDOUT生成您感兴趣的信息。然后,可以指定-A
参数来搜索所有名称空间,也可以使用-n specificNamespace
参数。最后,您可以根据需要grep
命令的结果STDOUT进行相应的过滤。
例如,如果我从kubernetes-dashboard
获取所有绑定,则可以运行以下命令:
$> kubectl get rolebindings,clusterrolebindings \
-n kubernetes-dashboard \
-o custom-columns='KIND:kind,NAMESPACE:metadata.namespace,NAME:metadata.name,SERVICE_ACCOUNTS:subjects[?(@.kind=="ServiceAccount")].name' | wc -l
64
如您所见,我将其通过wc
进行了管道传输,因为返回了60多个结果,因此很难在StackOverflow上发布。但是,如果改用grep
,则可以轻松检索更细粒度的结果。例如,此经过调整的命令显示tj
ServiceAccount资源有一个CRB。
$> kubectl get rolebindings,clusterrolebindings \
-n kubernetes-dashboard \
-o custom-columns='KIND:kind,NAMESPACE:metadata.namespace,NAME:metadata.name,SERVICE_ACCOUNTS:subjects[?(@.kind=="ServiceAccount")].name' | grep tj
ClusterRoleBinding <none> tj tj
然后您可以设置外壳程序别名来简化此操作:
$> alias getbindings="kubectl get rolebindings,clusterrolebindings -n kubernetes-dashboard -o custom-columns='KIND:kind,NAMESPACE:metadata.namespace,NAME:metadata.name,SERVICE_ACCOUNTS:subjects[?(@.kind==\"ServiceAccount\")].name' | grep"
$> getbindings tj
ClusterRoleBinding <none> tj tj
或者,您甚至可以将其变成一个接受两个参数的函数,一个命名空间和一个ServiceAccount。然后可以有效地为您提出的功能请求创建自己的解决方案。例如:
$> tail -n 6 ~/.bashrc
function get_bindings(){
kubectl get rolebindings,clusterrolebindings \
-n $1 \
-o custom-columns='KIND:kind,NAMESPACE:metadata.namespace,NAME:metadata.name,SERVICE_ACCOUNTS:subjects[?(@.kind=="ServiceAccount")].name' | grep $2
}
$> get_bindings "kubernetes-dashboard" "tj"
ClusterRoleBinding <none> tj tj
希望这会有所帮助。
答案 1 :(得分:0)
目前没有这样的功能。也许您可以提交feature request。