Configurar conectores en un proyecto del host de VPC compartida

Si tu organización usa la VPC compartida, puedes configurar un conector de acceso a la VPC sin servidor en el proyecto de servicio o en el proyecto host. En esta guía se explica cómo configurar un conector en el proyecto host.

Si necesitas configurar un conector en un proyecto de servicio, consulta el artículo Configurar conectores en proyectos de servicio. Para obtener información sobre las ventajas de cada método, consulta el artículo Conexión a una red de VPC compartida.

Antes de empezar

  1. Consulta los roles de Gestión de Identidades y Accesos (IAM) de la cuenta que estés usando. La cuenta activa debe tener los siguientes roles en el proyecto host:

  2. Selecciona el proyecto host en el entorno que prefieras.

Consola

  1. Abre el Google Cloud panel de control de la consola.

    Ve al Google Cloud panel de control de la consola.

  2. En la barra de menú situada en la parte superior del panel de control, haz clic en el menú desplegable de proyectos y selecciona el proyecto host.

gcloud

Define el proyecto predeterminado en gcloud CLI como el proyecto host ejecutando lo siguiente en tu terminal:

gcloud config set project HOST_PROJECT_ID

Haz los cambios siguientes:

  • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida

Crear un conector de Acceso a VPC sin servidor

Para enviar solicitudes a tu red de VPC y recibir las respuestas correspondientes, debes crear un conector de acceso a VPC sin servidor. Puedes crear un conector mediante la Google Cloud consola, la CLI de Google Cloud o Terraform:

Consola

  1. Habilita la API Acceso a VPC sin servidor en tu proyecto.

    Habilitar API

  2. Ve a la página de resumen de Acceso a VPC sin servidor.

    Ir a Acceso a VPC sin servidor

  3. Haz clic en Crear conector.

  4. En el campo Name (Nombre), introduce un nombre para el conector. El nombre debe seguir las convenciones de nomenclatura de Compute Engine y tener menos de 21 caracteres. Los guiones (-) cuentan como dos caracteres.

  5. En el campo Región, selecciona una región para tu conector. Debe coincidir con la región de tu servicio sin servidores.

    Si tu servicio se encuentra en la región us-central o europe-west, usa us-central1 o europe-west1.

  6. En el campo Red, selecciona la red de VPC a la que quieras adjuntar el conector.

  7. Haz clic en el menú desplegable Subred:

    Selecciona una /28subred que no esté en uso.

    • El conector debe usar las subredes de forma exclusiva. No se pueden usar en otros recursos, como VMs, Private Service Connect o balanceadores de carga.
    • Para confirmar que tu subred no se usa en Private Service Connect ni en Cloud Load Balancing, comprueba que la subred purpose está PRIVATE. Para ello, ejecuta el siguiente comando en gcloud CLI:
      gcloud compute networks subnets describe SUBNET_NAME
      
      Sustituye SUBNET_NAME por el nombre de tu subred.
  8. (Opcional) Para definir opciones de escalado y tener más control sobre el conector, haz clic en Mostrar ajustes de escalado para que se muestre el formulario de escalado.

    1. Define el número mínimo y máximo de instancias de tu conector o usa los valores predeterminados, que son 2 (mínimo) y 10 (máximo). El conector se amplía hasta el máximo especificado a medida que aumenta el tráfico, pero no se reduce cuando el tráfico disminuye. Debe usar valores comprendidos entre 2 y 10, y el valor de MIN debe ser inferior al de MAX.
    2. En el menú desplegable Tipo de instancia, elige el tipo de máquina que se usará para el conector o usa el valor predeterminado e2-micro. Cuando elijas el tipo de instancia, verás la barra lateral de costes a la derecha, donde se muestran las estimaciones de ancho de banda y costes.
  9. Haz clic en Crear.

  10. Cuando el conector esté listo para usarse, aparecerá una marca de verificación de color verde junto a su nombre.

