返回

Kubernetes 上 Laravel 连接 RDS 数据库失败?别慌,快来围观故障排除指南

php

Kubernetes 上 Laravel 连接 RDS 数据库失败:故障排除指南

在 Kubernetes 上部署 Laravel 应用时,数据库连接错误是常见的陷阱之一。本文旨在帮助你诊断和解决连接 RDS 数据库时遇到的 "Connection refused" 错误。

问题分析

当 Laravel 无法连接到数据库时,可能是以下原因造成的:

  • 环境变量未正确加载
  • .env 文件覆盖了环境变量
  • Laravel 配置缓存
  • Kubernetes Pod 权限不足
  • 自定义 .env 文件加载器

解决方案

环境变量加载

确保 Kubernetes Secrets 中的环境变量已正确定义,容器已挂载 Secret,并已重启容器。

.env 文件

检查 .env 文件是否包含正确的环境变量值,或将其删除以避免覆盖 Secrets。

Laravel 配置缓存

运行 php artisan config:cache 来清除缓存,强制 Laravel 重新加载配置。

Kubernetes Pod 权限

检查 Pod 是否具有访问 Secrets 的权限,并考虑使用 Kubernetes 凭证秘钥代替 Secrets。

自定义 .env 文件加载器

config/app.php 中注册一个自定义 .env 文件加载器,以从 Kubernetes Secrets 加载环境变量。

其他建议

  • 使用 getenv() 函数手动获取环境变量,并验证其值。
  • 检查容器日志和 Laravel DEBUG 日志以查找错误消息。
  • 检查 Kubernetes 控制台中的 Pod 状态。

结论

通过解决上述问题,你应该能够解决 Laravel 在 Kubernetes 上连接 RDS 数据库的错误。如果问题仍然存在,请检查容器和 Kubernetes 配置是否存在其他潜在问题。

常见问题解答

  1. 如何创建 Kubernetes Secret?
kubectl create secret generic my-secret --from-literal=DB_HOST=localhost --from-literal=DB_USER=root
  1. 如何挂载 Secret 到容器?

在 Pod 规范中添加 volume 和 volumeMount:

volumes:
  - name: my-secret
    secret:
      secretName: my-secret
volumeMounts:
  - name: my-secret
    mountPath: /var/secrets/my-secret
  1. 如何自定义 .env 文件加载器?

config/app.php 中添加:

$app->registerAlias(DotenvManager::class, 'dotenv');
  1. 如何清除 Laravel 配置缓存?

运行:

php artisan config:clear
  1. 如何启用 Laravel DEBUG 日志记录?

APP_DEBUG 环境变量设置为 true