Indirizzo IP in uscita statico

Per impostazione predefinita, un servizio Cloud Run si connette agli endpoint esterni su internet utilizzando un pool di indirizzi IP dinamici. Se il servizio Cloud Run si connette a un endpoint esterno che richiede un indirizzo IP statico, ad esempio un database o un'API che utilizza un firewall basato su indirizzi IP, devi configurare il servizio Cloud Run in modo che instradi le richieste utilizzando un indirizzo IP statico.

Questa pagina descrive come abilitare un servizio Cloud Run per l'invio di richieste utilizzando un indirizzo IP statico.

Ti consigliamo di configurare Cloud Run in modo che invii il traffico a una rete VPC utilizzando il traffico VPC diretto in uscita. Tuttavia, hai la possibilità di creare un connettore.

Panoramica dell'attività

Per consentire a un servizio Cloud Run di instradare le richieste utilizzando un indirizzo IP statico, configura il traffico VPC in uscita del servizio Cloud Run in modo che instradi tutto il traffico in uscita attraverso una rete VPC con un gateway Cloud NAT configurato con l'indirizzo IP statico.

In questo tutorial, configurerai Cloud NAT in modalità manuale e gli assegnerai un singolo indirizzo IP statico. Se i carichi di lavoro Cloud Run fanno lo scale up a un numero elevato, potresti dover assegnare più indirizzi IP statici a Cloud NAT. Scopri di più su come i gateway Cloud NAT utilizzano indirizzi IP e porte.

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.

Configurare 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 verso endpoint esterni utilizzando un indirizzo IP statico, configura un gateway Cloud NAT.

gcloud

  1. 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.
  2. Prenota un indirizzo IP statico. Una risorsa 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 quanto segue:

    • ORIGIN_IP_NAME: il nome che vuoi assegnare alla risorsa indirizzo IP.
    • REGION: la regione in cui verrà eseguito il router Cloud NAT. Utilizza la stessa regione del servizio Cloud Run per ridurre al minimo la latenza e i costi di rete.
  3. 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 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 indirizzo IP riservato che hai creato nel passaggio precedente.

Terraform

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

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

    resource "google_compute_router" "default" {
      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 subnet.

  2. Prenota un indirizzo IP statico. Una risorsa indirizzo IP riservato conserva l'indirizzo IP sottostante quando la risorsa a cui è associata viene eliminata e ricreata:

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

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

  3. 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:

    resource "google_compute_router_nat" "default" {
      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.

Instradare il traffico Cloud Run attraverso la rete VPC

Dopo aver configurato Cloud NAT, esegui il deployment o aggiorna il servizio Cloud Run con il traffico VPC diretto in uscita o il connettore di accesso VPC serverless , e imposta il traffico VPC in uscita in modo che instradi 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 traffico VPC diretto in uscita e instradi tutto il traffico in uscita, esegui il seguente 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 esempio, us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato di LOCATION-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 aggiornare il servizio Cloud Run in modo che utilizzi un connettore di accesso VPC serverless e instradi tutto il traffico in uscita, esegui il seguente 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 esempio, us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato di LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • CONNECTOR_NAME: il nome del tuo connettore di accesso VPC serverless.
  • REGION: una regione per il tuo servizio.

YAML

Traffico VPC diretto in uscita

  1. 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
  2. Aggiorna in base alle esigenze.

    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.
  3. Crea o aggiorna il servizio utilizzando il seguente comando:

    gcloud run services replace service.yaml

Connettore di accesso VPC serverless

  1. 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
  2. Aggiorna in base alle esigenze.

    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 rete di accesso VPC serverless.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio, us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato di LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  3. Crea o aggiorna il servizio utilizzando il seguente comando:

    gcloud run services replace service.yaml

Terraform

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Questo servizio Cloud Run utilizza un connettore VPC e instrada tutto il traffico in uscita:

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

  deletion_protection = false # set to "true" in production

  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.

Verificare l'indirizzo IP esterno statico

Dopo aver completato i passaggi precedenti, hai configurato Cloud NAT sulla rete VPC con un indirizzo IP statico predefinito e hai instradato tutto il traffico in uscita del servizio Cloud Run nella rete VPC. Le richieste del servizio Cloud Run attraversano 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 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 Rilasciare un indirizzo IP esterno statico.