【问题标题】:Connectivity issues from App Engine to CloudSQL using Private IP and Serverless VPC Access使用私有 IP 和无服务器 VPC 访问从 App Engine 到 CloudSQL 的连接问题
【发布时间】:2021-02-25 06:29:00
【问题描述】:

我正在做一个 PoC 以从 Google App Engine 连接到 CloudSQL instance,在 Private IP 上运行 SharedVPC。测试示例应用来自
https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/cloud-sql/mysql/sqlalchemy/README.md

我的Serverless VPC Connector Range如下

 $ gcloud compute networks vpc-access connectors list --region=us-central1
  CONNECTOR_ID       REGION       NETWORK          IP_CIDR_RANGE    MIN_THROUGHPUT  MAX_THROUGHPUT  STATE
  testserverlessvpc  us-central1  kube-shared-vpc  192.168.60.0/28  200             300             READY

Private IP Range如下

     $ gcloud compute addresses list --global --filter="purpose=VPC_PEERING"
  NAME                 ADDRESS/RANGE     TYPE      PURPOSE      NETWORK           REGION  SUBNET  STATUS
 cloudsqltestrangenew  10.0.100.0/20    INTERNAL  VPC_PEERING  kube-shared-vpc                   RESERVED

MySQL实例如下

$ gcloud sql instances list
 NAME       DATABASE_VERSION  LOCATION       TIER         PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
 mysql2           MYSQL_5_7         us-central1-b  db-f1-micro  -            10.0.100.5       RUNNABLE

app.standard.yaml如下

 runtime: python37

 service: appcentralpri
 env_variables:
     CLOUD_SQL_CONNECTION_NAME: projectname:us-central1:mysql2
     DB_USER: guestdb
     DB_PASS: password
     DB_NAME: testdb
     DB_HOST: 10.0.100.5:3306

     vpc_access_connector:
     name: projects/hostproject-26a2/locations/us-central1/connectors/testserverlessvpc

部署顺利,日志中没有遇到错误

    gcloud app deploy app.standard.yaml

但是,当我尝试连接到应用程序端点时,页面无法通过 "Server Not Found"

访问

我已将VPC AccessNetwork Compute User 角色分配给App Engine Default Service accountVPC Host Project 上的以下App Engine Default Service account

      <hostproject>-26a2@appspot.gserviceaccount.com 

更新

也在 app.yaml 下方添加,但没有运气

 env_variables:
   GAE_USE_SOCKETS_HTTPLIB : 'anyvalue'

https://cloud.google.com/appengine/docs/standard/python/sockets#making_httplib_use_sockets

CloudRunCloudSQL 的相同设置对我有用,但在 GAE 上遇到了困难。有解决此问题的建议吗?

【问题讨论】:

    标签: google-app-engine google-cloud-platform google-cloud-sql serverless google-vpc


    【解决方案1】:

    您的 app.yaml 文件格式错误。 vpc_access_connector: 需要位于根级别。这里将其作为环境变量值。

    runtime: python37
    
     service: appcentralpri
     env_variables:
         CLOUD_SQL_CONNECTION_NAME: projectname:us-central1:mysql2
         DB_USER: guestdb
         DB_PASS: password
         DB_NAME: testdb
         DB_HOST: 10.0.100.5:3306
    
     vpc_access_connector:
         name: projects/hostproject-26a2/locations/us-central1/connectors/testserverlessvpc
    

    【讨论】:

    • 谢谢。试过但没有运气
    • 为什么需要CLOUD_SQL_CONNECTION_NAME env var?你能分享你设置连接参数的代码吗?
    • Cloud Run 部署,在同一个项目中并使用同一个连接器有效吗?嗯。奇怪...你能解释一下你为什么要设置对等互连吗?它在哪些网络之间?
    • 不确定是否关注您的最新评论。无论如何,你能解释一下你在哪里部署了你的工作 Cloud Run 吗?使用与 App Engine 相同的 VPC 连接器和相同的项目?
    猜你喜欢
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多