Kubernetes Ingress问题:Ingress到Service的路由无法正常工作
排查 Tectonic Ingress 到 Service 路由故障的实战步骤
我帮你梳理下定位这个问题的具体操作,一步步来排查:
验证 Ingress 资源的状态与完整性
先别只看YAML,用命令查看Ingress的详细运行状态和事件:kubectl describe ing test-ingress -n nstest重点看
Events字段,有没有出现类似"Failed to sync"、"Service not found"这类报错。另外你贴的YAML里path部分有...,要确认实际的Ingress规则有没有完整配置,有没有语法错误(比如缩进、括号不匹配)。确认 Tectonic Ingress Controller 运行正常
Tectonic依赖专属的Ingress控制器,先找到它的Pod并检查状态:kubectl get pods -n tectonic-system | grep ingress确保Pod处于
Running状态,没有频繁重启。接着查看控制器的日志,找和你的test-ingress相关的错误信息:kubectl logs <你的-ingress-controller-pod-name> -n tectonic-system比如有没有提示无法解析
testService,或者权限不足无法访问后端资源。检查后端 Service 与 Pod 的连通性
这一步是排除后端服务本身的问题:- 确认
testService存在且配置正确:
看kubectl get svc test -n nstestClusterIP是否已分配,PORT(S)里有没有8080端口。 - 检查Service关联的Pod端点:
如果kubectl get endpoints test -n nstestENDPOINTS字段是空的,说明Pod没和Service绑定——要么是Pod的标签和Service的选择器不匹配,要么Pod没处于Ready状态,用下面的命令检查Pod状态:kubectl get pods -n nstest -l <test-service的标签选择器> - 集群内部测试连通性:找一个集群内的测试Pod(比如busybox),执行:
如果这一步都访问失败,那问题出在Service或Pod,和Ingress无关。wget -O- http://test.nstest.svc.cluster.local:8080
- 确认
验证DNS与外部访问路径
- 确认域名解析正确:在本地执行
nslookup test.nstest.k8s.privatecloud.com,看返回的IP是不是Tectonic Ingress控制器的入口IP(比如LoadBalancer的公网IP,或者NodePort对应的节点IP)。 - 测试外部访问:用
curl -v http://test.nstest.k8s.privatecloud.com,看返回的错误类型——是404(Ingress规则不匹配)、503(后端服务不可用)还是超时(网络不通),这能帮你快速缩小范围。
- 确认域名解析正确:在本地执行
确认 Ingress Class 配置匹配
检查Tectonic Ingress控制器的启动参数,确认它确实监听了tectonic这个Ingress class。可以用下面的命令查看控制器的容器参数:kubectl describe pod <ingress-controller-pod-name> -n tectonic-system | grep Args如果没有
--ingress-class=tectonic这个参数,那控制器不会处理你的Ingress资源,需要调整控制器配置。
常见额外排查点
- 路径匹配规则:如果你的后端服务需要特定路径,检查Ingress有没有配置路径重写注解(比如
nginx.ingress.kubernetes.io/rewrite-target,如果是基于NGINX的控制器),或者路径是精确匹配还是前缀匹配。 - 命名空间权限:确认Ingress控制器的服务账号有访问
nstest命名空间资源的权限,比如能不能获取Service和Endpoints。
内容的提问来源于stack exchange,提问作者user1578872
相关产品推荐
相关产品推荐

