Indirizzo IP in uscita statico

Per impostazione predefinita, un servizio Cloud Run si connette agli endpoint esterni sulla usando un pool di indirizzi IP dinamici. Questa impostazione predefinita non è adatta se Il servizio Cloud Run si connette a un endpoint esterno richiede connessioni provenienti da un indirizzo IP statico, come un database utilizzando un firewall basato su indirizzi IP. Per queste connessioni, è necessario configurare il servizio Cloud Run per instradare le richieste attraverso un IP statico .

Questa guida descrive come abilitare un servizio Cloud Run per inviare richieste utilizzando un indirizzo IP statico.

Panoramica delle attività

Per consentire a un servizio Cloud Run di instradare le richieste attraverso un configurare l'indirizzo IP del servizio Cloud Run, Traffico in uscita VPC per instradare tutto il traffico in uscita attraverso una rete VPC con un Gateway Cloud NAT configurato con l'indirizzo IP statico.

Il routing del traffico tramite Cloud NAT non comporta hop aggiuntivo nello stack di networking, dato che il gateway Cloud NAT Il router Cloud fornisce solo un piano di controllo e i pacchetti non vengono trasmessi il gateway NAT o il router Cloud.

Tieni presente che tutti i servizi Cloud Run connessi La rete VPC condivide 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 utilizzi Traffico VPC diretto in uscita, utilizza una subnet esistente o creane un'altra. Se utilizzi un connettore, la subnet dedicata impedisce ad altre risorse di computing in del tuo VPC, ad esempio VM di Compute Engine o Google Kubernetes Engine dall'uso involontario dell'IP statico, se hai configurato Accesso VPC serverless per l'accesso a internet.

gcloud

  1. 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 tuo Connettore di accesso VPC serverless.

  2. Crea una subnet nel VPC 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 il nome che vuoi assegnare alla una subnet.
    • RANGE con Intervallo IP in CIDR che desideri assegnare alla subnet (ad es. 10.124.0.0/28)
    • NETWORK_NAME con il nome del rete VPC.
    • REGION con la regione in cui vuoi per creare un connettore di accesso VPC serverless.

Terraform

  1. Crea la rete VPC da utilizzare.

    resource "google_compute_network" "default" {
      provider = google-beta
      name     = "cr-static-ip-network"
    }

    Sostituisci cr-static-ip-network con il nome della subnet.

  2. Crea una subnet nel VPC Connettore di accesso VPC serverless.

    resource "google_compute_subnetwork" "default" {
      provider      = google-beta
      name          = "cr-static-ip"
      ip_cidr_range = "10.124.0.0/28"
      network       = google_compute_network.default.id
      region        = "us-central1"
    }

    Sostituisci

    • cr-static-ip con il nome della tua subnet
    • 10.124.0.0/28 con il tuo intervallo CIDR
    • us-central1 con la tua regione Google Cloud

Crea un connettore di accesso VPC serverless

Non è necessario creare un connettore se utilizzi l'integrazione del traffico VPC diretto in uscita. Se non utilizzi il traffico VPC diretto in uscita, è necessario un accesso VPC serverless per instradare il traffico in uscita del servizio Cloud Run a un rete VPC.

Per creare un connettore di accesso VPC serverless:

gcloud

  1. Crea un connettore di accesso VPC serverless con un una subnet.

    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 questo elemento 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 per creare un gateway NAT.

Terraform

  1. Creare un connettore di accesso VPC serverless.

    resource "google_project_service" "vpc" {
      provider           = google-beta
      service            = "vpcaccess.googleapis.com"
      disable_on_destroy = false
    }
    
    resource "google_vpc_access_connector" "default" {
      provider = google-beta
      name     = "cr-conn"
      region   = "us-central1"
    
      subnet {
        name = google_compute_subnetwork.default.name
      }
    
      # Wait for VPC API enablement
      # before creating this resource
      depends_on = [
        google_project_service.vpc
      ]
    }

    Sostituisci cr-conn con il nome del tuo Connettore di accesso VPC serverless

Configurare Network Address Translation (NAT)

Se utilizzi il traffico VPC diretto in uscita o un accesso VPC serverless le richieste dal tuo servizio Cloud Run arrivano al tuo rete VPC. Se vuoi instradare le richieste in uscita a endpoint esterni attraverso un IP statico, configura un gateway Cloud NAT.

