![在沒有 CloudSQL 代理程式的情況下,無法從 GKE 連線到 CloudSQL - SQLSTATE[HY000] [2002] 操作逾時](https://rvso.com/image/761973/%E5%9C%A8%E6%B2%92%E6%9C%89%20CloudSQL%20%E4%BB%A3%E7%90%86%E7%A8%8B%E5%BC%8F%E7%9A%84%E6%83%85%E6%B3%81%E4%B8%8B%EF%BC%8C%E7%84%A1%E6%B3%95%E5%BE%9E%20GKE%20%E9%80%A3%E7%B7%9A%E5%88%B0%20CloudSQL%20-%20SQLSTATE%5BHY000%5D%20%5B2002%5D%20%E6%93%8D%E4%BD%9C%E9%80%BE%E6%99%82.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。為了授權從 Pod 中執行的 PHP 應用程式存取雲端 SQL,我已完成以下步驟
- 創造了一個秘密
kubectl create secret generic stage-cloudsql-secret \
--from-literal=db_host=<YOUR-PRIVATE-IP-ADDRESS>
- 更新了容器部分中我的 pod 的秘密,如下所示:
env:
- name: DB_HOST
valueFrom:
secretKeyRef:
name: stage-cloudsql-secret
key: db_host
我已在 PHP 檔案 (env.php) 中更新了 CloudSQL 私有 IP(以及資料庫名稱、使用者名稱和密碼),建置了我的 docker 映像,並在 GKE 叢集中建立了 pod。建立 Pod 後,我從容器中收到以下錯誤(失敗的容器):
SQLSTATE[HY000] [2002] Operation timed out
註1:這是託管環境中的工作應用程序,我們正在遷移到 Google 雲
筆記2:GKE 和 Cloud SQL 位於同一 VPC 中(預設)
註3:在叢集中啟用 IP 別名
註4:我有一個容器,它在啟動時在資料庫中建立數據
更新1
我已按照谷歌雲端文件中提到的步驟進行操作。關聯
我透過 SSH 連接到容器,並嘗試使用私人 IP 存取 (Ping) 雲端 SQL。但我不能
更新2
按照上面的連結後,我改變了創建秘密的方式(這次只是私有IP)。我還更新了我的 env.php 如下
array (
'table_prefix' => '',
'connection' =>
array (
'default' =>
array (
'host' => getenv('DB_HOST'),
之前的 'host' => [Cloud SQL 的私有 IP]
這次建立 pod 時顯示以下錯誤
SQLSTATE[HY000] [2002] 沒有這樣的檔案或目錄
更新3
我已經重做了所有步驟並且它的工作