Я развернул Laravel в Kubernetes и настроил переменные среды с помощью Kubernetes Secrets. Переменные среды включают учетные данные RDS. Когда я проверяю контейнер, я вижу, что учетные данные RDS правильно заполнены из секрета. Однако когда я пытаюсь получить доступ к любой конечной точке API, я сталкиваюсь со следующей ошибкой:
Код: Выделить всё
Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select count(*) as aggregate from 'users' where 'email' = jhon@gmail.com)
- Я могу получить доступ к RDS со своего сервера, используя конечную точку RDS, имя пользователя и пароль.
Код: Выделить всё
ubuntu@ip-xxxxxxxxxxx:/ecom-prod$ mysql -h ecom-db-identifier.xxxxxxxx.us-east-1.rds.amazonaws.com -u root -p
Enter password: xxxxx
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 113
Server version: 8.0.35 Source distribution
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| ecom |
| sys |
+--------------------+
5 rows in set (0.29 sec)
mysql> use ecom
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+------------------------+
| Tables_in_ecom |
+------------------------+
| activity_log |
| comments |
| failed_jobs |
| migrations |
| password_reset_tokens |
| permissions |
| personal_access_tokens |
| policies |
| users |
+------------------------+
9 rows in set (0.28 sec)
mysql>
- База данных и таблицы существуют, и я могу запрашивать данные из базы данных с помощью команд терминала.
- Когда я проверяю конфигурацию соединения с помощью php artisan Tinker, я получаю ожидаемую конфигурацию базы данных.
- Успешный доступ к RDS с сервера с помощью MySQL CLI.
- Подтверждено существование базы данных и таблиц.
- Проверено, что данные можно получить из базы данных с помощью php artisan Tinker.
Я ожидаю, что Laravel будет использовать переменные среды, предоставленные Kubernetes Secrets, для успешного подключения к базе данных RDS.
Фактическое поведение:
Несмотря на то, что переменные среды правильно заполненный в контейнере, Laravel, похоже, использует конфигурацию базы данных по умолчанию, что приводит к ошибке «Соединение отклонено».
Я могу читать данные из базы данных с помощью php artisan Tinker . Например:
Код: Выделить всё
> App\Models\User::find(1);
= App\Models\User {#5534
id: 1,
name: "Test User",
email: "test@example.com",
#email_verified_at: "2024-03-12 15:52:14",
#password: "y$.bHDGgvm4zY.ucub4L.avOcERJzaS72sC0GZna6cAhy2/3xI1Cr/e",
image: null,
#remember_token: "SnA9FiQFl8",
created_at: "2024-03-12 15:52:14",
updated_at: "2024-03-12 15:52:14",
}
Я создал тестовый маршрут и добавил в контроллер следующий код, чтобы проверить конфигурацию базы данных в браузере:
Код: Выделить всё
\DB::connection(config('database.default'))->getConfig()
Код: Выделить всё
{"driver":"mysql","host":"127.0.0.1","port":"3306","database":"forge","username":"forge","password":"","unix_socket":"","charset":"utf8mb4","collation":"utf8mb4_unicode_ci","prefix":"","prefix_indexes":true,"strict":true,"engine":null,"options":[],"name":"mysql"}
Why is Laravel not using the environment variables provided by Kubernetes Secrets for database configuration, and how can I resolve this issue?
Any insights or suggestions would be greatly appreciated. Thank you!
Источник: https://stackoverflow.com/questions/781 ... ot-applied
Мобильная версия