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

在application.yaml中拼接K8s环境变量配置JDBC连接失败排查

问题解决:Spring应用在Kubernetes中无法通过环境变量连接MySQL

问题场景

在minikube运行的Kubernetes集群中:

  • MySQL Pod通过ClusterIP类型的sql-service对外提供服务
  • Spring后端Pod通过LoadBalancer类型的backend-service对外提供服务
  • Spring应用中能正常获取到Kubernetes自动生成的SQL_SERVICE_SERVICE_HOST环境变量值,但application.yaml中的JDBC URL配置始终无法生效,此前两个Pod共享同一个LoadBalancer Service时用localhost可正常连接,最初怀疑是环境变量拼接方式错误。

问题根因

并非环境变量拼接错误,后端Deployment未定义MYSQL_ROOT_PASSWORD环境变量——该变量仅在MySQL容器的Deployment中配置,导致Spring应用无法正确获取数据库密码,从而连接失败。

解决方案

在后端Deployment的容器配置中添加MYSQL_ROOT_PASSWORD环境变量,值与MySQL容器中的配置保持一致。

修正后的后端Deployment配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: backend
        image: <imagelink redacted>
        ports:
        - containerPort: 8080
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "mysecret" # 与MySQL容器中的密码一致

原application.yaml配置无需修改

spring:
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  datasource:
    url: "jdbc:mysql://${SQL_SERVICE_SERVICE_HOST}:3306/peopledb?createDatabaseIfNotExist=true"
    username: root
    password: "${MYSQL_ROOT_PASSWORD}"
    driver-class-name: com.mysql.cj.jdbc.Driver

添加环境变量后,Spring应用即可正确读取数据库密码,通过Kubernetes Service自动生成的环境变量连接到MySQL服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:18:23