Per impostazione predefinita, un servizio Cloud Run si connette a endpoint esterni su internet utilizzando un pool di indirizzi IP dinamico. Questo valore predefinito non è adatto se il servizio Cloud Run si connette a un endpoint esterno che richiede connessioni provenienti da un indirizzo IP statico, ad esempio un database o un'API che utilizzano un firewall basato su indirizzi IP. Per queste connessioni, devi configurare il servizio Cloud Run in modo che le richieste vengano instradate tramite un indirizzo IP statico.
Questa guida descrive come abilitare un servizio Cloud Run per inviare richieste utilizzando un indirizzo IP statico.
Panoramica attività
Per abilitare un servizio Cloud Run a instradare le richieste tramite un indirizzo IP statico, configura il traffico in uscita VPC del servizio Cloud Run in modo da instradare tutto il traffico in uscita attraverso una rete VPC con un gateway Cloud NAT configurato con l'indirizzo IP statico.
L'instradamento del traffico tramite Cloud NAT non causa un hop aggiuntivo nello stack di rete, poiché il gateway Cloud NAT e il router Cloud forniscono solo un piano di controllo e i pacchetti non passano attraverso il gateway NAT o il router Cloud.
Tieni presente che tutti i servizi Cloud Run connessi alla stessa rete VPC condividono lo stesso indirizzo IP in uscita. Per utilizzare indirizzi IP in uscita diversi per servizi Cloud Run separati, segui questa guida per creare subnet separate e, facoltativamente, connettori di accesso VPC serverless.
Crea una subnet
Devi creare una subnet /28
dedicata per ospitare un connettore. Se usi il traffico in uscita da VPC diretto, usa una subnet esistente o creane un'altra.
Se utilizzi un connettore, la subnet dedicata impedisce ad altre risorse di computing nel tuo VPC, come VM di Compute Engine o cluster di Google Kubernetes Engine, di utilizzare accidentalmente l'IP statico, se hai configurato l'accesso VPC serverless per accedere a internet.
Riga di comando
Trova il nome della tua rete VPC:
gcloud compute networks list
Dovresti vedere un output simile al seguente:
NAME SUBNET_MODE BGP_ROUTING_MODE default AUTO REGIONAL
Identifica la rete che collegherai al connettore di accesso VPC serverless.
Crea una subnet nel VPC per il connettore di accesso VPC serverless.
gcloud compute networks subnets create SUBNET_NAME \ --range=RANGE --network=NETWORK_NAME --region=REGION
Sostituisci i seguenti valori in questo comando:
SUBNET_NAME
con un nome da assegnare alla subnet.RANGE
con l'intervallo IP in formato CIDR da assegnare a questa subnet (ad es.10.124.0.0/28
)NETWORK_NAME
con il nome della rete VPC.REGION
con la regione in cui vuoi creare un connettore di accesso VPC serverless.
Terraform
Crea la rete VPC da utilizzare.
Sostituisci
cr-static-ip-network
con il nome della subnet.Crea una subnet nel VPC per il connettore di accesso VPC serverless.
Sostituisci
cr-static-ip
con il nome della tua subnet10.124.0.0/28
con il tuo intervallo CIDRus-central1
con la tua regione Google Cloud
Crea un connettore di accesso VPC serverless
Non è necessario creare un connettore se utilizzi l'integrazione diretta del traffico VPC in uscita. Se non utilizzi il traffico in uscita da VPC diretto, devi avere un connettore di accesso VPC serverless per instradare il traffico in uscita del servizio Cloud Run a una rete VPC.
Per creare un connettore di accesso VPC serverless:
Riga di comando
Crea un connettore di accesso VPC serverless con una subnet precreata.
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --region=REGION \ --subnet-project=PROJECT_ID \ --subnet=SUBNET_NAME
Sostituisci i seguenti valori in questo comando:
CONNECTOR
con un nome che vuoi assegnare a questa risorsa.PROJECT_ID
con un nome che ospita la subnet.SUBNET_NAME
con il nome della subnet che hai creato.REGION
con la regione in cui vuoi creare un gateway NAT.
Terraform
Crea un connettore di accesso VPC serverless.
Sostituisci
cr-conn
con il nome del tuo connettore di accesso VPC serverless
Configura Network Address Translation (NAT)
Se utilizzi il traffico VPC diretto in uscita o un connettore di accesso VPC serverless, le richieste del servizio Cloud Run arrivano alla rete VPC. Se vuoi instradare le richieste in uscita a endpoint esterni tramite un IP statico, configura un gateway Cloud NAT.
Riga di comando
Crea un nuovo router Cloud per programmare un gateway NAT:
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
Sostituisci i seguenti valori in questo comando:
ROUTER_NAME
con un nome per la risorsa Router Cloud che vuoi creare.NETWORK_NAME
con il nome della rete VPC trovata in precedenza.REGION
con la regione in cui vuoi creare un gateway NAT.
Prenota un indirizzo IP statico. Una risorsa di indirizzo IP riservato conserva l'indirizzo IP sottostante quando la risorsa a cui è associata viene eliminata e ricreata:
gcloud compute addresses create ORIGIN_IP_NAME --region=REGION
Sostituisci i seguenti valori in questo comando:
ORIGIN_IP_NAME
con il nome che vuoi assegnare alla risorsa indirizzo IP.REGION
con la regione che eseguirà il router Cloud NAT. Idealmente la stessa regione del servizio Cloud Run per ridurre al minimo la latenza e i costi di rete.
Crea una configurazione di gateway Cloud NAT su questo router per instradare il traffico proveniente dalla rete VPC utilizzando l'indirizzo IP statico che hai creato:
gcloud compute routers nats create NAT_NAME \ --router=ROUTER_NAME \ --region=REGION \ --nat-custom-subnet-ip-ranges=SUBNET_NAME \ --nat-external-ip-pool=ORIGIN_IP_NAME
Sostituisci i seguenti valori in questo comando:
NAT_NAME
con il nome della risorsa gateway Cloud NAT che vuoi creare.ROUTER_NAME
con il nome del tuo router Cloud.REGION
con la regione in cui vuoi creare un gateway NAT.ORIGIN_IP_NAME
con il nome della risorsa dell'indirizzo IP riservato che hai creato nel passaggio precedente.
Terraform
Crea un nuovo router Cloud per programmare un gateway NAT:
Sostituisci
cr-static-ip-router
con il nome della tua subnet.Prenota un indirizzo IP statico. Una risorsa di indirizzo IP riservato conserva l'indirizzo IP sottostante quando la risorsa a cui è associata viene eliminata e ricreata:
Sostituisci
cr-static-ip-addr
con il nome della tua subnet.Crea una configurazione di gateway Cloud NAT su questo router per instradare il traffico proveniente dalla rete VPC utilizzando l'indirizzo IP statico che hai creato:
Sostituisci
cr-static-nat
con il nome del tuo gateway Cloud NAT.
Instrada il traffico Cloud Run attraverso la rete VPC
Dopo aver configurato NAT, devi solo eseguire il deployment del servizio Cloud Run con traffico VPC diretto in uscita o il connettore di accesso VPC serverless e impostare il traffico VPC in uscita per instradare tutto il traffico attraverso la rete VPC:
Riga di comando
Esegui il deployment o l'aggiornamento del servizio Cloud Run per utilizzare il traffico VPC diretto in uscita o il connettore VPC e instradare tutto il traffico in uscita attraverso questo servizio:
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --vpc-connector=CONNECTOR_NAME \ --network=NETWORK \ --subnet=SUBNET \ --region=REGION \ --vpc-egress=all-traffic
Sostituisci i seguenti valori in questo comando:
- SERVICE_NAME con il nome del servizio Cloud Run di cui vuoi eseguire il deployment.
- IMAGE_URL con un riferimento all'immagine container,
ad esempio
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se utilizzi Artifact Registry, è necessario già creare il repository REPO_NAME. L'URL ha la formaLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - Facoltativo. CONNECTOR_NAME con il nome del connettore Accesso VPC serverless se non utilizzi il traffico in uscita VPC diretto.
- NETWORK con il nome della tua rete VPC.
- SUBNET con il nome della subnet.
- REGION con una regione per il tuo servizio.
Terraform
Questo servizio Cloud Run utilizza un connettore VPC e instrada tutto il traffico in uscita attraverso questo connettore:
Sostituisci us-docker.pkg.dev/cloudrun/container/hello
con un riferimento all'immagine container.
Verifica l'IP esterno statico
Dopo aver completato i passaggi precedenti, hai configurato Cloud NAT sulla tua rete VPC con un indirizzo IP statico predefinito e hai instradato tutto il traffico in uscita del servizio Cloud Run alla rete VPC. Le richieste del servizio Cloud Run si spostano attraverso la rete VPC e raggiungono gli endpoint esterni utilizzando l'indirizzo IP statico.
Per verificare questo comportamento e confermare l'indirizzo IP di origine utilizzato dal tuo servizio, puoi effettuare una richiesta a un'API o a un sito web come curlmyip.org che mostra l'indirizzo IP di origine.
Eliminazione dell'IP esterno statico
Se non hai più bisogno di un indirizzo IP esterno statico, consulta Rilasciare un indirizzo IP esterno statico.