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

Windows版Docker Desktop下Kubernetes Ingress无法转发请求问题排查

问题排查与解决方案

已确认的配置错误点

  • Ingress未指定ingressClassName:K8s v1.22+版本要求Ingress显式指定关联的IngressClass,或集群存在默认IngressClass才会被控制器处理。你当前的Ingress配置未配置该字段,因此会出现ADDRESS为空的现象。minikube阶段能正常分配地址是因为minikube的nginx-ingress addon默认将nginx设为了默认IngressClass,自动匹配了无Class的Ingress资源。
  • 残留旧Ingress资源冲突:删除minikube时未同步清理集群内残留的ingress-nginx命名空间下的资源,导致helm安装时报资源已存在错误,当前运行的ingress-nginx是旧版本残留资源,和Docker Desktop内置K8s环境适配异常。
  • hosts配置适配问题:Windows系统的HTTP客户端默认读取C:\Windows\System32\drivers\etc\hosts文件,如果你只修改了WSL环境的/etc/hosts,Windows侧的请求不会生效,会出现解析失败的问题。

分步修复操作

第一步:清理残留资源重新安装ingress-nginx

先删除旧的ingress-nginx命名空间清理所有残留资源:

kubectl delete namespace ingress-nginx

命名空间删除完成后重新执行helm安装命令:

helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace

第二步:修正Ingress配置

更新ingress-svc.yaml,添加ingressClassName字段:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  ingressClassName: nginx # 新增该行指定关联的IngressClass
  rules:
  - host: myapp.com
    http:
      paths:
      - path: /api/Users
        pathType: Prefix
        backend:
          service:
            name: user-service-svc
            port:
              number: 80
      - path: /api/Events
        pathType: Prefix
        backend:
          service:
            name: event-service-svc
            port:
              number: 80

重新应用配置:

kubectl apply -f ingress-svc.yaml

第三步:配置正确的hosts规则

使用管理员权限打开Windows的C:\Windows\System32\drivers\etc\hosts文件,添加如下解析规则:

127.0.0.1 myapp.com

如果需要在WSL环境内测试访问,同步给WSL的/etc/hosts添加相同规则即可。

请求转发路径排查步骤

如果修复后仍然访问失败,按以下顺序逐层排查:

  1. 执行kubectl get ing确认ADDRESS字段已经显示为localhost,如果仍然为空,执行kubectl get ingressclass确认集群内存在名为nginx的IngressClass。
  2. 本地直接访问http://127.0.0.1,如果返回Nginx 404页面,说明ingress-nginx控制器本身运行正常,问题出在转发规则或后端服务。
  3. 查看ingress-nginx控制器日志排查转发错误:
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --tail 200
  1. 跳过域名解析直接模拟请求验证规则:
curl -H "Host: myapp.com" http://127.0.0.1/api/Events

如果该请求返回正常,说明Ingress配置无误,问题出在本地客户端的域名解析配置。
5. 直接在集群内部验证后端服务可用性:

kubectl run -it --rm --image=curlimages/curl test -- curl http://event-service-svc.default.svc.cluster.local/api/Events

如果该请求返回异常,说明是后端服务本身的问题,和Ingress转发无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:15:02