在kubernetes中,有没有一种方法可以查找与serviceAccount相关的RoleBinding/ClusterRoleBinding
而无需遍历所有绑定(bind)?
在尝试解决与Pod用于请求APIServer的身份验证相关的问题时,这非常有用。
最佳答案
如前所述,没有简单的方法可以使用kubectl
做到这一点,但是在技术上支持它。您可以传递“自定义列”来控制结果STDOUT生成您感兴趣的信息。然后,您可以指定-A
参数来搜索所有 namespace ,也可以使用-n specificNamespace
参数。最后,然后可以对命令的结果STDOUT进行grep
编码,以在必要时进行相应的过滤。
例如,如果我从kubernetes-dashboard
获取所有绑定(bind),则可以运行以下命令:
$> 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
然后,您可以设置一个shell别名来简化此过程:
$> 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
希望这可以帮助。