Configurare i connettori nel progetto host VPC condiviso

Se la tua organizzazione utilizza VPC condiviso, puoi configurare i connettori 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 rete VPC condivisa.

Prima di iniziare

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

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

Imposta il progetto predefinito nell'interfaccia a riga di comando gcloud sul progetto host eseguendo quanto segue nel terminale:

gcloud config set project HOST_PROJECT_ID

Sostituisci quanto segue:

  • HOST_PROJECT_ID: l'ID del progetto host 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 Google Cloud CLI o Terraform:

gcloud

  1. Aggiorna i componenti di gcloud all'ultima versione:

    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 rispettare la convezione di denominazione di Compute Engine e deve contenere meno di 21 caratteri. I trattini (-) vengono conteggiati come due caratteri.
    • REGION: una regione per il connettore. Deve corrispondere alla regione del servizio serverless. Se il tuo 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 utilizzati da altre risorse come VM, Private Service Connect o bilanciatori del carico.
      • Per verificare che la subnet non sia utilizzata per Private Service Connect o il bilanciamento del carico Cloud, controlla che la subnet purpose sia PRIVATE eseguendo il seguente comando in gcloud CLI:
        gcloud compute networks subnets describe SUBNET_NAME
        
        Sostituisci quanto segue:
        • 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 informazioni sulla scalabilità dei connettori, consulta Throughput 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 il ridimensionamento fino a [MAX] istanze, ma non esegue il ridimensionamento verso il basso. Per informazioni sulla scalabilità dei connettori, consulta Throughput e scalabilità.
    • MACHINE_TYPE: f1-micro, e2-micro o e2-standard-4. Per informazioni sulla velocità effettiva del connettore, inclusi il tipo di macchina e la scalabilità, consulta Velocità effettiva e scalabilità.

    Per maggiori dettagli e argomenti facoltativi, consulta le informazioni di riferimento su gcloud.

  4. Prima di utilizzarlo, verifica che il connettore sia nello stato READY:

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

    Sostituisci quanto segue:

    • CONNECTOR_NAME: il nome del connettore, ovvero il nome specificato nel passaggio precedente
    • REGION: la regione del connettore, ovvero quella specificata nel passaggio precedente

    L'output deve 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, quindi creare il connettore.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 10.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    = "~> 10.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 le funzioni Cloud Run per il progetto di servizio

Abilita l'API Cloud Functions per il progetto di servizio. Questo è necessario per aggiungere i ruoli IAM nei passaggi successivi e per consentire al progetto di servizio di utilizzare le funzioni Cloud Run.

Esegui quanto segue nel terminale:

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

Sostituisci quanto segue:

  • SERVICE_PROJECT_ID: l'ID del progetto di servizio

Fornire l'accesso al connettore

Fornisci l'accesso al connettore concedendo il ruolo IAM Agente di servizio delle funzioni Cloud Run Utente di accesso VPC serverless al progetto di servizio nel progetto host. Devi concedere lo stesso ruolo anche all'agente di servizio Cloud Run.

  1. Esegui questo comando nel terminale:

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

    Sostituisci quanto segue:

    • HOST_PROJECT_ID: l'ID del progetto host VPC condiviso
    • SERVICE_PROJECT_NUMBER: il numero del progetto associato al progetto di servizio. È diverso dall'ID progetto. Puoi trovare il numero di progetto eseguendo il seguente comando:

      gcloud projects describe SERVICE_PROJECT_ID
      
  2. Concedi il ruolo anche all'agente di servizio Cloud Run eseguendo il seguente comando:

    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
    

Rendi rilevabile il connettore

Nel criterio IAM del progetto host, devi concedere i seguenti due ruoli predefiniti 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).

  1. Esegui i seguenti 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 VPC condiviso
    • PRINCIPAL: il principale che esegue il deployment dei servizi Cloud Run. Scopri di più sul flag --member.

Configura la funzione per utilizzare il connettore

Per ogni funzione che richiede l'accesso al tuo VPC condiviso, devi specificare il connettore per la funzione. I passaggi seguenti mostrano come configurare la funzione per utilizzare un connettore.

  1. Imposta gcloud CLI in modo da utilizzare il progetto contenente la funzione:

    gcloud config set project PROJECT_ID
    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto contenente la funzione che richiede l'accesso al VPC condiviso. Se la funzione si trova nel progetto host, si tratta dell'ID progetto host. Se la funzione si trova in un progetto di servizio, si tratta dell'ID progetto di servizio.
  2. Utilizza il flag --vpc-connector e esegui il deployment della funzione:

    gcloud functions deploy FUNCTION_NAME --vpc-connector=CONNECTOR_NAME
    

    Sostituisci quanto segue:

    • FUNCTION_NAME: il nome della funzione
    • 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 che hai assegnato al connettore.

Per un maggiore controllo sulle richieste instradate tramite il connettore, consulta Impostazioni di uscita.

Passaggi successivi