![CloudSQL Proxy なしで GKE から CloudSQL に接続できません - SQLSTATE[HY000] [2002] 操作がタイムアウトしました](https://rvso.com/image/761973/CloudSQL%20Proxy%20%E3%81%AA%E3%81%97%E3%81%A7%20GKE%20%E3%81%8B%E3%82%89%20CloudSQL%20%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%20-%20SQLSTATE%5BHY000%5D%20%5B2002%5D%20%E6%93%8D%E4%BD%9C%E3%81%8C%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F.png)
次のコマンドで 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
すべての手順をやり直しましたが、うまくいきました