无法在没有 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 应用程序连接到 Cloud SQL。为了授权从 Pod 中运行的 PHP 应用程序访问 Cloud 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

我已按照 Google 云文档中提到的步骤进行操作。关联

我已通过 SSH 进入容器并尝试使用私有 IP 访问(Ping)云 SQL。但我无法

更新 2

按照上述链接操作后,我改变了创建 secret 的方式(这次只是私有 ip)。我还更新了我的 env.php,如下所示

array (
    'table_prefix' => '',
    'connection' =>
    array (
      'default' =>
      array (
        'host' => getenv('DB_HOST'),

以前的“主机”=> [Cloud SQL 的私有 IP]

这次创建 pod 时会显示以下错误

SQLSTATE[HY000] [2002] 没有该文件或目录

更新 3

我重新执行了所有步骤,并且它有效

相关内容