Connessione del servizio Google Cloud Run al database Google Cloud SQL
Ho 2 servizi cloud di Google:
- Servizio Google Cloud Run (nodo Js / Strapi)
- Servizio Google Cloud SQL (Mysql)
Ho aggiunto la connessione Cloud SQL al servizio Google Cloud Run dall'interfaccia utente e dispongo di un IP pubblico per il servizio Google Cloud SQL. Inoltre, ho aggiunto l'IP del servizio di esecuzione alle reti autorizzate del servizio SQL.
Se provo a connettermi da un altro server (esterno da Google cloud) posso collegarmi facilmente al servizio Google Cloud SQL ed eseguire query. Ma se provo a connettermi dall'interno del servizio GCloud Run con esattamente le stesse impostazioni (Ip, database_name, ecc.) La mia connessione si blocca e ottengo un errore di timeout nei log ...
Come consentire correttamente a Gcloud SQL di accettare connessioni da GCloud RUN?
Ho cercato altre risposte qui, ma sembrano tutte molto vecchie (intorno al 2015)
Risposte
Puoi utilizzare 3 modalità per accedere al tuo database
- Usa la funzionalità incorporata. In questo caso non è necessario specificare l'indirizzo IP, è un socket linux aperto per comunicare con il database come descritto nella documentazione
- Utilizza l'IP privato di Cloud SQL. Questa volta, non è necessario configurare una connessione nel servizio Cloud Run, non lo utilizzerai perché utilizzerai l'IP, non il socket linux. Questa soluzione richiedeva 2 cose
- Innanzitutto collega il tuo database al tuo VPC e dagli un IP privato
- Quindi, devi instradare il traffico IP privato di Cloud Run attraverso il tuo VPC. Per questo è necessario creare, e quindi allegare al servizio Cloud RUn, un VPC Connector senza server
- Usa l'IP pubblico CLoud SQL. Anche questa volta, non è necessario configurare una connessione nel servizio Cloud Run, non lo utilizzerai perché utilizzerai l'IP, non il socket linux. Per ottenere ciò, sono necessari più passaggi (ed è meno sicuro)
- Devi instradare tutto il traffico in uscita di Cloud Run attraverso il tuo VPC. Per questo è necessario creare, e quindi allegare al servizio Cloud RUn, un VPC Connector senza server
- Distribuisci il tuo servizio Cloud Run con Serverless VPC Connector e il parametro di connettività in uscita a "tutti"
- Quindi crea un Cloud NAT per instradare tutto il traffico dell'intervallo IP del connettore VPC a un singolo IP (o set di IP) (il collegamento è la documentazione di Cloud Functions, ma funziona esattamente allo stesso modo)
- Infine autorizza gli IP Cloud NAT sulle reti autorizzate Cloud SQL.
Nel tuo caso, hai inserito nella whitelist l'IP di Cloud Run, ma è un IP condiviso (un altro servizio può usare lo stesso !! Fai attenzione) e non è sempre lo stesso, c'è un pool di indirizzi IP utilizzati dal cloud di Google.