Conexión del servicio Google Cloud Run a la base de datos Google Cloud SQL

Oct 30 2020

Tengo 2 servicios en la nube de Google:

  1. Servicio Google Cloud Run (Node Js / Strapi)
  2. Servicio Google Cloud SQL (Mysql)

He agregado la conexión de Cloud SQL al servicio Google Cloud Run desde la interfaz de usuario y tengo una IP pública para el servicio Google Cloud SQL. Además de eso, he agregado la IP del servicio de ejecución a las redes autorizadas del servicio SQL.

Si intento conectarme desde otro servidor (externo a la nube de Google), puedo conectarme fácilmente al servicio Google Cloud SQL y ejecutar consultas. Pero si intento conectarme desde dentro del servicio de ejecución de GCloud con exactamente la misma configuración (Ip, database_name, etc.), mi conexión se cuelga y aparece un error de tiempo de espera en los registros ...

¿Cómo permitir que Gcloud SQL acepte conexiones de GCloud RUN?

Busqué otras respuestas aquí, pero todas parecen muy antiguas (alrededor de 2015)

Respuestas

3 guillaumeblaquiere Oct 30 2020 at 02:55

Puede utilizar 3 modos para acceder a su base de datos

  • Utilice la función incorporada. En este caso, no necesita especificar la dirección IP, es un socket de Linux que está abierto para comunicarse con la base de datos como se describe en la documentación.
  • Usa la IP privada de Cloud SQL. Esta vez, no es necesario configurar una conexión en el servicio Cloud Run, no la usará porque usará la IP, no el socket de Linux. Esta solución requirió 2 cosas
    • En primer lugar, adjunte su base de datos a su VPC y dele una IP privada
    • Luego, debe enrutar el tráfico IP privado de Cloud Run a través de su VPC. Para ello, debe crear, y luego adjuntar al servicio Cloud RUn, un VPC Connector sin servidor
  • Utilice la IP pública de CLoud SQL. Esta vez nuevamente, no es necesario configurar una conexión en el servicio Cloud Run, no la usará porque usará la IP, no el socket de Linux. Para lograr esto, necesita más pasos (y es menos seguro)
    • Debe enrutar todo el tráfico de salida de Cloud Run a través de su VPC. Para ello, debe crear, y luego adjuntar al servicio Cloud RUn, un VPC Connector sin servidor
    • Implemente su servicio Cloud Run con Serverless VPC Connector y el parámetro de conectividad de salida para "todos"
    • Luego, cree un Cloud NAT para enrutar todo el tráfico del rango de IP del conector VPC a una sola IP (o conjunto de IP) (el enlace es la documentación de Cloud Functions, pero funciona exactamente de la misma manera)
    • Finalmente, autorice las IP de Cloud NAT en las redes autorizadas de Cloud SQL.

En su caso, ha incluido en la lista blanca la IP de Cloud Run, pero es una IP compartida (¡otro servicio puede usar la misma! ¡Tenga cuidado) y no siempre es la misma, hay un grupo de direcciones IP utilizadas por la nube de Google.