Minikube集群Pod间通信异常及Spring Boot连MySQL超时求助
问题分析与修复方案
核心问题拆解
- 数据库连接端口用错:Spring Boot应用里把MySQL Service的NodePort(30060)当成内部访问端口了,K8s集群内部Pod访问Service得用ClusterIP端口(也就是Service配置里的
port: 3306),NodePort是给集群外部访问用的。 - 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 listflannel或者cni插件,要是显示disabled就执行启用命令:minikube addons enable flannel - 进入Minikube节点检查网络接口:
需能看到minikube ssh # 进入节点后执行 ip acni0或者flannel.1这类CNI相关接口,没有则说明网络组件未正常安装。 - 查看Pod的网络信息:
每个Pod需有正常的ClusterIP(比如kubectl get pods -n bootapp -o wide10.244.x.x这类网段),如果Pod处于Running状态但无ClusterIP,说明网络配置异常。
3. 验证Pod间通信
- 进入Spring Boot应用Pod,尝试ping MySQL Service:
如果ping不通,检查Service的Selector标签是否匹配MySQL Pod:kubectl exec -n bootapp <inventory-service-pod名称> -- ping mysql-service
查看kubectl describe service mysql-service -n bootappEndpoints字段是否显示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
相关产品推荐
相关产品推荐

