无法通过Ingress Controller访问Go Web应用问题求助
排查步骤
1. 确认Ingress Controller的关联与暴露状态
- 你的Ingress资源
ADDRESS字段为空,说明Contour Ingress Controller未成功接管该Ingress。检查Ingress YAML文件,是否指定了ingressClassName: contour(Contour默认需要此字段关联Ingress)。 - 执行
kubectl get ingressclass,确认存在名为contour的IngressClass资源。若不存在,需先创建对应IngressClass,或在Ingress中明确指定正确的类名。 - 检查Contour的Envoy服务暴露方式:执行
kubectl get svc -n projectcontour,找到contour-envoy服务:- 若为
NodePort类型,需用集群节点IP(Kind集群默认是127.0.0.1)加上对应NodePort端口访问; - 若为
LoadBalancer类型,在Kind集群中需确认kind_config.yaml是否配置了端口映射(比如将宿主机80端口映射到Envoy的80端口),此时EXTERNAL-IP应显示localhost或具体映射IP。
- 若为
2. 解决DNS解析问题
curl simple-web-app-local失败,大概率是该域名未解析到Ingress Controller的入口IP。- 手动在本地hosts文件添加映射:若Ingress Controller入口IP为
127.0.0.1,添加一行127.0.0.1 simple-web-app-local:- Linux/macOS:编辑
/etc/hosts - Windows:编辑
C:\Windows\System32\drivers\etc\hosts(需管理员权限)
- Linux/macOS:编辑
- 也可绕开DNS,直接用Host头测试:
curl -H "Host: simple-web-app-local" 127.0.0.1:<envoy-port>,替换<envoy-port>为Envoy服务暴露的端口(如80或对应NodePort)。
3. 验证后端服务的连通性
- 检查Pod状态:执行
kubectl get pods,确认Web应用的Pod处于Running状态,且READY为1/1。若Pod异常,查看日志kubectl logs <pod-name>,确认应用是否正常监听8000端口。 - 在集群内部测试Service连通性:临时启动测试Pod执行命令:
替换kubectl run -it --rm busybox --image=busybox:1.28 -- curl <service-name>:8000<service-name>为你的Web应用Service名称,确认能正常返回响应。若此处失败,说明Service与Pod关联有问题,检查Service的selector是否匹配Pod标签,以及端口映射是否正确(目标端口为8000)。
4. 检查Contour组件的运行状态
- 确认Contour和Envoy Pod均正常运行:
kubectl get pods -n projectcontour,所有Pod应处于Running状态,无重启或错误。 - 查看Contour控制器日志,排查Ingress处理错误:
检查是否有关于Ingress资源的报错信息,比如权限问题、规则无效等。kubectl logs -n projectcontour deployment/contour
内容的提问来源于stack exchange,提问作者user21373481
相关产品推荐
相关产品推荐

