如何查询作用于指定Kubernetes Service的Ingress资源
查询绑定指定Kubernetes Service的Ingress资源的方法
kubectl 没有原生的直接查询作用于特定Service的Ingress的命令,但可以通过参数过滤实现需求,下面是两种常用方案:
方案1:使用内置jsonpath过滤(无需额外安装工具)
如果要查询指定命名空间下,绑定名为<target-svc-name>的Service的所有Ingress,执行以下命令:
kubectl get ingress -n <namespace> -o jsonpath='{range .items[?(@.spec.rules[*].http.paths[*].backend.service.name=="<target-svc-name>")]}{.metadata.name}{"\n"}{end}'
如果要查询集群所有命名空间下的对应Ingress,把-n <namespace>换成-A即可:
kubectl get ingress -A -o jsonpath='{range .items[?(@.spec.rules[*].http.paths[*].backend.service.name=="<target-svc-name>")]}{.metadata.namespace}{"/"}{.metadata.name}{"\n"}{end}'
注:上述命令适配K8s 1.19及以上版本的Ingress v1稳定API。
方案2:使用jq工具过滤(可读性更高)
如果环境已安装jq工具,可以用更简洁的语法实现过滤:
kubectl get ingress -n <namespace> -o json | jq '.items[] | select(.spec.rules[].http.paths[].backend.service.name == "<target-svc-name>") | .metadata.name'
如果需要输出更多关联信息,比如Ingress配置的域名、路径等,只需要修改jq的输出字段即可。
注意事项
- 如果你的集群使用的是1.19版本之前的旧版Ingress API(extensions/v1beta1、networking.k8s.io/v1beta1),只需要把上述命令中的字段路径
.backend.service.name替换为.backend.serviceName即可正常过滤。 - 如果Ingress配置了默认backend(没有匹配规则时默认转发到某个Service),上述命令没有覆盖该场景,如需排查默认backend的关联,需要单独过滤
.spec.defaultBackend.service.name字段。
内容的提问来源于stack exchange,提问作者ktm5124
相关产品推荐
相关产品推荐

