次のコマンドで 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に接続したいと思いました。ポッドで実行されているPHPアプリケーションからクラウドSQLへのアクセスを承認するために、次の手順を実行しました。
- 秘密を作った
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
PHP ファイル (env.php) で CloudSQL プライベート IP (DB 名、ユーザー名、パスワードを含む) を更新し、Docker イメージをビルドして、GKE クラスターにポッドを作成しました。ポッドが作成されると、コンテナから次のエラーが発生します (コンテナが失敗しました)。
SQLSTATE[HY000] [2002] Operation timed out
注1: これはホスト環境で動作するアプリケーションであり、Google Cloudに移行しています。
注2: GKE と Cloud SQL は同じ VPC 内にあります (デフォルト)
注3: クラスター内のIPエイリアシングを有効にする
注4: 起動時にデータベースにデータを作成するコンテナがあります
アップデート1
Google Cloud ドキュメントに記載されている手順に従いました。リンク
コンテナにSSHで接続し、プライベートIPを使用してクラウドSQLにアクセス(Ping)しようとしましたが、できませんでした。
アップデート2
上記のリンクに従って、シークレットを作成する方法を変更しました(今回はプライベートIPのみ)。また、env.phpを以下のように更新しました。
array (
'table_prefix' => '',
'connection' =>
array (
'default' =>
array (
'host' => getenv('DB_HOST'),
以前の「ホスト」=> [Cloud SQL のプライベート IP]
今回はポッドの作成時に次のエラーが表示されます
SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリはありません
アップデート3
すべての手順をやり直しましたが、うまくいきました