gcloud

  1. 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 Risorsa router Cloud che vuoi creare.
    • NETWORK_NAME con il nome del che hai individuato in precedenza.
    • REGION con la regione in cui vuoi per creare un gateway NAT.
  2. Prenotare un indirizzo IP statico. Una risorsa di indirizzo IP riservato conserva all'indirizzo IP sottostante quando la risorsa a cui è associata è eliminato e ricreato:

    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 dell'indirizzo IP.
    • REGION con la regione che eseguirà il router Cloud NAT. Idealmente, si tratta della stessa regione Servizio Cloud Run per ridurre al minimo la latenza e i costi di rete.
  3. Crea una configurazione gateway Cloud NAT su questo router per instrada 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 un nome per Cloud NAT del gateway che vuoi creare.
    • ROUTER_NAME con il nome del tuo router Cloud.
    • REGION con la regione in cui vuoi per creare un gateway NAT.
    • ORIGIN_IP_NAME con il nome dell'IP riservato di indirizzi IP che hai creato nel passaggio precedente.

Terraform

  1. Crea un nuovo router Cloud per programmare un gateway NAT:

    resource "google_compute_router" "default" {
      provider = google-beta
      name     = "cr-static-ip-router"
      network  = google_compute_network.default.name
      region   = google_compute_subnetwork.default.region
    }

    Sostituisci cr-static-ip-router con il nome della tua subnet.

  2. Prenotare un indirizzo IP statico. Una risorsa di indirizzo IP riservato conserva all'indirizzo IP sottostante quando la risorsa a cui è associata è eliminati e ricreati:

    resource "google_compute_address" "default" {
      provider = google-beta
      name     = "cr-static-ip-addr"
      region   = google_compute_subnetwork.default.region
    }

    Sostituisci cr-static-ip-addr con il nome della tua subnet.

  3. Crea una configurazione gateway Cloud NAT su questo router per instrada il traffico proveniente dalla rete VPC utilizzando l'indirizzo IP statico che hai creato:

    resource "google_compute_router_nat" "default" {
      provider = google-beta
      name     = "cr-static-nat"
      router   = google_compute_router.default.name
      region   = google_compute_subnetwork.default.region
    
      nat_ip_allocate_option = "MANUAL_ONLY"
      nat_ips                = [google_compute_address.default.self_link]
    
      source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
      subnetwork {
        name                    = google_compute_subnetwork.default.id
        source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
      }
    }

    Sostituisci cr-static-nat con il nome del gateway Cloud NAT.

Instrada il traffico di Cloud Run attraverso la rete VPC

Dopo aver configurato NAT, esegui il deployment o l'aggiornamento di Cloud Run con il traffico in uscita VPC diretto o Accesso VPC serverless e imposta il traffico VPC in uscita su instrada tutto il traffico attraverso la rete VPC:

gcloud

  • Traffico VPC diretto in uscita

    Per eseguire il deployment o aggiornare il servizio Cloud Run in modo che utilizzi il VPC diretto in uscita e instradare tutto il traffico in uscita, esegui questo comando:

    gcloud run deploy SERVICE_NAME \
    --image=IMAGE_URL \
    --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, per ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • NETWORK con il nome della tua rete VPC.
    • SUBNET con il nome della tua subnet.
    • REGION con una regione per il tuo servizio.
  • Connettore di accesso VPC serverless

    Per eseguire il deployment o aggiornare il servizio Cloud Run in modo che utilizzi una Connettore di accesso VPC serverless e instrada tutto il traffico in uscita e il traffico che la attraversa, esegui questo comando:

    gcloud run deploy SERVICE_NAME \
    --image=IMAGE_URL \
    --vpc-connector=CONNECTOR_NAME \
    --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, per ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • CONNECTOR_NAME con il nome del tuo Connettore di accesso VPC serverless.
    • REGION con una regione per il tuo servizio.

Terraform

Questo servizio Cloud Run utilizza un connettore VPC instrada al suo interno tutto il traffico in uscita:

resource "google_cloud_run_v2_service" "default" {
  provider = google-beta
  name     = "cr-static-ip-service"
  location = google_compute_subnetwork.default.region

  template {
    containers {
      # Replace with the URL of your container
      #   gcr.io/<YOUR_GCP_PROJECT_ID>/<YOUR_CONTAINER_NAME>
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      max_instance_count = 5
    }
    vpc_access {
      connector = google_vpc_access_connector.default.id
      egress    = "ALL_TRAFFIC"
    }
  }
  ingress = "INGRESS_TRAFFIC_ALL"

}

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 sul tuo rete VPC con un indirizzo IP statico predefinito e puoi ha instradato tutto il traffico in uscita del tuo servizio Cloud Run verso il tuo rete VPC. Richieste dalla corsa del servizio Cloud Run attraverso la rete VPC e raggiungere endpoint esterni l'indirizzo IP statico.

Per verificare questo comportamento e confermare l'indirizzo IP di origine con cui il 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 l'articolo Rilasciare un indirizzo IP esterno statico.