Configurare i connettori nel progetto host del VPC condiviso

Se la tua organizzazione utilizza un VPC condiviso, puoi configurare un connettore di accesso VPC serverless nel progetto di servizio o nel progetto host. Questa guida mostra come configurare un connettore nel progetto host.

Se devi configurare un connettore in un progetto di servizio, consulta Configurare i connettori nei progetti di servizio. Per scoprire i vantaggi di ciascun metodo, consulta Connessione a una VPC condiviso condivisa.

Prima di iniziare

  1. Controlla i ruoli Identity and Access Management (IAM) per l'account in uso. L'account attivo deve avere i seguenti ruoli nel progetto host:

  2. Seleziona il progetto host nell'ambiente che preferisci.

Console

  1. Apri la dashboard della console Google Cloud.

    Vai alla dashboard della console Google Cloud

  2. Nella barra dei menu nella parte superiore della dashboard, fai clic sul menu a discesa del progetto e seleziona il progetto host.

gcloud

Imposta il progetto predefinito in gcloud CLI sul progetto host eseguendo questo comando nel terminale:

gcloud config set project HOST_PROJECT_ID

Sostituisci quanto segue:

  • HOST_PROJECT_ID: l'ID del progetto host del VPC condiviso

Crea un connettore di accesso VPC serverless

Per inviare richieste alla tua rete VPC e ricevere le risposte corrispondenti, devi creare un connettore di accesso VPC serverless. Puoi creare un connettore utilizzando la console Google Cloud, Google Cloud CLI o Terraform:

Console

  1. Abilita l'API Serverless VPC Access per il tuo progetto.

    Abilita API

  2. Vai alla pagina di riepilogo dell'accesso VPC serverless.

    Vai all'accesso VPC serverless

  3. Fai clic su Crea connettore.

  4. Nel campo Nome, inserisci un nome per il connettore. Il nome deve seguire la convenzione di denominazione di Compute Engine e contenere meno di 21 caratteri. I trattini (-) vengono conteggiati come due caratteri.

  5. Nel campo Regione, seleziona una regione per il connettore. Deve corrispondere alla regione del servizio serverless.

    Se il servizio è nella regione us-central o europe-west, utilizza us-central1 o europe-west1.

  6. Nel campo Rete, seleziona la rete VPC a cui collegare il connettore.

  7. Fai clic sul menu a discesa Subnet:

    Seleziona una subnet /28 inutilizzata.

    • Le subnet devono essere utilizzate esclusivamente dal connettore. Non possono essere utilizzate da altre risorse come VM, Private Service Connect o bilanciatori del carico.
    • Per confermare che la subnet non sia utilizzata per Private Service Connect o Cloud Load Balancing, verifica che la subnet purpose sia PRIVATE eseguendo questo comando nell'interfaccia a riga di comando gcloud:
      gcloud compute networks subnets describe SUBNET_NAME
      
      SUBNET_NAME
  8. (Facoltativo) Per impostare le opzioni di scalabilità per un controllo aggiuntivo sul connettore, fai clic su Mostra impostazioni di scalabilità per visualizzare il modulo di scalabilità.

    1. Imposta il numero minimo e massimo di istanze per il connettore oppure utilizza i valori predefiniti, ovvero 2 (min) e 10 (massimo). Il connettore fa lo scale out al massimo specificato all'aumento del traffico, ma non viene fatto lo scale back quando il traffico diminuisce. Devi utilizzare valori compresi tra 2 e 10 e il valore MIN deve essere inferiore al valore MAX.
    2. Nel menu a discesa Tipo di istanza, scegli il tipo di macchina da utilizzare per il connettore oppure utilizza il valore predefinito e2-micro. Osserva la barra laterale dei costi sulla destra quando scegli il tipo di istanza, che mostra le stime relative a larghezza di banda e costi.
  9. Fai clic su Crea.

  10. Quando il connettore è pronto per essere utilizzato, accanto al nome del connettore viene visualizzato un segno di spunta verde.

