You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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端口,步骤如下:

  1. 确认Ingress插件已启用:minikube addons enable ingress
  2. 启动隧道(命令需保持前台运行,新开终端执行其他操作):minikube tunnel
  3. 此时直接访问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):

  1. 停止并删除现有集群:minikube stop && minikube delete
  2. 用hyperkit创建新集群:minikube start --driver=hyperkit
  3. 重新部署服务与Ingress后,再次测试访问。

内容的提问来源于stack exchange,提问作者Leonardo Marzocchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:45:11