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添加相同规则即可。
请求转发路径排查步骤
如果修复后仍然访问失败,按以下顺序逐层排查:
- 执行
kubectl get ing确认ADDRESS字段已经显示为localhost,如果仍然为空,执行kubectl get ingressclass确认集群内存在名为nginx的IngressClass。 - 本地直接访问
http://127.0.0.1,如果返回Nginx 404页面,说明ingress-nginx控制器本身运行正常,问题出在转发规则或后端服务。 - 查看ingress-nginx控制器日志排查转发错误:
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --tail 200
- 跳过域名解析直接模拟请求验证规则:
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
相关产品推荐
相关产品推荐

