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

EKS部署中Laravel应用通过Secrets和ConfigMap连接RDS失败

Laravel on EKS 无法连接同VPC内的RDS实例:连接被拒绝

错误信息

Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select count(*) as aggregate from 'users' where 'email' = jhon@gmail.com) in file /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 829

#0 /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php(983):
Illuminate\Database\Connection->runQueryCallback('select count(*)...', Array, Object

相关配置文件

deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecom-deployment
  namespace: ecom-eks
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: ecom
  template:
    metadata:
      labels:
        app.kubernetes.io/name: ecom
    spec:
      containers:
      - name: ecom
        image: public.ecr.aws/v9v3b4i5/ecom-api:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8010
        envFrom:
        - configMapRef:
            name: ecom-configmap
        env:
        - name: DB_USERNAME
          valueFrom:
            secretKeyRef:
              name: ecom-secret
              key: db_username
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: ecom-secret
              key: db_password

secret.yml

apiVersion: v1
kind: Secret
metadata:
  name: ecom-secret
  namespace: ecom-eks
type: Opaque
data:
  db_username: rds_username
  db_password: rds_password

configmap.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: ecom-configmap
  namespace: ecom-eks
data:
  APP_NAME: Laravel
  APP_ENV: local
  APP_KEY: 'base64:BPCsfQr+Wk46OcItjF0tXeHI8088jJA1Dr218vfL7is='
  APP_DEBUG: 'true'
  APP_URL: http://localhost

  LOG_CHANNEL: stack
  LOG_DEPRECATIONS_CHANNEL: null
  LOG_LEVEL: debug

  DB_CONNECTION: mysql
  DB_HOST: ecom.c7ebhqk.us-east-1.rds.amazonaws.com
  DB_PORT: '3306'
  DB_DATABASE: ecom

  BROADCAST_DRIVER: log
  CACHE_DRIVER: file
  FILESYSTEM_DISK: local
  QUEUE_CONNECTION: sync
  SESSION_DRIVER: file
  SESSION_LIFETIME: '120'

  MEMCACHED_HOST: 127.0.0.1

  REDIS_HOST: 127.0.0.1
  REDIS_PASSWORD: null
  REDIS_PORT: '6379'

  MAIL_MAILER: smtp
  MAIL_HOST: mailpit
  MAIL_PORT: '1025'
  MAIL_USERNAME: null
  MAIL_PASSWORD: null
  MAIL_ENCRYPTION: null
  MAIL_FROM_ADDRESS: 'hello@example.com'
  MAIL_FROM_NAME: "${APP_NAME}"

  PUSHER_APP_ID: ''
  PUSHER_APP_KEY: ''
  PUSHER_APP_SECRET: ''
  PUSHER_HOST: ''
  PUSHER_PORT: '443'
  PUSHER_SCHEME: https
  PUSHER_APP_CLUSTER: mt1

  VITE_PUSHER_APP_KEY: "${PUSHER_APP_KEY}"
  VITE_PUSHER_HOST: "${PUSHER_HOST}"
  VITE_PUSHER_PORT: "${PUSHER_PORT}"
  VITE_PUSHER_SCHEME: "${PUSHER_SCHEME}"
  VITE_PUSHER_APP_CLUSTER: "${PUSHER_APP_CLUSTER}"

已完成的验证步骤

  • 进入Pod打印环境变量,确认ConfigMap和Secrets的配置值已正确注入
  • 通过命令 mysql -h ecom.c7ebhqk.us-east-1.rds.amazonaws.com -u admin -p xxxxx 成功连接RDS数据库

排查与解决建议

1. 修复Secret的base64编码问题

Kubernetes Secret的data字段要求值必须是base64编码后的字符串,当前secret.yml中直接填写了明文的rds_username和rds_password,会导致Laravel获取到错误的用户名/密码,触发连接拒绝。

修复方法:
对实际的RDS用户名和密码进行base64编码:

echo -n "你的RDS实际用户名" | base64
echo -n "你的RDS实际密码" | base64

将输出的编码字符串替换到secret.yml的对应字段中,重新应用Secret:

kubectl apply -f secret.yml -n ecom-eks

2. 确认Laravel是否正确读取环境变量

虽然Pod的环境变量已正确注入,但需要验证Laravel是否真正加载了这些值:
进入Pod执行:

php artisan tinker

在tinker中执行以下命令验证配置:

env('DB_HOST');
env('DB_USERNAME');
env('DB_PASSWORD');

确认这些值与预期一致,尤其是用户名和密码是否正确解码。

3. 检查RDS安全组的入站规则

确保RDS实例的安全组配置了允许EKS节点/ Pod访问3306端口的入站规则:

  • 如果使用EKS托管节点组:允许节点组所在的安全组访问RDS的3306端口
  • 如果使用Fargate:允许Fargate Pod所在的安全组访问RDS的3306端口

4. 清除Laravel配置缓存

Laravel可能缓存了旧的数据库配置,导致没有读取最新的环境变量:
进入Pod执行:

php artisan config:clear

然后重启Pod或者重新部署,确保配置生效。

5. 在Pod内直接测试RDS连接

在Laravel Pod内安装mysql客户端(如果镜像没有预装),用Pod内的环境变量直接测试连接:

apt-get update && apt-get install -y mysql-client
mysql -h ${DB_HOST} -u ${DB_USERNAME} -p${DB_PASSWORD} ${DB_DATABASE}

如果此连接失败,说明环境变量传递或网络存在问题;如果成功,则需要排查Laravel的数据库配置逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:26:02