在沒有 CloudSQL 代理程式的情況下,無法從 GKE 連線到 CloudSQL - SQLSTATE[HY000] [2002] 操作逾時

在沒有 CloudSQL 代理程式的情況下,無法從 GKE 連線到 CloudSQL - SQLSTATE[HY000] [2002] 操作逾時

我使用以下命令創建了 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

我已經重做了所有步驟並且它的工作

相關內容