是否有我可以运行的命令,或者是否有某种方法可以识别集群是否配置了一个或多个入口控制器?
我不是在问实际的侵入物本身(我知道可以在kubectl get ingress --all-namespaces
中找到(。
没有什么奇特的方法可以满足您的需求。这两个命令可以帮助你,这实际上取决于你需要在它们之间选择什么。
$ kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"n"}{.metadata.name}{":t"}{range .metadata}{.labels}{", "}{end}{end}' | grep ingress | grep controller
$ kubectl get pods --show-labels --all-namespaces | grep ingress | grep controller
两个命令相似,但输出不同。
这些命令基于此文档页面。
此命令列出入口控制器:
$ kubectl get ingressclasses.networking.k8s.io
NAME CONTROLLER PARAMETERS AGE
nginx k8s.io/ingress-nginx <none> 49d
没有具体的方法,因为入口控制器实际上只是一个与kubernetes API对话的守护进程。他们没有集中注册。您可以从kubectl get pods --all-namespaces
开始,并与已知控制器的名称进行比较。
由于每个Ingress Controller都需要访问Ingress的权限,我们可以找到所有可以访问Ingress,然后RoleBindings/ClusterRoleBindings,关联的ServiceAccounts,最终使用这些ServiceAccounts获取所有Pod。
您可以使用选择器列出所有入口控制器pod。例如
kubectl get pods --all-namespaces --selector app=nginx-ingress,component=controller