Per impostazione predefinita, i workload Cloud Run si connettono agli endpoint esterni su internet utilizzando un pool regionale di indirizzi IP dinamici condivisi tra tutti i workload serverless. Poiché altri workload condividono questo pool, non devi fare affidamento su di esso quando hai bisogno di un indirizzo IP di origine prevedibile o di una reputazione IP isolata.
Configura i workload Cloud Run per instradare le richieste in uscita utilizzando un indirizzo IP statico dedicato nelle seguenti situazioni:
- Ti connetti a un database o a un'API esterni che utilizzano una lista consentita di indirizzi IP o un firewall.
- Ti connetti a endpoint esterni sensibili alla reputazione, come gateway di pagamento, database ospitati o API partner protette da web application firewall (WAF) di terze parti. Il traffico rumoroso di un altro tenant nel pool di IP condivisi predefinito può peggiorare la reputazione degli IP e causare il blocco o la limitazione delle richieste da parte dei WAF esterni.
- Esegui workload di scansione di rete autorizzata, enumerazione delle porte, fingerprinting degli host, rilevamento delle vulnerabilità, web scraping o test di carico.
Per inviare richieste in uscita da un indirizzo IP statico dedicato, configura il servizio Cloud Run in modo che utilizzi il VPC diretto in uscita. Puoi anche creare un connettore.
Panoramica delle attività
Per instradare le richieste utilizzando un indirizzo IP statico, configura il traffico VPC in uscita del servizio in modo che invii tutto il traffico in uscita (--vpc-egress=all-traffic) tramite una rete VPC.
Collega un gateway Cloud NAT alla rete con l'indirizzo IP statico riservato.
In questo tutorial configurerai Cloud NAT in modalità manuale e gli assegnerai un singolo indirizzo IP statico. Se i tuoi workload scalano su molte istanze di container o aprono molte connessioni simultanee, ad esempio durante la scansione di reti autorizzate, assegna più indirizzi IP statici a Cloud NAT. Puoi anche aumentare il numero minimo di porte per istanza di container o abilitare l'allocazione dinamica delle porte per evitare l'esaurimento delle porte. Scopri di più su come i gateway Cloud NAT utilizzano indirizzi IP e porte.
Il routing del traffico tramite Cloud NAT non aggiunge un hop aggiuntivo nello stack di networking perché il gateway Cloud NAT e il router Cloud forniscono solo un control plane e i pacchetti non passano attraverso il gateway NAT o il router Cloud.
Configura la Network Address Translation (NAT)
Se utilizzi il traffico VPC diretto in uscita o un connettore di accesso VPC serverless, le richieste del tuo servizio Cloud Run arrivano alla tua rete VPC. Se vuoi instradare le richieste in uscita verso endpoint esterni utilizzando un IP statico, configura un gateway Cloud NAT.
gcloud
Crea un nuovo router Cloud per programmare un gateway Cloud NAT:
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
Sostituisci quanto segue:
ROUTER_NAME: un nome per la risorsa router Cloud che vuoi creare.NETWORK_NAME: il nome della rete VPC che hai trovato in precedenza.REGION: la regione in cui vuoi creare un gateway Cloud NAT.
Prenota un indirizzo IP statico. Una risorsa di indirizzo IP prenotato 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 quanto segue:
ORIGIN_IP_NAME: il nome che vuoi assegnare alla risorsa dell'indirizzo IP.REGION: la regione che eseguirà il router Cloud NAT. Utilizza la stessa regione del servizio Cloud Run per ridurre al minimo la latenza e i costi di rete.
Crea una configurazione del 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 quanto segue:
NAT_NAME: un nome per la risorsa gateway Cloud NAT che vuoi creare.ROUTER_NAME: il nome del tuo router Cloud.REGION: la regione in cui vuoi creare un gateway Cloud NAT.SUBNET_NAME: il nome della subnet.ORIGIN_IP_NAME: il nome della risorsa dell'indirizzo IP prenotato che hai creato nel passaggio precedente.
Terraform
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Crea un nuovo router Cloud per programmare un gateway Cloud NAT:
Sostituisci
cr-static-ip-routercon il nome della subnet.Prenota un indirizzo IP statico. Una risorsa di indirizzo IP prenotato conserva l'indirizzo IP sottostante quando la risorsa a cui è associata viene eliminata e ricreata:
Sostituisci
cr-static-ip-addrcon il nome della subnet.Crea una configurazione del 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-natcon il nome del gateway Cloud NAT.
Instrada il traffico di Cloud Run attraverso la rete VPC
Dopo aver configurato Cloud NAT, esegui il deployment o l'aggiornamento del servizio Cloud Run con il traffico VPC diretto in uscitao il connettore di accesso VPC serverlesse imposta il traffico VPC in uscita in modo da instradare tutto il traffico attraverso la rete VPC:
gcloud
VPC diretto in uscita
Per eseguire il deployment o l'aggiornamento del servizio Cloud Run in modo che utilizzi il traffico VPC diretto in uscita e instradi tutto il traffico in uscita attraverso questo, esegui questo comando:
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --region=REGION \ --vpc-egress=all-traffic
Sostituisci quanto segue:
- SERVICE_NAME: il nome del servizio Cloud Run di cui vuoi eseguire il deployment.
IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- NETWORK: il nome della tua rete VPC.
- SUBNET: il nome della subnet.
- REGION: una regione per il tuo servizio.
Connettore di accesso VPC serverless
Per eseguire il deployment o l'aggiornamento del servizio Cloud Run in modo che utilizzi un connettore di accesso VPC serverless e instradi tutto il traffico in uscita attraverso questo connettore, esegui questo comando:
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --vpc-connector=CONNECTOR_NAME \ --region=REGION \ --vpc-egress=all-traffic
Sostituisci quanto segue:
- SERVICE_NAME: il nome del servizio Cloud Run di cui vuoi eseguire il deployment.
IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- CONNECTOR_NAME: il nome del connettore di accesso VPC serverless.
- REGION: una regione per il tuo servizio.
YAML
VPC diretto in uscita
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe SERVICE --format export > service.yaml
Aggiorna se necessario.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]' run.googleapis.com/vpc-access-egress: all-traffic spec: containers: - image: IMAGE_URL
Sostituisci quanto segue:
- SERVICE: il nome del servizio Cloud Run.
- NETWORK: il nome della tua rete VPC.
- SUBNET: il nome della subnet.
- IMAGE_URL: l'URL dell'immagine container del servizio.
Crea o aggiorna il servizio utilizzando il seguente comando:
gcloud run services replace service.yaml
Il comando
gcloud run services replaceutilizza per impostazione predefinita il fileservice.yaml, se presente.
Connettore di accesso VPC serverless
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe SERVICE --format export > service.yaml
Aggiorna se necessario.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME spec: containers: - image: IMAGE_URL
Sostituisci quanto segue:
- SERVICE: il nome del servizio Cloud Run.
- CONNECTOR_NAME: il nome della tua rete di accesso VPC serverless.
IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Crea o aggiorna il servizio utilizzando il seguente comando:
gcloud run services replace service.yaml
Il comando
gcloud run services replaceutilizza per impostazione predefinita il fileservice.yaml, se presente.
Terraform
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
VPC diretto in uscita
Questo servizio Cloud Run utilizza il VPC diretto in uscita e instrada tutto il traffico in uscita tramite questo:
Connettore di accesso VPC serverless
Questo servizio Cloud Run utilizza un connettore VPC e instrada tutto il traffico in uscita attraverso di esso:
Sostituisci us-docker.pkg.dev/cloudrun/container/hello con un riferimento alla tua immagine container.
Verifica l'indirizzo 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 nella tua rete VPC. Le richieste provenienti dal tuo servizio Cloud Run viaggiano 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 inviare una richiesta a un'API o a un sito web come curlmyip.org che mostra l'indirizzo IP di origine.
Eliminazione dell'indirizzo IP esterno statico
Se non hai più bisogno di un indirizzo IP esterno statico, consulta Rilascia un indirizzo IP esterno statico.