У меня есть кластер GKE, созданный с помощью следующей команды:
gcloud container clusters create stage1 \
--enable-ip-alias \
--release-channel stable \
--zone us-central1 \
--node-locations us-central1-a,us-central1-b
Теперь я хотел подключить свое PHP-приложение к облачному SQL. Чтобы разрешить доступ к облачному SQL из PHP-приложения, запущенного в pod, я выполнил следующие шаги
- Создал секрет
kubectl create secret generic stage-cloudsql-secret \
--from-literal=db_host=<YOUR-PRIVATE-IP-ADDRESS>
- Обновил этот секретный модуль в разделе контейнеров следующим образом:
env:
- name: DB_HOST
valueFrom:
secretKeyRef:
name: stage-cloudsql-secret
key: db_host
Я обновил частный IP-адрес CloudSQL (вместе с именем БД, именем пользователя и паролем) в моем файле PHP (env.php), построил свой образ docker, создал pod в кластере GKE. При создании pod я получаю следующую ошибку от контейнера (неудачный контейнер):
SQLSTATE[HY000] [2002] Operation timed out
Примечание 1: Это работающее приложение в размещенной среде, и мы переносим его в облако Google
Заметка 2: GKE и Cloud SQL находятся в одном VPC (по умолчанию)
Заметка 3: Включено IP-алиасинг в кластере
Примечание 4: У меня есть контейнер, который создает данные в базе данных при запуске
Обновление 1
Я выполнил шаги, указанные в документации Google Cloud.Связь
У меня есть SSH в контейнере и я пытался добраться (Ping) до облака SQL, используя частный IP. Но я не смог
Обновление 2
После перехода по ссылкам выше я изменил способ создания секрета (на этот раз просто частный IP). Я также обновил свой env.php, как показано ниже
array (
'table_prefix' => '',
'connection' =>
array (
'default' =>
array (
'host' => getenv('DB_HOST'),
Ранее 'host' => [Частный IP-адрес Cloud SQL]
На этот раз при создании модуля отображается следующая ошибка:
SQLSTATE[HY000] [2002] Такого файла или каталога нет
Обновление 3
Я снова повторил все шаги и все заработало.