Kubernetes Ingress连接超时问题:无法通过DNS访问微服务
问题排查与解决方案
核心问题定位
M1 Mac上使用Docker驱动的minikube时,集群节点IP(192.168.49.2)是虚拟机内部虚拟IP,主机无法直接访问该IP的80/443端口。你的Ingress Controller为NodePort类型,必须通过指定NodePort端口或minikube隧道才能完成主机到集群的网络连通。
1. 直接验证NodePort访问有效性
根据你提供的Service端口映射(80:30959/TCP、443:31788/TCP),直接带端口访问测试:
- HTTP测试:
curl http://progettoviaggio.test:30959 - HTTPS测试:
curl -k https://progettoviaggio.test:31788
如果请求能正常返回,说明Ingress规则和集群内部服务均无问题,仅需解决端口映射的便捷访问问题。
2. 使用minikube tunnel实现无端口访问(推荐)
minikube tunnel可将Ingress Controller映射到主机的80/443端口,步骤如下:
- 确认Ingress插件已启用:
minikube addons enable ingress - 启动隧道(命令需保持前台运行,新开终端执行其他操作):
minikube tunnel - 此时直接访问
http://progettoviaggio.test即可,无需附加NodePort端口。
3. 检查Ingress规则配置正确性
确保你的Ingress YAML正确关联了后端Service,示例配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: progettoviaggio-ingress spec: rules: - host: progettoviaggio.test http: paths: - path: /api pathType: Prefix backend: service: name: mainapi-service port: number: 3000 - path: /ai pathType: Prefix backend: service: name: fastapi-service port: number: 8000
重点核对:host字段与自定义DNS一致,每个path对应的service.name和port.number与实际Service配置匹配。
4. 验证集群内部Ingress可达性
进入集群内任意Pod(如mainapi的Pod),测试内部访问Ingress域名:
kubectl exec -it <mainapi-pod-name> -- curl http://progettoviaggio.test
若集群内部能正常访问,说明问题完全出在主机到集群的网络路径上,优先采用minikube tunnel方案解决。
5. 可选:切换minikube网络驱动
若希望直接通过节点IP访问,可尝试切换到hyperkit驱动(适配M1 Mac):
- 停止并删除现有集群:
minikube stop && minikube delete - 用hyperkit创建新集群:
minikube start --driver=hyperkit - 重新部署服务与Ingress后,再次测试访问。
内容的提问来源于stack exchange,提问作者Leonardo Marzocchi
相关产品推荐
相关产品推荐