gcloud

  1. Aggiorna i componenti di gcloud alla versione più recente:

    gcloud components update
    
  2. Abilita l'API Serverless VPC Access per il tuo progetto:

    gcloud services enable vpcaccess.googleapis.com
    
  3. Crea un connettore di accesso VPC serverless:

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --region=REGION \
    --subnet=SUBNET \
    --subnet-project=HOST_PROJECT_ID \
    # Optional: specify minimum and maximum instance values between 2 and 10, default is 2 min, 10 max.
    --min-instances=MIN \
    --max-instances=MAX \
    # Optional: specify machine type, default is e2-micro
    --machine-type=MACHINE_TYPE
    

    Sostituisci quanto segue:

    • CONNECTOR_NAME: un nome per il connettore. Il nome deve seguire la convenzione di denominazione di Compute Engine e contenere meno di 21 caratteri. I trattini (-) vengono conteggiati come due caratteri.
    • REGION: una regione per il connettore; deve corrispondere a quella del servizio serverless. Se il servizio si trova nella regione us-central o europe-west, utilizza us-central1 o europe-west1.
    • SUBNET: il nome di una subnet /28 inutilizzata.
      • Le subnet devono essere utilizzate esclusivamente dal connettore. Non possono essere utilizzate da altre risorse come VM, Private Service Connect o bilanciatori del carico.
      • Per confermare che la subnet non sia utilizzata per Private Service Connect o Cloud Load Balancing, verifica che la subnet purpose sia PRIVATE eseguendo questo comando nell'interfaccia a riga di comando gcloud:
        gcloud compute networks subnets describe SUBNET_NAME
        
        • SUBNET_NAME: il nome della subnet
    • HOST_PROJECT_ID: l'ID del progetto host
    • MIN: il numero minimo di istanze da utilizzare per il connettore. Utilizza un numero intero compreso tra 2 e 9. Il valore predefinito è 2. Per scoprire di più sulla scalabilità dei connettori, consulta Velocità effettiva e scalabilità.
    • MAX: il numero massimo di istanze da utilizzare per il connettore. Utilizza un numero intero compreso tra 3 e 10. Il valore predefinito è 10. Se il traffico lo richiede, il connettore esegue lo scale out a [MAX] istanze, ma non lo scale back. Per scoprire di più sulla scalabilità dei connettori, consulta Velocità effettiva e scalabilità.
    • MACHINE_TYPE: f1-micro, e2-micro o e2-standard-4. Per saperne di più sulla velocità effettiva del connettore, inclusi il tipo di macchina e la scalabilità, consulta Velocità effettiva e scalabilità.

    Per ulteriori dettagli e argomenti facoltativi, consulta la documentazione di riferimento di gcloud.

  4. Verifica che il connettore sia nello stato READY prima di utilizzarlo:

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region=REGION
    

    Sostituisci quanto segue:

    • CONNECTOR_NAME: il nome del connettore; si tratta del nome specificato nel passaggio precedente
    • REGION: la regione del connettore; si tratta della regione specificata nel passaggio precedente

    L'output dovrebbe contenere la riga state: READY.

Terraform

Puoi utilizzare una risorsa Terraform per abilitare l'API vpcaccess.googleapis.com.

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

Puoi utilizzare i moduli Terraform per creare una rete e una subnet VPC e quindi creare il connettore.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 9.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

Abilita Cloud Run per il progetto di servizio

Abilitare l'API Cloud Run per il progetto di servizio. Questa operazione è necessaria per aggiungere i ruoli IAM nei passaggi successivi e affinché il progetto di servizio utilizzi Cloud Run.

Console

  1. Apri la pagina dell'API Cloud Run.

    API Cloud Run

  2. Nella barra dei menu nella parte superiore della dashboard, fai clic sul menu a discesa del progetto e seleziona il progetto di servizio.

  3. Fai clic su Abilita.

gcloud

Esegui questo comando nel tuo terminale:

gcloud services enable run.googleapis.com --project=SERVICE_PROJECT_ID

Sostituisci quanto segue:

  • SERVICE_PROJECT_ID: l'ID del progetto di servizio

Fornisci l'accesso al connettore

Fornisci l'accesso al connettore concedendo al progetto di servizio Agente di servizio Cloud Run il ruolo IAM Utente accesso VPC serverless sul progetto host.

Console

  1. Apri la pagina IAM.

    Vai a IAM

  2. Fai clic sul menu a discesa del progetto e seleziona il progetto host.

  3. Fai clic su Aggiungi.

  4. Nel campo Nuove entità, inserisci l'indirizzo email dell'agente di servizio Cloud Run per il servizio Cloud Run:

    service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com

    Sostituisci quanto segue:

    • SERVICE_PROJECT_NUMBER: il numero di progetto associato al progetto di servizio. È diverso dall'ID progetto. Puoi trovare il numero del progetto nella pagina Impostazioni progetto del progetto di servizio della console Google Cloud.
  5. Nel campo Ruolo, seleziona Utente accesso VPC serverless.

  6. Fai clic su Salva.

gcloud

Esegui questo comando nel tuo terminale:

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
--role=roles/vpcaccess.user

Sostituisci quanto segue:

  • HOST_PROJECT_ID: l'ID del progetto host del VPC condiviso
  • SERVICE_PROJECT_NUMBER: il numero di progetto associato all'account di servizio. È diverso dall'ID progetto. Per trovare il numero del progetto, esegui questo comando:

    gcloud projects describe SERVICE_PROJECT_ID
    

Rendere il connettore rilevabile

Nel criterio IAM del progetto host, devi concedere i due ruoli predefiniti seguenti alle entità che eseguono il deployment dei servizi Cloud Run:

In alternativa, puoi utilizzare ruoli personalizzati o altri ruoli predefiniti che includono tutte le autorizzazioni del ruolo Visualizzatore accesso VPC serverless (vpcaccess.viewer).

