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

Minikube中Spring Boot应用无法通过K8s Pod/Service连接MySQL数据库

解决方案

1. 修正MySQL绑定地址

MySQL默认仅绑定127.0.0.1,容器环境下需要允许所有IP访问:

  • 修改db-deploy.yaml中MySQL容器的启动命令,添加--bind-address=0.0.0.0:
containers:
- name: mysql
  image: mysql:8.0
  command: ["mysqld", "--bind-address=0.0.0.0"]
  # 其他配置(环境变量、端口挂载等)保持不变
  • 重新部署MySQL:kubectl apply -f db-deploy.yaml

2. 调整MySQL用户权限

确保数据库用户允许从任意IP访问(而非仅localhost):

  • 进入MySQL Pod执行命令:kubectl exec -it <mysql-pod-name> -- mysql -u root -p
  • 执行权限修改语句:
-- 替换your_user和your_password为实际配置
CREATE USER IF NOT EXISTS 'your_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'%';
FLUSH PRIVILEGES;

3. 修正JDBC URL配置

确保Spring Boot应用的数据库连接地址使用Kubernetes Service名称而非localhost,并补充必要参数:

  • 修改application.yaml中的spring.datasource.url:
spring:
  datasource:
    url: jdbc:mysql://<mysql-service-name>:3306/your_database?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    username: your_user
    password: your_password

注意:<mysql-service-name>替换为你在db-deploy.yaml中定义的Service名称;allowPublicKeyRetrieval=true用于解决MySQL 8.0+的公钥检索限制。

4. 验证Service连通性与DNS解析

虽然curl能连通,但确认应用Pod能正确解析Service名称:

  • 进入应用Pod执行:nslookup <mysql-service-name>,检查是否能返回正确的ClusterIP
  • 若解析失败,检查Kubernetes CoreDNS是否正常运行:kubectl get pods -n kube-system | grep coredns

5. 检查驱动版本兼容性

确保Spring Boot使用的MySQL驱动版本与MySQL服务器版本匹配:

  • 若使用MySQL 8.0+,pom.xml中驱动版本应在8.0以上:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

6. 查看详细错误日志定位问题

若以上步骤无效,查看MySQL容器的连接日志:

  • 执行:kubectl logs <mysql-pod-name>,查找类似Access denied或Connection refused的关键字,精准定位权限或配置问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:13:13