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

Minikube集群Pod间通信异常及Spring Boot连MySQL超时求助

问题分析与修复方案

核心问题拆解

  1. 数据库连接端口用错:Spring Boot应用里把MySQL Service的NodePort(30060)当成内部访问端口了,K8s集群内部Pod访问Service得用ClusterIP端口(也就是Service配置里的port: 3306),NodePort是给集群外部访问用的。
  2. Minikube网络异常:正常情况下Minikube的Pod会接入CNI网络(比如flannel),不会用none网络,这说明集群的网络组件大概率没正常运行。

分步排查修复

1. 修正数据库连接配置

把Spring Boot的数据源URL改成:

spring.datasource.url=jdbc:mysql://mysql-service:3306/bootappdb?autoReconnect=true&useSSL=false

同时把Deployment里的DB_PORT环境变量也改成3306:

env:
  - name: DB_PORT
    value: "3306"

2. 检查Minikube网络组件状态

  • 查看CNI插件是否启用:
    minikube addons list
    
    找到flannel或者cni插件,要是显示disabled就执行启用命令:
    minikube addons enable flannel
    
  • 进入Minikube节点检查网络接口:
    minikube ssh
    # 进入节点后执行
    ip a
    
    需能看到cni0或者flannel.1这类CNI相关接口,没有则说明网络组件未正常安装。
  • 查看Pod的网络信息:
    kubectl get pods -n bootapp -o wide
    
    每个Pod需有正常的ClusterIP(比如10.244.x.x这类网段),如果Pod处于Running状态但无ClusterIP,说明网络配置异常。

3. 验证Pod间通信

  • 进入Spring Boot应用Pod,尝试ping MySQL Service:
    kubectl exec -n bootapp <inventory-service-pod名称> -- ping mysql-service
    
    如果ping不通,检查Service的Selector标签是否匹配MySQL Pod:
    kubectl describe service mysql-service -n bootapp
    
    查看Endpoints字段是否显示MySQL Pod的IP和端口,为空则说明Selector与MySQL Pod的标签不匹配(确认MySQL Pod的app=mysql8标签是否正确)。

4. 重置Minikube集群(终极方案)

如果上述步骤均无效,直接重置Minikube以修复网络配置:

minikube stop
minikube delete
minikube start --addons=flannel

额外提醒

  • MySQL的容器端口与Service的targetPort已正确对应,无需修改。
  • 确保inventory-service:latest镜像已加载到Minikube环境,本地镜像可通过minikube image load inventory-service:latest上传。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:16:59