gcloud

  1. Actualiza los componentes de gcloud a la versión más reciente:

    gcloud components update
    
  2. Habilita la API Serverless VPC Access en tu proyecto:

    gcloud services enable vpcaccess.googleapis.com
    
  3. Crea un conector de Acceso a VPC sin servidor:

    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

    Haz los cambios siguientes:

    • CONNECTOR_NAME: el nombre del conector. El nombre debe seguir las convenciones de nomenclatura de Compute Engine y tener menos de 21 caracteres. Los guiones (-) cuentan como dos caracteres.
    • REGION: una región para tu conector. Debe coincidir con la región de tu servicio sin servidor. Si tu servicio se encuentra en la región us-central o europe-west, usa us-central1 o europe-west1.
    • SUBNET: el nombre de una subred /28 sin usar.
      • El conector debe usar las subredes de forma exclusiva. No se pueden usar en otros recursos, como VMs, Private Service Connect o balanceadores de carga.
      • Para confirmar que tu subred no se usa en Private Service Connect ni en Cloud Load Balancing, comprueba que la subred purpose esté PRIVATE. Para ello, ejecuta el siguiente comando en gcloud CLI:
        gcloud compute networks subnets describe SUBNET_NAME
        
        Sustituye lo siguiente:
        • SUBNET_NAME: el nombre de la subred
    • HOST_PROJECT_ID: el ID del proyecto host
    • MIN: número mínimo de instancias que se deben usar para el conector. Usa un número entero entre 2 y 9. El valor predeterminado es 2. Para obtener información sobre el escalado de conectores, consulta Rendimiento y escalado.
    • MAX: número máximo de instancias que se pueden usar para el conector. Usa un número entero entre 3 y 10. El valor predeterminado es 10. Si el tráfico lo requiere, el conector se amplía a [MAX] instancias, pero no se reduce. Para obtener información sobre el escalado de conectores, consulta Rendimiento y escalado.
    • MACHINE_TYPE: f1-micro, e2-micro o e2-standard-4. Para obtener información sobre el rendimiento de los conectores, incluidos el tipo de máquina y el escalado, consulta Rendimiento y escalado.

    Para obtener más información y argumentos opcionales, consulta la referencia de gcloud.

  4. Verifica que el conector esté en el estado READY antes de usarlo:

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

    Haz los cambios siguientes:

    • CONNECTOR_NAME: el nombre del conector, que es el que especificaste en el paso anterior.
    • REGION: la región de tu conector. Es la región que has especificado en el paso anterior.

    El resultado debe contener la línea state: READY.

Terraform

Puede usar un recurso de Terraform para habilitar la 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"
}

Puedes usar módulos de Terraform para crear una red VPC y una subred, y, a continuación, crear el conector.

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
  ]
}

Habilita Cloud Run en el proyecto de servicio

Habilita la API de Cloud Run en el proyecto de servicio. Esto es necesario para añadir roles de gestión de identidades y accesos en los pasos posteriores y para que el proyecto de servicio use Cloud Run.

Consola

  1. Abre la página de la API Cloud Run.

    API de Cloud Run

  2. En la barra de menú situada en la parte superior del panel de control, haz clic en el menú desplegable de proyectos y selecciona el proyecto de servicio.

  3. Haz clic en Enable (Habilitar).

gcloud

Ejecuta lo siguiente en el terminal:

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

Haz los cambios siguientes:

  • SERVICE_PROJECT_ID: el ID del proyecto de servicio

Proporcionar acceso al conector

Para proporcionar acceso al conector, concede al proyecto de servicio el rol de IAM Usuario de Acceso a VPC sin servidor del agente de servicio de Cloud Run en el proyecto host.

Consola

  1. Abre la página de gestión de identidades y accesos.

    Ir a IAM

  2. Haz clic en el menú desplegable de proyectos y selecciona el proyecto host.

  3. Haz clic en Añadir.

  4. En el campo Principales nuevas, introduce la dirección de correo del agente de servicio de Cloud Run para el servicio de Cloud Run:

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

    Haz los cambios siguientes:

    • SERVICE_PROJECT_NUMBER: el número de proyecto asociado al proyecto de servicio. Es diferente del ID de proyecto. Puedes encontrar el número de proyecto en la página Configuración del proyecto del proyecto de servicio en la consola deGoogle Cloud .
  5. En el campo Rol, selecciona Usuario de acceso a VPC sin servidor.

  6. Haz clic en Guardar.

gcloud

Ejecuta lo siguiente en el terminal:

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

Haz los cambios siguientes:

  • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida
  • SERVICE_PROJECT_NUMBER: el número de proyecto asociado a la cuenta de servicio. Es diferente del ID de proyecto. Para encontrar el número de proyecto, ejecuta lo siguiente:

    gcloud projects describe SERVICE_PROJECT_ID
    

Hacer que el conector se pueda detectar

En la política de gestión de identidades y accesos del proyecto host, debes conceder los dos roles predefinidos siguientes a los principales que implementen servicios de Cloud Run:

