无法从Cloud Run连接到Cloud SQL(通过身份验证代理

pftdvrlh  于 2022-10-15  发布在  PostgreSQL
关注(0)|答案(1)|浏览(162)

我正在尝试通过本地开发的Cloud Run应用程序(Node.js)访问我的Cloud SQL数据库(PostgreSQL)(使用Cloud Code作为VS代码扩展的一部分)。
我能够通过我终端中的Cloud SQL Auth代理访问数据库(使用psql "host=127.0.0.1 port=5432 sslmode=disable dbname=***user=***"),但从未能够从我本地的Cloud Run成功连接。
Cloud SQL数据库设置为My Cloud Run项目中的连接。
我尝试了两种连接方式(但都失败了):
1.使用示例连接名称:当我这样做时:

const pg = require('knex')({
  client: 'pg',
  connection: {
    user: '...', 
    password: '...',
    database: '...',
    host: '/cloudsql/...',
  },
  debug: true,
});

我得到以下错误:

connect ENOENT /cloudsql/.../.s.PGSQL.5432"

1.使用本地主机和端口:当我这样做时:

const pg = require('knex')({
  client: 'pg',
  connection: {
    user: '...', 
    password: '...',
    database: '...',
    host: '127.0.0.1',
    port: 5432,
  },
  debug: true,
});

我得到以下错误:

Error: connect ECONNREFUSED 127.0.0.1:5432
1bqhqjot

1bqhqjot1#

云代码本地云运行实现暂时不支持云SQL。添加在Cloud Run应用程序旁边运行的Cloud SQL Proxy的一种方法是将其作为侧车添加到Cloud Code在Cloud Run本地开发会话期间部署的容器中。尝试以下操作:
1.启动云代码Cloud Run: Run Locally会话
1.等待应用程序构建和启动,以及端点可用
1.此时,您的应用程序以容器的形式在mini kube中运行(位于单独的命名空间cloud-run-dev-internal中),并且部署名称与您的Cloud Run服务名称相匹配。
1.创建一个YAML补丁文件,它将在您的应用程序旁边启动Cloud SQL Proxy,以便它可以在本地使用(通过本地主机):

spec:
  template:
    spec:
      containers:
      - name: cloud-sql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy
        command:
        - "/cloud_sql_proxy"

        # By default, the proxy will write all logs to stderr. In some
        # environments, anything printed to stderr is consider an error. To
        # disable this behavior and write all logs to stdout (except errors
        # which will still go to stderr), use:
        - "-log_debug_stdout"

        # Replace DB_PORT with the port the proxy should listen on
        # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
        - "-instances=my-project:my-region:my-instance=tcp:3306"

1.将其保存为cloudsql-proxy-patch.yaml。按以下方式应用此修补程序文件:kubectl patch deployment {your_cloud_run_service_name} --patch-file cloudsql-proxy-patch.yaml --context cloud-run-dev-internal
1.过一段时间后,Cloud SQL Proxy应该会运行。要进行诊断,您可以使用Kubernetes Explorer并查看cloud-run-dev-internal命名空间,看看您的Pod是否同时拥有您的应用程序和Cloud SQL代理端CAR容器。
其余部分取决于您如何在本地配置您的Cloud SQL代理。有关如何将代理设置为侧车的更多详细信息,请参阅https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine#run_the_as_a_sidecar。

相关问题