You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Win10下Minikube访问Kubernetes NodePort服务遭连接拒绝求助

排查Minikube中SpringBoot服务访问被拒绝的问题

别着急,咱们一步步从内到外排查这个连接拒绝的问题,先把每个环节的可能性都确认清楚:

1. 先确认Pod内的SpringBoot服务是否真的启动成功

Deployment显示1/1只能说明Pod容器处于Running状态,但不代表服务本身正常启动了。先查Pod的详细状态和日志:

kubectl get pods
kubectl describe pod <你的Pod名称,比如myspringbootserver-xxxxxx-xxxxx>

重点看Pod的日志,确认SpringBoot有没有正常监听端口:

kubectl logs <Pod名称>

如果日志里有类似Tomcat started on port(s): 9080 (http)的内容,说明服务启动没问题;如果有报错(比如端口冲突、配置文件错误),那先解决服务启动的问题。

2. 验证Service与Pod的关联是否正常

你的Service是NodePort类型,端口映射为9080:30451/TCP,需要确认Service的targetPort和SpringBoot的监听端口一致,且Service正确关联到Pod:

kubectl describe service myspringbootserver

看输出里的Endpoints字段,如果有对应的Pod IP和9080端口,说明关联正常;如果Endpoints是空的,大概率是Deployment的Pod标签和Service的选择器不匹配,得核对两者的labels配置。

3. 在Pod内部测试接口连通性

这一步能直接确认服务的接口是否可用:

kubectl exec -it <Pod名称> -- curl localhost:9080/MySpringBootServer/heartbeat

如果这里能正常返回结果,说明服务和接口路径都没问题;如果这里也失败,那就是SpringBoot的配置问题——比如server.port不是9080,或者server.servlet.context-path不是/MySpringBootServer,甚至接口路径本身写错了。

4. 到Minikube节点内部测试连通性

如果Pod内部没问题,咱们登录到Minikube节点试试:

minikube ssh

然后用Pod的IP访问接口:

curl <Pod的IP>:9080/MySpringBootServer/heartbeat

如果这里失败,可能是Pod的网络策略或者Minikube的网络配置有问题;如果成功,那问题就出在外部访问环节。

5. 检查Windows防火墙与Minikube网络模式

你用的是Windows 10,先看看Windows防火墙有没有放行30451端口,或者暂时关闭防火墙测试一下。另外,Minikube的驱动类型也会影响网络访问:

  • 如果是VirtualBox驱动,确认虚拟机的网络适配器是NAT模式,且端口转发规则里存在30451到Minikube节点的映射(minikube service一般会自动处理,但可以手动核对)。
  • 如果是Hyper-V驱动,确认Minikube虚拟机的网络连接到了能访问外部的虚拟交换机。

6. 最后核对接口路径的正确性

再仔细检查一下接口路径:SpringBoot的接口是不是真的是/MySpringBootServer/heartbeat?有没有大小写错误?比如有些时候上下文路径是小写的/myspringbootserver,或者接口路径少写了后缀?


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

火山引擎 最新活动