También puede usar roles personalizados u otros roles predefinidos que incluyan todos los permisos del rol Lector de acceso a VPC sin servidor (vpcaccess.viewer).

Consola

  1. Abre la página de gestión de identidades y accesos.

    Ir a IAM

  2. Haz clic en el menú desplegable de proyectos y selecciona el proyecto host.

  3. Haz clic en Añadir.

  4. En el campo Nuevos principales, introduce la dirección de correo del principal que debería poder ver el conector desde el proyecto de servicio. Puedes introducir varias direcciones de correo en este campo.

  5. En el campo Rol, selecciona los dos roles siguientes:

    • Lector de acceso a VPC sin servidor
    • Lector de red de Compute
  6. Haz clic en Guardar.

gcloud

Ejecuta los siguientes comandos en tu terminal:

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

Haz los cambios siguientes:

  • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida
  • PRINCIPAL: la entidad que despliega servicios de Cloud Run. Consulta más información sobre la --membermarca.

Configurar el servicio para usar el conector

Para cada servicio de Cloud Run que requiera acceso a tu VPC compartida, debes especificar el conector del servicio. Puedes especificar el conector mediante la Google Cloud consola, la CLI de Google Cloud, un archivo YAML o Terraform al desplegar un servicio nuevo o actualizar uno que ya tengas.

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Seleccione Servicios en el menú y haga clic en Implementar contenedor para configurar un nuevo servicio. Si vas a configurar un servicio que ya tienes, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.

  3. Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.

  4. Haz clic en la pestaña Conexiones.

    imagen

    • En el campo Conector de VPC, selecciona un conector que quieras usar o Ninguno para desconectar tu servicio de una red de VPC.
  5. Haz clic en Crear o en Implementar.

gcloud

  1. Configura gcloud CLI para que use el proyecto que contiene el recurso de Cloud Run:

    gcloud config set project PROJECT_ID
    Sustituye lo siguiente:

    • PROJECT_ID: el ID del proyecto que contiene el recurso de Cloud Run que requiere acceso a tu VPC compartida. Si el recurso de Cloud Run está en el proyecto host, este es el ID del proyecto host. Si el recurso de Cloud Run está en un proyecto de servicio, este es el ID del proyecto de servicio.
  2. Usa la marca --vpc-connector.

  • En el caso de los servicios actuales:
    gcloud run services update SERVICE --vpc-connector=CONNECTOR_NAME
  • Para los servicios nuevos:
    gcloud run deploy SERVICE --image=IMAGE_URL --vpc-connector=CONNECTOR_NAME
    Sustituye lo siguiente:
    • SERVICE: el nombre de tu servicio
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest
    • CONNECTOR_NAME: el nombre de tu conector. Usa el nombre completo cuando implementes desde un proyecto de servicio de VPC compartida (en lugar del proyecto host). Por ejemplo:
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      donde HOST_PROJECT_ID es el ID del proyecto host, CONNECTOR_REGION es la región de tu conector y CONNECTOR_NAME es el nombre que le has dado al conector.

YAML

Configura gcloud CLI para que use el proyecto que contiene el recurso de Cloud Run:

gcloud config set project PROJECT_ID

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto que contiene el recurso de Cloud Run que requiere acceso a tu VPC compartida. Si el recurso de Cloud Run está en el proyecto host, este es el ID del proyecto host. Si el recurso de Cloud Run está en un proyecto de servicio, este es el ID del proyecto de servicio.
  1. Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Añada o actualice el atributo run.googleapis.com/vpc-access-connector en el atributo annotations, que a su vez se encuentra en el atributo spec de nivel superior:

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

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio de Cloud Run.
    • CONNECTOR_NAME: el nombre de tu conector. Usa el nombre completo cuando implementes desde un proyecto de servicio de VPC compartida (en lugar del proyecto host). Por ejemplo:
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      donde HOST_PROJECT_ID es el ID del proyecto host, CONNECTOR_REGION es la región de tu conector y CONNECTOR_NAME es el nombre que le has dado al conector.
    • REVISION con un nuevo nombre de revisión o elimínelo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir los siguientes criterios:
      • Empieza por SERVICE-
      • Contiene solo letras minúsculas, números y -
      • No termina con -
      • No supera los 63 caracteres
  3. Sustituye el servicio por su nueva configuración con el siguiente comando:

    gcloud run services replace service.yaml

Terraform

Puedes usar un recurso de Terraform para crear un servicio y configurarlo de forma que use tu conector.

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

  deletion_protection = false # set to "true" in production

  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"
    }
  }
}

Pasos siguientes