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

Windows Docker Desktop内置Kubernetes外部请求无法访问求助

Windows Docker Desktop内置Kubernetes外部访问故障排查与解决

核心问题场景

Windows系统通过Docker Desktop启用内置Kubernetes后,外部无法通过LoadBalancer Service(指定NodePort 31000)或Nginx Ingress访问集群内服务,Pod均处于正常运行状态,重置Kubernetes和重启系统无效。

排查步骤与解决方案

1. 验证Service与Endpoints状态

  • 执行以下命令查看Service状态:
    kubectl get svc mongo-express-service
    
    确认EXTERNAL-IP字段为localhost(Docker Desktop内置K8s对LoadBalancer的默认映射),若显示Pending,需检查Docker Desktop的K8s组件是否正常启动。
  • 验证Endpoints是否关联到运行中的Pod:
    kubectl get endpoints mongo-express-service
    
    确保ADDRESSES字段存在对应Pod的IP,且与kubectl get pods -o wide中mongo-express Pod的IP一致,排除标签匹配错误。

2. 测试集群内部连通性

若集群内部可访问,说明问题出在外部网络转发:

  • 临时创建测试Pod执行内部访问:
    kubectl run -it --rm --image=curlimages/curl curl-test
    
    在Pod内执行:
    curl http://mongo-express-service:8081
    
    若返回mongo-express页面内容,确认集群内部服务正常,聚焦外部访问的网络问题。

3. 针对Windows Docker Desktop的网络适配

(1)WSL2后端网络问题

若使用WSL2作为Docker后端,Windows的localhost可能无法直接映射WSL内的K8s端口:

  • 打开WSL终端,执行以下命令获取WSL2的IP:
    hostname -I
    
    使用该IP访问服务:http://<WSL2_IP>:31000

(2)Windows防火墙拦截

  • 临时关闭Windows Defender防火墙,测试是否可访问;若正常,添加入站规则允许TCP 31000端口。

(3)WSL集成配置检查

  • 打开Docker Desktop设置,进入Resources > WSL Integration,确保启用了当前使用的WSL发行版(如Ubuntu),并重启Docker。

4. Nginx Ingress控制器问题排查

  • 确认Ingress控制器Pod正常运行:
    kubectl get pods -n ingress-nginx
    
    所有Pod需处于Running状态,若有异常查看日志:
    kubectl logs -n ingress-nginx <ingress-controller-pod-name>
    
  • 配置Ingress资源时,需将域名映射到本地IP:
    编辑Windows的C:\Windows\System32\drivers\etc\hosts文件,添加:
    127.0.0.1 mongo-express.local
    
    对应Ingress配置中的host字段,确保路径和backend服务端口匹配。

5. 重置Docker网络环境

  • 打开Docker Desktop的Troubleshoot页面,点击Reset network,完成后重启Docker和Kubernetes,重新部署服务测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:53:36