Console

  1. Apri la pagina IAM.

    Vai a IAM

  2. Fai clic sul menu a discesa del progetto e seleziona il progetto host.

  3. Fai clic su Aggiungi.

  4. Nel campo Nuove entità, inserisci l'indirizzo email dell'entità che dovrebbe essere in grado di vedere il connettore del progetto di servizio. In questo campo puoi inserire più indirizzi email.

  5. Nel campo Ruolo, seleziona entrambi i ruoli seguenti:

    • Visualizzatore accesso VPC serverless
    • Visualizzatore rete Compute
  6. Fai clic su Salva.

gcloud

Esegui questi comandi nel terminale:

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/vpcaccess.viewer

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/compute.networkViewer

Sostituisci quanto segue:

  • HOST_PROJECT_ID: l'ID del progetto host del VPC condiviso
  • PRINCIPAL: l'entità che esegue il deployment dei servizi Cloud Run. Scopri di più sul flag --member.

Configura il servizio per l'utilizzo del connettore

Per ogni servizio Cloud Run che richiede l'accesso al tuo VPC condiviso, devi specificare il connettore per il servizio. Puoi specificare il connettore utilizzando la console Google Cloud, Google Cloud CLI, il file YAML o Terraform quando esegui il deployment di un nuovo servizio o l'aggiornamento di un servizio esistente.

Console

  1. Nella console Google Cloud, vai a Cloud Run:

    Vai a Cloud Run

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un servizio esistente, fai clic sul servizio e poi su Modifica ed esegui il deployment di nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina iniziale delle impostazioni del servizio in base alle tue esigenze, quindi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Connessioni.

    immagine

    • Nel campo Connettore VPC, seleziona un connettore da utilizzare oppure seleziona Nessuno per scollegare il servizio da una rete VPC.
  5. Fai clic su Crea o Esegui il deployment.

gcloud

  1. Imposta l'interfaccia alla gcloud CLI per utilizzare il progetto contenente la risorsa Cloud Run:

    gcloud config set project PROJECT_ID
    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto contenente la risorsa Cloud Run che richiede l'accesso al tuo VPC condiviso. Se la risorsa Cloud Run si trova nel progetto host, questo è l'ID progetto host. Se la risorsa Cloud Run si trova in un progetto di servizio, questo è l'ID progetto di servizio.
  2. Usa il flag --vpc-connector.

  • Per i servizi esistenti:
    gcloud run services update SERVICE --vpc-connector=CONNECTOR_NAME
  • Per i nuovi servizi:
    gcloud run deploy SERVICE --image=IMAGE_URL --vpc-connector=CONNECTOR_NAME
    Sostituisci quanto segue:
    • SERVICE: il nome del tuo servizio
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest
    • CONNECTOR_NAME: il nome del connettore. Utilizza il nome completo quando esegui il deployment da un progetto di servizio VPC condiviso (anziché dal progetto host), ad esempio:
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      dove HOST_PROJECT_ID è l'ID del progetto host, CONNECTOR_REGION è la regione del connettore e CONNECTOR_NAME è il nome assegnato al connettore.

YAML

Imposta gcloud CLI per utilizzare il progetto contenente la risorsa Cloud Run:

gcloud config set project PROJECT_ID

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto contenente la risorsa Cloud Run che richiede l'accesso al tuo VPC condiviso. Se la risorsa Cloud Run si trova nel progetto host, questo è l'ID progetto host. Se la risorsa Cloud Run si trova in un progetto di servizio, questo è l'ID progetto di servizio.
  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. Aggiungi o aggiorna l'attributo run.googleapis.com/vpc-access-connector sotto l'attributo annotations nell'attributo spec di primo livello:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
          name: REVISION

    Sostituisci quanto segue:

    • SERVICE: il nome del tuo servizio Cloud Run.
    • CONNECTOR_NAME: il nome del connettore. Utilizza il nome completo quando esegui il deployment da un progetto di servizio VPC condiviso (anziché dal progetto host), ad esempio:
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      dove HOST_PROJECT_ID è l'ID del progetto host, CONNECTOR_REGION è la regione del connettore e CONNECTOR_NAME è il nome assegnato al connettore.
    • REVISION con un nuovo nome di revisione oppure eliminala (se presente). Se specifichi un nuovo nome, la revisione deve soddisfare i seguenti criteri:
      • Inizia con SERVICE-
      • Contiene solo lettere minuscole, numeri e -
      • Non termina con -
      • Non supera i 63 caratteri
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Terraform

Puoi utilizzare una risorsa Terraform per creare un servizio e configurarlo in modo che utilizzi il connettore.

# Cloud Run service
resource "google_cloud_run_v2_service" "gcr_service" {
  name     = "mygcrservice"
  provider = google-beta
  location = "us-west1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        limits = {
          cpu    = "1000m"
          memory = "512Mi"
        }
      }
      # the service uses this SA to call other Google Cloud APIs
      # service_account_name = myservice_runtime_sa
    }

    scaling {
      # Limit scale up to prevent any cost blow outs!
      max_instance_count = 5
    }

    vpc_access {
      # Use the VPC Connector
      connector = google_vpc_access_connector.connector.id
      # all egress from the service should go through the VPC Connector
      egress = "ALL_TRAFFIC"
    }
  }
}

Passaggi successivi