Aprovisiona la VPC compartida

La VPC compartida te permite exportar subredes desde una Red de nube privada virtual (VPC) en un proyecto host a otro proyecto de servicio en la misma organización. Las instancias en los proyectos de servicio pueden tener conexiones de red en las subredes compartidas del proyecto host. En esta página, se describe cómo configurar y usar la VPC compartida, incluida la preparación administrativa necesaria para la organización.

La VPC compartida admite la exportación de subredes de solo IPv4 (pila única) y de IPv4 e IPv6 (pila doble).

Para obtener información sobre cómo desconectar proyectos de servicio o quitar la configuración de VPC compartida por completo, consulta Desaprovisiona una VPC compartida.

La VPC compartida también se conoce como “XPN” en la API y en la interfaz de línea de comandos.

Cuotas, límites y recursos aptos

Antes de comenzar, asegúrate de estar familiarizado con la VPC compartida y IAM en particular:

Prepara tu organización

Ten en cuenta la siguiente información cuando prepares tu organización.

Administradores y la IAM

Preparar la organización, configurar proyectos de host de VPC compartida y usar redes de VPC compartida implica un mínimo de tres funciones distintas de administración de identidades y accesos (IAM). Para obtener más detalles sobre cada función y la información sobre las funciones opcionales, consulta la sección IAM y administradores de la descripción general de la VPC compartida.

Restricciones de las políticas de la organización

Las restricciones de la política de la organización pueden proteger los recursos de VPC compartida a nivel del proyecto, de la carpeta o de la organización. En las siguientes secciones, se describe cada política.

Evita la eliminación accidental de proyectos host

La eliminación accidental de un proyecto host provocaría interrupciones en todos los proyectos de servicio asociados a él. Cuando un proyecto se configura para ser un proyecto host de VPC compartida, se le coloca un bloqueo especial, llamado retención. Siempre que la retención esté presente, evita que el proyecto se borre de forma accidental. La retención se quita de forma automática del proyecto host cuando ya no se configura para VPC compartida.

Un usuario con la función orgpolicy.policyAdmin puede definir una restricción de política a nivel de la organización (constraints/compute.restrictXpnProjectLienRemoval) que limite la eliminación de retenciones solo para las siguientes funciones:

  • Usuarios con roles/owner o roles/resourcemanager.lienModifier a nivel de la organización
  • Usuario con funciones personalizadas que incluyan los permisos resourcemanager.projects.get y resourcemanager.projects.updateLiens a nivel de la organización

Esto evita que un propietario del proyecto que no tiene las funciones roles/owner o resourcemanager.lienModifier a nivel de la organización pueda borrar por accidente un proyecto host de VPC compartida. Para obtener más información acerca de los permisos asociados con la función resourcemanager.lienModifier, consulta Establece una retención en un proyecto en la documentación de Resource Manager.

Debido a que las políticas de la organización se aplican a todos los proyectos de la organización, solo debes seguir estos pasos una vez para restringir la eliminación de la retención.

  1. Autentícate en gcloud como administrador de la organización o principal de IAM con el rol orgpolicy.policyAdmin. Reemplaza ORG_ADMIN por el nombre de un administrador de la organización:

    gcloud auth login ORG_ADMIN
    
  2. Para determinar el número de ID de la organización, consulta el resultado de este comando.

    gcloud organizations list
    
  3. Ejecuta este comando a fin de aplicar la política compute.restrictXpnProjectLienRemoval para la organización. Reemplaza ORG_ID por el número que definiste en el paso anterior.

    gcloud resource-manager org-policies enable-enforce \
        --organization ORG_ID compute.restrictXpnProjectLienRemoval
    
  4. Sal de gcloud si terminaste de realizar tareas como administrador de la organización para proteger la cuenta.

    gcloud auth revoke ORG_ADMIN
    

Restringe los archivos adjuntos del proyecto host

De forma predeterminada, un administrador de VPC compartida puede vincular un proyecto que no sea host con cualquier proyecto host en la misma organización. Un administrador de políticas de la organización puede limitar el conjunto de proyectos host con los que se puede vincular un proyecto que no sea host o proyectos que no sean host en una organización o carpeta. Para obtener más información, consulta la restricción constraints/compute.restrictSharedVpcHostProjects.

Limita las subredes del proyecto host que puede usar un proyecto de servicio

De forma predeterminada, después de configurar la VPC compartida, los principales de IAM en proyectos de servicio pueden usar cualquier subred del proyecto host si tienen los permisos de IAM adecuados. Además de administrar los permisos del usuario individuales, un administrador de políticas de la organización puede establecer una política para definir el conjunto de subredes a los que puede acceder un proyecto determinado o los proyectos de una organización o una carpeta. Para obtener más información, consulta la restricción constraints/compute.restrictSharedVpcSubnetworks.

Evita el cierre accidental de proyectos host

Desconectar la facturación en una red de VPC compartida puede provocar un cierre completo de todos los recursos dependientes, incluidos los proyectos de servicio. Para evitar un posible caso de un cierre accidental de la VPC compartida debido a la facturación inactiva o inhabilitada, asegura el vínculo entre el proyecto host y su cuenta de facturación.

Nombra administradores de VPC compartida

Un administrador de organización puede otorgar a uno o más principales de IAM las funciones de administrador de VPC compartida y administrador de IAM de proyectos.

La función de administrador de IAM del proyecto otorga permiso a los administradores de VPC compartida para compartir todas las subredes existentes y futuras, no solo las subredes individuales. Este otorgamiento crea una vinculación a nivel de organización o de carpeta, no a nivel de proyecto. Por lo tanto, los principales de IAM deben definirse en la organización, no solo en un proyecto.

Console

Para otorgar la función de administrador de VPC compartida a nivel de organización, haz lo siguiente:

  1. Accede a la consola de Google Cloud como administrador de la organización y, luego, ve a la página de IAM.

    Ve a la página IAM

  2. Desde el menú del proyecto, selecciona tu organización.

    Si seleccionas un proyecto, el menú Roles muestra entradas incorrectas.

  3. Haz clic en Agregar.

  4. Ingresa las direcciones de correo electrónico de los Principales nuevos.

  5. En el menú Roles, selecciona Compute Engine > Administrador de VPC compartida de Compute.

  6. Haz clic en Agregar otra función.

  7. En el menú desplegable Funciones, selecciona Administrador de recursos > Administrador de IAM del proyecto.

  8. Haz clic en Guardar.

Para otorgar la función de administrador de VPC compartida a nivel de carpeta, haz lo siguiente:

  1. Accede a la consola de Google Cloud como administrador de la organización y, luego, ve a la página de IAM.

    Ve a la página IAM

  2. Desde el menú del proyecto, selecciona tu carpeta.

    Si seleccionas un proyecto o una organización, las opciones que ves son incorrectas.

  3. Haz clic en Agregar.

  4. Ingresa las direcciones de correo electrónico de los Principales nuevos.

  5. En Seleccionar un rol, selecciona Compute Engine > Administrador de VPC compartida de Compute.

  6. Haz clic en Agregar otra función.

  7. En el menú Roles, selecciona Administrador de recursos > Administrador de IAM del proyecto.

  8. Haz clic en Agregar otra función.

  9. En el menú Roles, selecciona Administrador de recursos > Visualizador de red de Compute.

  10. Haz clic en Guardar.

gcloud

  1. Autentícate en gcloud como administrador de la organización. Reemplaza ORG_ADMIN por el nombre de un administrador de la organización:

    gcloud auth login ORG_ADMIN
    
  2. Para determinar el número de ID de la organización, consulta el resultado de este comando.

    gcloud organizations list
    
  3. Para asignar el rol de administrador de VPC compartida a nivel de organización, haz lo siguiente:

    1. Aplica la función de administrador de VPC compartida a un principal de IAM existente. Reemplaza ORG_ID por el número de ID de la organización del paso anterior y EMAIL_ADDRESS por la dirección de correo electrónico del usuario al que le otorgas la función de administrador de la VPC compartida.

      gcloud organizations add-iam-policy-binding ORG_ID \
        --member='user:EMAIL_ADDRESS' \
        --role="roles/compute.xpnAdmin"
      
      gcloud organizations add-iam-policy-binding ORG_ID \
        --member='user:EMAIL_ADDRESS' \
        --role="roles/resourcemanager.projectIamAdmin"
      
  4. Para asignar el rol de administrador de VPC compartida a nivel de carpeta, haz lo siguiente:

    1. Para determinar tu ID de carpeta, consulta el resultado de este comando.

      gcloud resource-manager folders list --organization=ORG_ID
      
    2. Aplica la función de administrador de VPC compartida a un principal de IAM existente. Reemplaza ORG_ID por el número de ID de la organización del paso anterior y EMAIL_ADDRESS por la dirección de correo electrónico del usuario al que le otorgas la función de administrador de la VPC compartida.

      gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.xpnAdmin"
      
      gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/resourcemanager.projectIamAdmin"
      
      gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.networkViewer"
      
  5. Revoca el token de la cuenta del administrador de la organización en la herramienta de línea de comandos de gcloud cuando termines de realizar tareas para proteger tu cuenta.

    gcloud auth revoke ORG_ADMIN
    

API

  • Para asignar la función de administrador de VPC compartida a nivel de organización, usa el siguiente procedimiento:

    1. Determina el número de ID de la organización.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations
      
    2. Describe y, luego, registra los detalles de la política de la organización existente.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:getIamPolicy
      

      Reemplaza ORG_ID por el ID de tu organización.

    3. Asigna el rol de administrador de VPC compartida.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:setIamPolicy
      {
        "bindings": [
          ...copy existing bindings
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.xpnAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/resourcemanager.projectIamAdmin"
          }
        ],
        "etag": "ETAG",
        "version": 1,
        ...other existing policy details
      }
      

      Reemplaza lo siguiente:

      • ORG_ID: El ID de la organización que contiene el usuario al que le otorgas el rol de administrador de VPC compartida.
      • EMAIL_ADDRESS: La dirección de correo electrónico del usuario.
      • ETAG: un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

      Para obtener más información, consulta el método organizations.setIamPolicy.

  • Para asignar el rol de administrador de VPC compartida a nivel de carpeta, usa la siguiente solicitud:

    1. Determina el número de ID de la organización.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations
      
    2. Busca el ID de la carpeta.

      GET https://cloudresourcemanager.googleapis.com/v2/folders?parent=organizations/ORG_ID
      

      Reemplaza ORG_ID por el ID de tu organización.

    3. Describe y, luego, registra los detalles de la política de la carpeta existente.

      POST https://cloudresourcemanager.googleapis.com/v2/folders/FOLDER_ID:getIamPolicy
      

      Reemplaza FOLDER_ID por el ID de tu carpeta.

    4. Asigna el rol de administrador de VPC compartida.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/FOLDER_ID:setIamPolicy
      {
        "bindings": [
          ...copy existing bindings
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.xpnAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/resourcemanager.projectIamAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.networkViewer"
          }
        ],
        "etag": "ETAG",
        "version": 1,
        ...other existing policy details
      }
      

      Reemplaza lo siguiente:

      • FOLDER_ID: El ID de la organización que contiene el usuario al que le otorgas el rol de administrador de VPC compartida.
      • EMAIL_ADDRESS: La dirección de correo electrónico del usuario.
      • ETAG: un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

      Para obtener más información, consulta el método folders.setIamPolicy.

Configura la VPC compartida

Solo el administrador de VPC compartida puede realizar las tareas de esta sección.

Habilita un proyecto host

Dentro de una organización, los administradores de VPC compartida pueden designar proyectos como proyectos host de VPC compartida, sujetos a cuotas y límites, mediante este procedimiento. Los administradores de VPC compartida también pueden crear y borrar proyectos si tienen la función de creador de proyectos y de función de eliminador de proyectos (roles/resourcemanager.projectCreator y roles/resourcemanager.projectDeleter) en tu organización.

Cuando habilitas un proyecto host, los recursos de red del proyecto no se comparten de forma automática con los proyectos de servicio. Debes vincular proyectos de servicio al proyecto host para compartir las redes y subredes seleccionadas con los proyectos de servicio.

Console

Si aún no tienes el rol de administrador de VPC compartida de Compute (roles/compute.xpnAdmin), no podrás ver esta página en la consola de Google Cloud.

  1. En la consola de Google Cloud, ve a la página VPC compartida.

    Ir a VPC compartida

  2. Accede como un administrador de VPC compartida.

  3. Selecciona el proyecto que deseas habilitar como proyecto host de VPC compartida en el selector de proyectos.

  4. Haz clic en Configurar VPC compartida.

  5. En la página siguiente, haz clic en Guardar y continuar, en Habilitar proyecto host.

  6. En Seleccionar subredes, realiza una de las siguientes acciones:

    1. Haz clic en Compartir todas las subredes (permisos a nivel de proyecto) si necesitas compartir todas las subredes actuales y futuras en las redes de VPC del proyecto host con proyectos de servicio y administradores del proyecto de servicio especificados en los próximos pasos.
    2. Haz clic en Subredes individuales (permisos a nivel de subred) si necesitas compartir subredes de forma selectiva de las redes de VPC del proyecto host con proyectos de servicio y administradores del proyecto de servicio. Luego, selecciona Subredes que se compartirán.
  7. Haz clic en Continuar.
    Se muestra la siguiente pantalla.

  8. En Nombres de proyectos, especifica los proyectos de servicio que deseas vincular con el proyecto host. Ten en cuenta que vincular proyectos de servicio no define ningún administrador de proyecto de servicio; eso se hace en el siguiente paso.

  9. En la sección Seleccionar usuarios por función, agrega administradores de proyectos de servicio. Se otorgará a estos usuarios la función de IAM compute.networkUser para las subredes compartidas. Solo los administradores de proyectos de servicio pueden crear recursos en las subredes del proyecto host de VPC compartida.

  10. Haz clic en Guardar.

gcloud

  1. Autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Habilita la VPC compartida para el proyecto que necesitas que se convierta en un proyecto host. Reemplaza HOST_PROJECT_ID por el ID del proyecto.

    gcloud compute shared-vpc enable HOST_PROJECT_ID
    
  3. Confirma que el proyecto aparezca como proyecto host para la organización. Reemplaza ORG_ID por el ID de tu organización (determinado por gcloud organizations list).

    gcloud compute shared-vpc organizations list-host-projects ORG_ID
    
  4. Si solo necesitabas habilitar un proyecto host, puedes salir de gcloud para proteger las credenciales de tu cuenta de administrador de VPC compartida. De lo contrario, omite este paso y continúa con los pasos para vincular proyectos de servicio.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Habilita la VPC compartida para el proyecto mediante el uso de credenciales con permisos de administrador de VPC compartida.

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnHost
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto que será un proyecto host de VPC compartida.

    Para obtener más información, consulta el método projects.enableXpnHost.

  2. Confirma que el proyecto aparezca como proyecto host.

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/listXpnHosts
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto host de VPC compartida.

    Para obtener más información, consulta el método projects.listXpnHosts.

Terraform

Puedes usar un recurso de Terraform para habilitar un proyecto host.

resource "google_compute_shared_vpc_host_project" "host" {
  project = var.project # Replace this with your host project ID in quotes
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Vincula proyectos de servicio

Un proyecto de servicio debe vincularse con un proyecto host antes de que los administradores del proyecto de servicio puedan usar la VPC compartida. Un administrador de VPC compartida debe realizar los siguientes pasos para completar el proceso de vinculación.

Un proyecto de servicio solo se puede vincular con un proyecto host, pero un proyecto host admite varios proyectos de servicio vinculados. Para obtener más información, consulta los límites específicos de la VPC compartida en la página de cuotas de VPC.

Console

  1. Accede a la consola de Google Cloud como un administrador de VPC compartida.
  2. En la consola de Google Cloud, ve a la página VPC compartida.
    Ir a la página de VPC compartida
  3. Haz clic en la pestaña Proyectos vinculados.
  4. En la pestaña Proyectos vinculados, haz clic en el botón Vincular proyectos.
  5. Marca las casillas de los proyectos de servicio que deseas vincular en la sección Nombres de proyectos. Ten en cuenta que vincular proyectos de servicio no define ningún administrador de proyecto de servicio; eso se hace en el siguiente paso.
  6. En la sección Permisos de red de VPC, selecciona las funciones que corresponden a los principales que obtendrán la función de compute.networkUser. A los principales de IAM se les otorga la función de usuario de red para todo el proyecto host o ciertas subredes en el proyecto host, según el modo de uso compartido de redes de VPC. Estos principales se conocen como administradores de proyectos de servicio en sus respectivos proyectos de servicio.
  7. En la sección Modo de uso compartido de redes de VPC, selecciona una de las siguientes opciones:
    1. Haz clic en Compartir todas las subredes (permisos a nivel de proyecto) para compartir todas las subredes actuales y futuras en las redes de VPC del proyecto host con todos los proyectos de servicio y administradores de proyectos de servicio.
    2. Haz clic en Subredes individuales (permisos a nivel de subred) si necesitas compartir subredes de forma selectiva de las redes de VPC del proyecto host con proyectos de servicio y administradores de proyectos de servicio. Luego, selecciona Subredes que se compartirán.
  8. Haz clic en Guardar.

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Vincula un proyecto de servicio a un proyecto host ya habilitado. Reemplaza SERVICE_PROJECT_ID por el ID del proyecto de servicio y HOST_PROJECT_ID por el ID del proyecto host.

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_ID \
        --host-project HOST_PROJECT_ID
    
  3. Confirma que el proyecto de servicio se haya vinculado.

    gcloud compute shared-vpc get-host-project SERVICE_PROJECT_ID
    
  4. De manera opcional, puedes enumerar los proyectos de servicio que están vinculados al proyecto host:

    gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
    
  5. Si solo necesitabas vincular un proyecto de servicio, puedes salir de gcloud para proteger las credenciales de la cuenta de administrador de VPC compartida. De lo contrario, omite este paso y define a los administradores del proyecto de servicio para todas las subredes o solo algunas subredes.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Adjunta un proyecto de servicio al proyecto host de VPC compartida.

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnResource
    {
      "xpnResource": {
        "id": "SERVICE_PROJECT"
      }
    }
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
    • SERVICE_PROJECT: el ID del proyecto de servicio que se vinculará.

    Para obtener más información, consulta el método projects.enableXpnResource.

  2. Confirma que los proyectos de servicio estén vinculados al proyecto host.

    GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/getXpnResources
    

    Reemplaza lo siguiente:

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

    Para obtener más información, consulta el método projects.getXpnResources.

Terraform

Puedes usar un recurso de Terraform para vincular un proyecto de servicio.

resource "google_compute_shared_vpc_service_project" "service1" {
  host_project    = google_compute_shared_vpc_host_project.host.project
  service_project = var.service_project # Replace this with your service project ID in quotes
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Administradores de proyectos de servicio para todas las subredes

Un administrador de VPC compartida puede asignar a un principal de IAM de un proyecto de servicio como administrador de proyecto de servicio con acceso a todas las subredes del proyecto host. Los administradores de proyectos de servicio de este tipo reciben la función compute.networkUser para todo el proyecto host. Esto significa que tienen acceso a todas las subredes definidas y futuras en el proyecto host.

Un usuario que tiene la función compute.networkUser en el proyecto host puede ver todas las subredes dentro de los proyectos de servicio adjuntos.

Console

Para definir una principal de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso a todas las subredes en un proyecto host mediante la consola de Google Cloud, consulta la sección Vincula proyectos de servicio.

gcloud

En estos pasos, se incluye la definición de un principal de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso a todas las subredes en un proyecto host. Para poder seguir estos pasos, debes habilitar un proyecto host y vincular el proyecto de servicio al proyecto host.

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Crea una vinculación de políticas para convertir a un principal de IAM del proyecto de servicio en un administrador del proyecto de servicio. Reemplaza HOST_PROJECT_ID por el ID del proyecto host y SERVICE_PROJECT_ADMIN por la dirección de correo electrónico del usuario administrador del proyecto de servicio.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member "user:SERVICE_PROJECT_ADMIN" \
    --role "roles/compute.networkUser"
    

    Puedes especificar diferentes tipos de principales si cambias el formato del argumento --member:

    • Usa group: para especificar un grupo de Google (por dirección de correo electrónico) como principal.
    • Usa domain: para especificar un dominio de Google como principal.
    • Usa serviceAccount: para especificar una cuenta de servicio. Para obtener más información sobre este caso práctico, consulta Cuentas de servicio como administradores de proyectos de servicio.
  3. Repite el paso anterior para cada administrador del proyecto de servicio adicional que necesites definir.

  4. Si terminaste de definir a los administradores del proyecto de servicio, puedes salir de gcloud para proteger las credenciales de cuenta de administrador de VPC compartida.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Describe y, luego, registra los detalles de la política del proyecto existente. Necesitarás la política existente y el valor de etag.

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto host que contiene la red de VPC compartida.

  2. Crea una vinculación de políticas para designar a los principales de IAM en el proyecto de servicio como administradores de proyectos de servicio.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            PRINCIPAL,
            ...additional principals
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: El ID del proyecto host que contiene la red de VPC compartida.
    • PRINCIPAL: una identidad con la que está asociada el rol, como un usuario, un grupo, un dominio o una cuenta de servicio. Para obtener más información, consulta el campo members en la documentación de Resource Manager.
    • ETAG: un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

    Para obtener más información, consulta el método projects.setIamPolicy.

Administradores de proyectos de servicio para algunas subredes

Un administrador de VPC compartida puede asignar a un principal de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso solo a algunas de las subredes del proyecto host. Esta opción proporciona un medio más detallado a fin de definir a los administradores del proyecto de servicio mediante el otorgamiento del rol compute.networkUser solo para algunas subredes del proyecto host.

Un usuario que tiene la función compute.networkUser en el proyecto host puede ver todas las subredes dentro de los proyectos de servicio adjuntos.

Console

Para definir una principal de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso a solo algunas subredes en un proyecto host mediante la consola de Google Cloud, consulta la sección Vincula proyectos de servicio.

gcloud

En estos pasos, se explica cómo definir principales de IAM de un proyecto de servicio como administradores de proyectos de servicio con acceso solo a algunas subredes en un proyecto host. Para poder definirlos, debes habilitar un proyecto host y vincular el proyecto de servicio al proyecto host.

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Selecciona la subred del proyecto host al que deben acceder los administradores de proyectos de servicio. Obtén la política de IAM actual en formato JSON. Reemplaza SUBNET_NAME por el nombre de la subred en el proyecto host y HOST_PROJECT_ID por el ID del proyecto host.

    gcloud compute networks subnets get-iam-policy SUBNET_NAME \
        --region SUBNET_REGION \
        --project HOST_PROJECT_ID \
        --format json
    
  3. Copia el resultado JSON del paso anterior y guárdalo en un archivo. Para mayor claridad, en estos pasos, se guarda en un archivo llamado subnet-policy.json.

  4. Modifica el archivo subnet-policy.json y agrega los principales de IAM que se convertirán en administradores del proyecto de servicio con acceso a la subred. Reemplaza cada SERVICE_PROJECT_ADMIN por la dirección de correo electrónico de un usuario de IAM del proyecto de servicio.

    {
      "bindings": [
      {
         "members": [
               "user:[SERVICE_PROJECT_ADMIN]",
               "user:[SERVICE_PROJECT_ADMIN]"
            ],
            "role": "roles/compute.networkUser"
      }
      ],
      "etag": "[ETAG_STRING]"
    }
    

    Ten en cuenta que puedes especificar diferentes tipos de principales de IAM (además de los usuarios) en las políticas:

    • Cambia user: por group: para especificar un grupo de Google (por dirección de correo electrónico) como principal.
    • Cambia user: por domain: para especificar un dominio de Google como principal.
    • Usa serviceAccount: para especificar una cuenta de servicio. Para obtener más información sobre este caso práctico, consulta Cuentas de servicio como administradores de proyectos de servicio.
  5. Actualiza la vinculación de política para la subred mediante el contenido del archivo subnet-policy.json.

    gcloud compute networks subnets set-iam-policy SUBNET_NAME subnet-policy.json \
        --region SUBNET_REGION \
        --project HOST_PROJECT_ID
    
  6. Si terminaste de definir a los administradores del proyecto de servicio, puedes salir de gcloud para proteger las credenciales de cuenta de administrador de VPC compartida.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Describe y, luego, registra los detalles de la política de la subred existente. Necesitarás la política existente y el valor de etag.

    GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/getIamPolicy
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: El ID del proyecto host que contiene la red de VPC compartida.
    • SUBNET_NAME: Es el nombre de la subred que se compartirá.
    • SUBNET_REGION: la región en la que se encuentra la subred.
  2. Para otorgar a los administradores del proyecto de servicio acceso a las subredes del proyecto host, actualiza la política de subred.

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            PRINCIPAL,
            ...additional principals
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Reemplaza lo siguiente:

    • ETAG: un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.
    • HOST_PROJECT_ID: El ID del proyecto host que contiene la red de VPC compartida.
    • PRINCIPAL: una identidad con la que está asociada el rol, como un usuario, un grupo, un dominio o una cuenta de servicio. Para obtener más información, consulta el campo members en la documentación de Resource Manager.
    • SUBNET_NAME: Es el nombre de la subred que se compartirá.
    • SUBNET_REGION: la región en la que se encuentra la subred.

    Para obtener más información, consulta el método subnetworks.setIamPolicy.

Cuentas de servicio como administradores del proyecto de servicio

Un administrador de VPC compartida también puede definir cuentas de servicio de proyectos de servicio como administradores de proyectos de servicio. En esta sección, se ilustra cómo definir dos tipos diferentes de cuentas de servicio como administradores de proyectos de servicio:

El rol de administrador del proyecto de servicio (compute.networkUser ).se puede otorgar para todas las subredes o solo algunas subredes del proyecto host. Sin embargo, para simplificar las instrucciones, en esta sección solo se ilustra cómo definir cada uno de los dos tipos de cuenta de servicio como administradores de proyectos de servicio para todas las subredes del proyecto host.

Cuentas de servicio administradas por usuarios como administradores del proyecto de servicio

En estas instrucciones, se describe cómo definir una cuenta de servicio administrada por el usuario como administrador de proyectos de servicio para todas las subredes del proyecto host de VPC compartida.

Console

  1. Accede a la consola de Google Cloud como un administrador de VPC compartida.
  2. En la consola de Google Cloud, ve a la página Configuración.
    Ir a la página Configuración
  3. Cambia el proyecto por el proyecto de servicio que contiene la cuenta de servicio que se debe definir como administrador del proyecto de servicio.
  4. Copia el ID del proyecto de servicio. Para mayor claridad, en este procedimiento se hace referencia al ID del proyecto de servicio como SERVICE_PROJECT_ID.
  5. Cambia el proyecto por el proyecto host de VPC compartida.
  6. Ve a la página de IAM en la consola de Google Cloud.
    Ir a la página de IAM
  7. Haz clic en Agregar.
  8. Agrega SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.comal campo Principales y reemplaza SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio.
  9. Selecciona Compute Engine > Usuario de la red de Compute en el menú Funciones.
  10. Haga clic en Agregar.

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Si no conoces el ID del proyecto de servicio, puedes enumerar todos los proyectos de la organización. En esta lista, se muestra el ID de cada proyecto.

    gcloud projects list
    
  3. Crea una vinculación de políticas para que la cuenta de servicio sea un administrador de proyectos de servicio. Reemplaza HOST_PROJECT_ID por el ID del proyecto host, SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio, y SERVICE_PROJECT_ID por el ID del proyecto de servicio.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

API

  1. Describe y, luego, registra los detalles de la política del proyecto existente. Necesitarás la política existente y el valor de etag.

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto host que contiene la red de VPC compartida.

  2. Crea una vinculación de políticas para designar cuentas de servicio como administradores de proyectos de servicio.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com",
            ...include additional service accounts
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: El ID del proyecto host que contiene la red de VPC compartida.
    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio que contiene la cuenta de servicio.
    • ETAG: un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

    Para obtener más información, consulta el método projects.setIamPolicy.

Cuenta de servicio de las APIs de Google como administrador del proyecto de servicio

En estas instrucciones, se describe cómo definir la cuenta de servicio de las API de Google como un administrador del proyecto de servicio para todas las subredes del proyecto host de VPC compartida. Hacer que la cuenta de servicio de las API de Google sea el administrador del proyecto de servicio es un requisito para los grupos de instancias administrados que se usan con la VPC compartida porque las tareas como la creación de instancias las realiza este tipo de cuenta de servicio. Para obtener más información sobre esta relación, consulta Grupos de instancias administrados y la IAM.

Console

  1. Accede a la consola de Google Cloud como un administrador de VPC compartida.
  2. En la consola de Google Cloud, ve a la página Configuración.
    Ir a la página Configuración
  3. Cambia el proyecto por el proyecto de servicio que contiene la cuenta de servicio que se debe definir como administrador del proyecto de servicio.
  4. Copia el Número de proyecto del proyecto de servicio. Para mayor claridad, en este procedimiento se hace referencia al número de proyecto de servicio como SERVICE_PROJECT_NUMBER.
  5. Cambia el proyecto por el proyecto host de VPC compartida.
  6. Ve a la página de IAM en la consola de Google Cloud.
    Ir a la página de IAM
  7. Haz clic en Agregar.
  8. Agrega SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.comal campo Miembros.
  9. Selecciona Compute Engine > Usuario de la red de Compute en el menú Funciones.
  10. Haga clic en Agregar.

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Determina el número del proyecto para el proyecto de servicio. Para mayor claridad, en este procedimiento se hace referencia al número de proyecto de servicio como SERVICE_PROJECT_NUMBER. Reemplaza SERVICE_PROJECT_ID por el ID del proyecto de servicio.

    gcloud projects describe SERVICE_PROJECT_ID --format='get(projectNumber)'
    
    • Si no conoces el ID del proyecto de servicio, puedes enumerar todos los proyectos de la organización. En esta lista, se muestra el número del proyecto de cada uno.

      gcloud projects list
      
  3. Crea una vinculación de políticas para que la cuenta de servicio sea un administrador de proyectos de servicio. Reemplaza HOST_PROJECT_ID por el ID del proyecto host y SERVICE_PROJECT_NUMBER por el número del proyecto de servicio.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

API

  1. Describe y, luego, registra los detalles de la política del proyecto existente. Necesitarás la política existente y el valor de etag.

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto host que contiene la red de VPC compartida.

  2. Enumera el proyecto para encontrar su número.

    GET https://cloudresourcemanager.googleapis.com/v1/projects?filter=projectId="SERVICE_PROJECT_ID"
    

    Reemplaza SERVICE_PROJECT_ID por el ID del proyecto de servicio en el que se encuentra la cuenta de servicio.

  3. Crea una vinculación de políticas para designar cuentas de servicio como administradores de proyectos de servicio.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com"
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: El ID del proyecto host que contiene la red de VPC compartida.
    • SERVICE_PROJECT_NUMBER: el número del proyecto de servicio que contiene la cuenta de servicio.
    • ETAG: un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

    Para obtener más información, consulta el método projects.setIamPolicy.

Usa la VPC compartida

Una vez que un administrador de VPC compartida habilita un proyecto host, vincula los proyectos de servicio necesarios y define los administradores de proyectos de servicio para todas o algunas de las subredes del proyecto host, los administradores de proyectos de servicio pueden crear instancias, plantillas y balanceadores de cargas internos en los proyectos de servicio mediante las subredes del proyecto host.

Un administrador del proyecto de servicio debe realizar todas las tareas de esta sección.

Es importante tener en cuenta que un administrador de VPC compartida solo otorga a los administradores del proyecto de servicio el rol de usuario de la red de Compute (roles/compute.networkUser) en todo el proyecto host o solo en algunas de sus subredes. Los administradores del proyecto de servicio también deben tener otras funciones necesarias para administrar sus respectivos proyectos de servicio. Por ejemplo, un administrador del proyecto de servicio también podría ser un propietario del proyecto o debería tener al menos el rol de administrador de la instancia de Compute (roles/compute.instanceAdmin) para el proyecto.

Enumera las subredes disponibles

Los administradores de proyectos de servicio pueden enumerar las subredes a las que se les otorgó permiso mediante estos pasos.

Console

En la consola de Google Cloud, ve a la página VPC compartida.

Ir a VPC compartida

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de proyectos de servicio. Reemplaza SERVICE_PROJECT_ADMIN por el nombre del administrador del proyecto de servicio:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. Ejecuta el siguiente comando y reemplaza HOST_PROJECT_ID por el ID del proyecto host de la VPC compartida:

    gcloud compute networks subnets list-usable --project HOST_PROJECT_ID
    

    En el siguiente ejemplo, se enumeran las subredes disponibles en el proyecto host project-1:

    $ gcloud compute networks subnets list-usable --project project-1
    
    PROJECT    REGION       NETWORK  SUBNET    RANGE          SECONDARY_RANGES
    project-1  us-west1     net-1    subnet-1  10.138.0.0/20
    project-1  us-central1  net-1    subnet-2  10.128.0.0/20  r-1 192.168.2.0/24
                                                              r-2 192.168.3.0/24
    project-1  us-east1     net-1    subnet-3  10.142.0.0/20
    

Para obtener más información, consulta el comando list-usable en la documentación del SDK.

API

Enumera las subredes disponibles en el proyecto host. Realiza la solicitud como administrador del proyecto de servicio.

GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/aggregated/subnetworks/listUsable

Reemplaza HOST_PROJECT_ID por el ID del proyecto host que contiene la red de VPC compartida.

Para obtener más información, consulta el método subnetworks.listUsable.

Libera una dirección IPv4 o IPv6 interna estática

Los administradores de proyectos de servicio pueden reservar una dirección IPv4 o IPv6 interna en una subred de una red de VPC compartida. El objeto de configuración de dirección IP se crea en el proyecto de servicio, mientras que su valor proviene del rango de direcciones IPv4 disponibles en la subred compartida que elegiste.

Para reservar una dirección IP interna independiente en el proyecto de servicio, completa los siguientes pasos.

Console

  1. Configura la VPC compartida.
  2. En la consola de Google Cloud, ve a la página VPC compartida.

    Ir a VPC compartida

  3. Accede como un administrador de VPC compartida.

  4. Selecciona el proyecto de servicio del selector de proyectos.

  5. Para ir a la página Direcciones IP, selecciona Red de VPC > direcciones IP.

  6. Haz clic en Reservar dirección IP estática interna.

  7. En el campo Nombre, ingresa un nombre de dirección IP.

  8. En la lista Versión de IP, selecciona la versión de IP requerida:

    • Para reservar una dirección IPv4 interna estática, elige IPv4.
    • Para reservar una dirección IPv6 interna estática, elige IPv6.
  9. Haz clic en el botón de selección Redes compartidas conmigo.

  10. En las listas Red y Subred, elige una red de VPC y una subred respectivamente.

  11. Especifica cómo deseas reservar la dirección IP:

    • En Direcciones IPv4, para especificar una dirección IPv4 interna estática que se reservará, en Dirección IP estática, selecciona Permitirme elegir y, luego, ingresa una dirección IP personalizada. De lo contrario, el sistema asignará de forma automática una dirección IPv4 interna estática en la subred.
    • Para las direcciones IPv6, el sistema asigna de forma automática una dirección IPv6 interna estática del rango de direcciones IPv6 interno de la subred.
  12. Opcional: Si deseas compartir la dirección IPv4 interna estática en diferentes frontends, para Motivo, elige Compartida. La selección predeterminada es No compartida.

  13. Haz clic en Reservar.

gcloud

  1. Si aún no lo hiciste, autentícate en la CLI de Google Cloud como administrador del proyecto de servicio. Reemplaza SERVICE_PROJECT_ADMIN por el nombre del administrador del proyecto de servicio:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. Usa el comando compute addresses create.

    • Reserva direcciones IPv4:

      gcloud compute addresses create IP_ADDR_NAME \
          --project SERVICE_PROJECT_ID \
          --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
          --region=REGION
          --ip-version=IPV4
      
    • Reserva direcciones IPv6:

      gcloud compute addresses create IP_ADDR_NAME \
          --project SERVICE_PROJECT_ID \
          --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
          --region=REGION
          --ip-version=IPV6
      

    Reemplaza lo siguiente:

    • IP_ADDR_NAME un nombre para el objeto de dirección IPv4
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
    • REGION es la región que contiene la subred compartida.
    • SUBNET: el nombre de la subred compartida

Los detalles adicionales para crear direcciones IP se encuentran en la documentación del SDK.

API

Usa el método addresses.insert.

  • Reserva una dirección IPv4 interna estática como administrador del proyecto de servicio:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses
    {
    "name": "ADDRESS_NAME",
    "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
    "addressType": "INTERNAL"
    }
    

Reemplaza lo siguiente:

  • ADDRESS_NAME: un nombre para la dirección IP interna reservada.
  • HOST_PROJECT_ID: el ID del proyecto que contiene la red de VPC compartida.
  • REGION: la región en la que se ubicará la dirección IPv4 reservada y donde se encuentra la subred compartida.
  • SERVICE_PROJECT_ID: el ID del proyecto de servicio en el que se reserva la dirección IPv4.
  • SUBNET_NAME: el nombre de la subred compartida

Para obtener más información, consulta el método addresses.insert.

Terraform

Puedes usar un bloque de datos de Terraform para especificar la información de la subred del host. Luego, usa un recurso de Terraform para reservar una dirección IPv4 interna estática. Si omites el argumento address opcional, se seleccionará y reservará una dirección IPv4 disponible.

Especifica la subred del host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

Reserva una dirección IPv4 desde la subred del proyecto host para usarla en el proyecto de servicio:

resource "google_compute_address" "internal" {
  project      = var.service_project
  region       = "us-central1"
  name         = "int-ip"
  address_type = "INTERNAL"
  address      = "10.0.0.8"
  subnetwork   = data.google_compute_subnetwork.subnet.self_link
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Reserva una dirección IPv4 externa estática

Un recurso en un proyecto de servicio puede usar una dirección IPv4 externa estática regional que se define en el proyecto de servicio o en el proyecto host. Por lo tanto, un recurso en los proyectos de servicio adjuntos puede usar una dirección IPv4 externa estática regional que se reserva en el proyecto host.

Reserva una dirección IPv6 externa estática

Los administradores de proyectos de servicio pueden reservar una dirección IPv6 externa estática en un proyecto de servicio. El objeto de configuración de dirección IPv6 se crea en el proyecto de servicio, mientras que su valor proviene del rango de direcciones disponibles en la subred IPv6 compartida que elegiste.

Console

Puedes reservar una dirección IPv6 externa independiente en el proyecto de servicio con la consola de Google Cloud:

  1. Configura la VPC compartida.
  2. En la consola de Google Cloud, ve a la página VPC compartida.
    Ir a la página VPC compartida
  3. Accede como un administrador de VPC compartida.
  4. Selecciona el proyecto de servicio del selector de proyectos.
  5. Para ir a la página Direcciones IP, selecciona Red de VPC > direcciones IP.
  6. Haz clic en Reservar dirección IP externa estática.
  7. Elige un nombre para la dirección nueva.
  8. Especifica si el nivel de servicio de red será Premium o Estándar. La reserva de direcciones estáticas IPv6 solo es compatible con el nivel Premium.
  9. En Versión de la IP, selecciona IPv6.
  10. Elige si esta dirección IP será regional o global.
    • Si reservas una dirección IP estática para un balanceador de cargas global, elige Global.
    • Si reservas una dirección IP estática para una instancia o un balanceador de cargas de red, elige Regional y, luego, elige la región en la que deseas crear la dirección.
  11. Elija las siguientes opciones:
    • Redes en este proyecto: elige esta opción si deseas reservar una dirección IPv6 externa en una subred de la misma red de nube privada virtual (VPC) en la que se reserva la dirección IPv6.
    • Redes compartidas conmigo: Elige esta opción si deseas reservar una dirección IPv6 externa en una subred de una red de VPC compartida.
  12. Según tu elección, elige una de las siguientes opciones:

    • Red: la red de VPC
    • Subred: la subred desde la que se asigna la dirección IPv6 regional estática
    • Tipo de extremo: elige Instancia de VM o Balanceador de cargas de red
  13. Opcional: Si elegiste Instancia de VM como el tipo de extremo, selecciona una instancia de VM a la que deseas conectar la dirección IPv6.

  14. Haz clic en Reservar.

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de proyectos de servicio. Reemplaza SERVICE_PROJECT_ADMIN por el nombre del administrador del proyecto de servicio:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. Usa el comando gcloud compute addresses create:

    gcloud compute addresses create IP_ADDR_NAME \
        --project SERVICE_PROJECT_ID \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --region=REGION \
        --ip-version=IPV6 \
        --endpoint-type=[VM | NETLB]
    

    Reemplaza lo siguiente:

    • IP_ADDR_NAME un nombre para el objeto de dirección IPv6
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
    • SUBNET: el nombre de la subred compartida
    • REGION es la región que contiene la subred compartida.

API

Para reservar una dirección IPv6 interna estática como administrador del proyecto de servicio, usa el método addresses.insert:

POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses
{
  "name": "ADDRESS_NAME",
  "ipVersion": "IPV6",
  "ipv6EndpointType": "VM|LB",
  "networkTier": "PREMIUM",
  "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
  "addressType": "EXTERNAL"
}

Reemplaza lo siguiente:

  • SERVICE_PROJECT_ID: el ID del proyecto de servicio en el que se reserva la dirección IPv6.
  • REGION: la región en la que se encuentran la dirección IPv6 reservada y la subred compartida.
  • ADDRESS_NAME: Es un nombre para la dirección IPv6 externa estática reservada.
  • HOST_PROJECT_ID: el ID del proyecto que contiene la red de VPC compartida.
  • SUBNET_NAME: el nombre de la subred compartida

Crea una instancia

Ten en cuenta lo siguiente cuando uses la VPC compartida para crear una instancia:

  • El proceso estándar para crear una instancia implica la selección de una zona, una red y una subred. La subred y la zona seleccionadas deben estar en la misma región. Cuando un administrador del proyecto de servicio crea una instancia mediante una subred de una red de VPC compartida, la zona seleccionada para esa instancia debe ser una que esté en la misma región que la subred seleccionada.

    Cuando creas una instancia con una dirección IPv4 interna estática reservada, la subred y la región ya están seleccionadas cuando se crea la dirección IPv4 estática. En esta sección, se proporciona un ejemplo de gcloud para crear una instancia con una dirección IPv4 interna estática.

  • Los administradores del proyecto de servicio solo pueden crear instancias cuando usan subredes para las cuales se les otorgó permiso. Para determinar qué subredes están disponibles, consulta Enumera las subredes disponibles.

  • Cuando Google Cloud recibe una solicitud para crear una instancia en una subred de una red de VPC compartida, comprueba si el principal de IAM que realiza la solicitud tiene permiso para usar esa subred compartida. Si la verificación falla, la instancia no se crea y Google Cloud muestra un error de permisos. Para obtener ayuda, comunícate con el administrador de VPC compartida.

  • Puedes crear una instancia de pila doble si la creas en una subred de pila doble. Las subredes de pila doble solo son compatibles con las redes de VPC de modo personalizado. El tipo de acceso IPv6 de la subred determina si la dirección IPv6 asignada a la VM es una dirección IPv6 interna o externa.

Console

  1. Configura la VPC compartida.
  2. En la consola de Google Cloud, ve a la página VPC compartida.

    Ir a VPC compartida

  3. Accede como un administrador de VPC compartida.

  4. Selecciona el proyecto de servicio del selector de proyectos.

  5. Para ir a la página Crear una instancia, selecciona Compute Engine > Instancias de VM > Crear instancia.

  6. Especifica un Nombre para la instancia.

  7. En Región, selecciona una región que contenga una subred compartida.

  8. Haz clic en Herramientas de redes en Opciones avanzadas.

  9. En Interfaces de redes, haz clic en el botón de selección Redes compartidas conmigo.

  10. En la lista Subred compartida, selecciona la subred necesaria en la que deseas crear la instancia:

    • Para las direcciones IPv4, selecciona cualquier subred de pila única.
    • Para las direcciones IPv6, selecciona una subred de pila doble con el tipo de acceso IPv6 requerido.
  11. Selecciona el tipo de pila de IP:

    • Para direcciones IPv4, selecciona IPv4 (pila única).
    • Para direcciones IPv6, selecciona IPv4 e IPv6 (pila doble).
  12. Especifica cualquier otro parámetro necesario para la instancia.

  13. Haz clic en Crear.

gcloud

  • Crea una instancia con una dirección IPv4 interna efímera en una subred compartida de una red de VPC compartida, usa este comando:

    gcloud compute instances create INSTANCE_NAME \
        --project SERVICE_PROJECT_ID \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --zone ZONE
    

    Reemplaza lo siguiente:

    • INSTANCE_NAME: el nombre de la instancia.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
    • REGION es la región que contiene la subred compartida.
    • SUBNET: el nombre de la subred compartida
    • ZONE una zona de la región especificada. .
  • Crea una instancia con una dirección IPv4 interna estática reservada en una red de VPC compartida, haz lo siguiente:

    1. Reserva una dirección IPv4 interna estática en el proyecto de servicio del rango de direcciones disponibles del proyecto host.
    2. Crea la instancia:

      gcloud compute instances create INSTANCE_NAME \
          --project SERVICE_PROJECT_ID \
          --private-network-ip IP_ADDR_NAME \
          --zone ZONE \
          --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
      

      Reemplaza lo siguiente:

      • INSTANCE_NAME: el nombre de la instancia.
      • SERVICE_PROJECT_ID: el ID del proyecto de servicio
      • IP_ADDR_NAME: el nombre de la dirección IP estática.
      • ZONE: una zona en la misma región que IP_ADDR_NAME
      • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
      • REGION: es la región que contiene la subred compartida.
      • SUBNET: el nombre de la subred compartida que está asociada con la dirección IPv4 interna estática
  • Crea una instancia con una dirección IPv4 interna efímera y una dirección IPv6 efímera, haz lo siguiente:

    gcloud compute instances create INSTANCE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type IPV4_IPV6 \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --zone ZONE
    

    Reemplaza lo siguiente:

    • INSTANCE_NAME: el nombre de la instancia.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
    • REGION es la región que contiene la subred compartida.
    • SUBNET: el nombre de la subred compartida
    • ZONE una zona de la región especificada.
  • Crea una instancia con una dirección IPv6 externa estática reservada:

    gcloud compute instances create INSTANCE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type IPV4_IPV6 \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --ipv6-address IPV6_ADDRESS \
        --ipv6-prefix-length=96 \
        --ipv6-network-tier PREMIUM \
        --zone ZONE
    

    Reemplaza lo siguiente:

    • INSTANCE_NAME: el nombre de la instancia.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
    • REGION es la región que contiene la subred compartida.
    • SUBNET: el nombre de la subred compartida
    • IPV6_ADDRESS: La dirección IPv6 que se asignará a la VM.
    • ZONE una zona de la región especificada.

API

  • Para crear una instancia con una dirección IPv4 interna efímera, especifica solo la subred:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    Reemplaza lo siguiente:

    • INSTANCE_NAME: un nombre para la instancia.
    • HOST_PROJECT_ID: el ID del proyecto que contiene la red de VPC compartida.
    • MACHINE_TYPE: un tipo de máquina para la instancia.
    • REGION es la región que contiene la subred compartida.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • SOURCE_IMAGE: una imagen de la instancia.
    • SUBNET: el nombre de la subred compartida
    • ZONE una zona de la región especificada.

    Para obtener más información, consulta el método instances.insert.

  • Para crear una instancia con una dirección IPv4 interna reservada, especifica la subred y el nombre de la dirección IPv4 reservada:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "networkIP": "projects/SERVICE_PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    Reemplaza lo siguiente:

    • ADDRESS_NAME: el nombre de la dirección IPv4 interna reservada.
    • INSTANCE_NAME: un nombre para la instancia.
    • HOST_PROJECT_ID: el ID del proyecto que contiene la red de VPC compartida.
    • MACHINE_TYPE: un tipo de máquina para la instancia.
    • REGION es la región que contiene la subred compartida.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • SOURCE_IMAGE: una imagen de la instancia.
    • SUBNET: el nombre de la subred compartida
    • ZONE una zona de la región especificada.

    Para obtener más información, consulta el método instances.insert.

  • Para crear una instancia con una dirección IPv4 interna efímera y una dirección IPv6 efímera, especifica la subred y el tipo de pila:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "stackType": "IPv4_IPv6"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    Reemplaza lo siguiente:

    • INSTANCE_NAME: un nombre para la instancia.
    • HOST_PROJECT_ID: el ID del proyecto que contiene la red de VPC compartida.
    • MACHINE_TYPE: un tipo de máquina para la instancia.
    • REGION es la región que contiene la subred compartida.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • SOURCE_IMAGE: una imagen de la instancia.
    • SUBNET: el nombre de la subred compartida
    • ZONE una zona de la región especificada.

    Para obtener más información, consulta el método instances.insert.

Terraform

Puedes usar un bloque de datos de Terraform para especificar la información de la subred del host. Luego, usa un recurso de Terraform para crear una instancia de VM en un proyecto de servicio.

Especifica la subred del host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

Crea una instancia de VM en un proyecto de servicio con una dirección IPv4 efímera desde la subred compartida del proyecto host:

resource "google_compute_instance" "ephemeral_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = "my-vm"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

Crea una instancia de VM en un proyecto de servicio con una dirección IPv4 estática reservada desde la subred compartida del proyecto host:

resource "google_compute_instance" "reserved_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = "reserved-ip-instance"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
    network_ip = google_compute_address.internal.address
  }
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Crea una plantilla de instancias

Ten en cuenta lo siguiente cuando uses la VPC compartida para crear una plantilla de instancia:

  • El proceso para crear una plantilla de instancias implica seleccionar una red y una subred.

    • Las plantillas creadas para usarse en una red de VPC compartida de modo personalizado deben especificar la red y una subred.

    • Es posible que las plantillas creadas para usarse en una red de VPC compartida de modo automático puedan diferir en la selección de una subred. En estos casos, se selecciona de forma automática una subred en la misma región que cualquier grupo de instancias administrado que use la plantilla. Las redes de modo automático tienen una subred en cada región por definición.

  • Cuando un principal de IAM crea una plantilla de instancia, Google Cloud no realiza una verificación de permisos para ver si el principal puede usar la subred que se especificó. Esta verificación de permisos siempre se posterga hasta que se solicita un grupo de instancias administrado que usa la plantilla.

  • Puedes crear una plantilla de instancias de pila doble si la creas en una subred de pila doble. Las subredes de pila doble solo son compatibles con las redes de VPC de modo personalizado. El tipo de acceso IPv6 de la subred determina si la dirección IPv6 asignada a la VM es una dirección IPv6 interna o externa.

Console

  1. Configura la VPC compartida.
  2. En la consola de Google Cloud, ve a la página VPC compartida.
    Ir a la página VPC compartida
  3. Accede como un administrador de VPC compartida.
  4. Selecciona el proyecto de servicio del selector de proyectos.
  5. Para ir a la página Crear una plantilla de instancias, selecciona Compute Engine > Plantillas de instancias > Crear plantillas de instancias.
  6. Especifica un Nombre para la plantilla de instancias.
  7. En la sección Opciones avanzadas, haz clic en Herramientas de redes.
  8. En la sección Interfaces de red, haz clic en el botón de selección Redes compartidas conmigo.
  9. En la lista Subred compartida, selecciona la subred necesaria en la que deseas crear la plantilla de instancia:
    • Para las direcciones IPv4, selecciona cualquier subred de pila única.
    • Para las direcciones IPv6, selecciona una subred de pila doble con el tipo de acceso IPv6 requerido.
  10. Selecciona el tipo de pila de IP:
    • Para direcciones IPv4, selecciona IPv4 (pila única).
    • Para direcciones IPv6, selecciona IPv4 e IPv6 (pila doble).
  11. Especifica cualquier otro parámetro necesario para la plantilla de instancias.
  12. Haz clic en Crear.

gcloud

  • Crea una plantilla de instancias de solo IPv4 para usarla en cualquier subred creada de forma automática de una red de VPC compartida de modo automático, usa este comando:

    gcloud compute instance-templates create TEMPLATE_NAME \
        --project SERVICE_PROJECT_ID \
        --network projects/HOST_PROJECT_ID/global/networks/NETWORK
    

    Reemplaza lo siguiente:

    • TEMPLATE_NAME: el nombre de la plantilla.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
    • NETWORK: es el nombre de la red de VPC compartida.
  • Si deseas crear una plantilla de instancias de solo IPv4 para una subred creada manualmente en una red de VPC compartida (ya sea de modo automático o personalizado), usa este comando:

    gcloud compute instance-templates create TEMPLATE_NAME \
        --project SERVICE_PROJECT_ID \
        --region REGION \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    Reemplaza lo siguiente:

    • TEMPLATE_NAME: el nombre de la plantilla.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
    • REGION es la región que contiene la subred compartida.
    • SUBNET: el nombre de la subred compartida
  • Crea una plantilla de instancias de pila doble que use una subred en una red de VPC compartida de modo personalizado, haz lo siguiente:

    gcloud compute instance-templates create TEMPLATE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type IPV4_IPV6 \
        --region REGION \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    Reemplaza lo siguiente:

    • TEMPLATE_NAME: el nombre de la plantilla.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
    • REGION es la región que contiene la subred compartida.
    • SUBNET: el nombre de la subred compartida

API

  • Crea una plantilla de instancias de solo IPv4 que use cualquier subred creada de forma automática de una red de VPC compartida de modo automático, especifica la red de VPC:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK"
        }
      ]
    ...
    }
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: el ID del proyecto que contiene la red de VPC compartida.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • NETWORK: es el nombre de la red de VPC compartida.

    Para obtener más información, consulta el método instanceTemplates.insert.

  • Crea una plantilla de instancias de solo IPv4 que use una subred creada manualmente en una red de VPC compartida (de modo automático o personalizado), especifica la subred:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
        }
      ]
    ...
    }
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: el ID del proyecto que contiene la red de VPC compartida.
    • REGION es la región que contiene la subred compartida.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • SUBNET_NAME: el nombre de la subred compartida

    Para obtener más información, consulta el método instanceTemplates.insert.

  • Para crear una plantilla de instancias de pila doble que use una subred en una red de VPC compartida de modo personalizado, especifica la subred y el tipo de pila:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "stackType": "IPV4_IPV6"
        }
      ]
    ...
    }
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: el ID del proyecto que contiene la red de VPC compartida.
    • REGION es la región que contiene la subred compartida.
    • SERVICE_PROJECT_ID: el ID del proyecto de servicio
    • SUBNET_NAME: el nombre de la subred compartida

    Para obtener más información, consulta el método instanceTemplates.insert.

Terraform

Puedes usar un bloque de datos de Terraform para especificar la información de la subred del host. Luego, usa un recurso de Terraform para crear una plantilla de instancias de VM. Las direcciones IPv4 de las VM provienen de la subred compartida del proyecto host.

La subred debe existir en la misma región donde se crearán las instancias de VM.

Especifica la subred del host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

Crea una plantilla de instancias de VM en el proyecto de servicio:

resource "google_compute_instance_template" "default" {
  project      = var.service_project
  name         = "appserver-template"
  description  = "This template is used to create app server instances."
  machine_type = "n1-standard-1"
  disk {
    source_image = "debian-cloud/debian-9"
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Cree un grupo de instancias administrado

Cuando crees un grupo de instancias administrado con una VPC compartida, ten en cuenta lo siguiente:

  • Los grupos de instancias administrados que se usan con VPC compartida requieren que la cuenta de servicio de las API de Google se convierta en un administrador del proyecto de servicio, porque esa cuenta de servicio realiza tareas como la creación automática de instancias mediante el ajuste de escala automático.

  • El proceso estándar para crear un grupo de instancias administrado implica seleccionar una zona o una región, según el tipo de grupo, y una plantilla de instancias. Los detalles de red y subred están vinculados a la plantilla de instancias. Las plantillas de instancias aptas están restringidas a aquellas que hacen referencia a subredes en la misma región que usa el grupo de instancias administrado.

  • Los administradores del proyecto de servicio solo pueden crear grupos de instancias administrados cuyas instancias miembro usen subredes a las que se les haya otorgado permiso. Debido a que los detalles de red y subred están vinculados a la plantilla de instancias, los administradores del proyecto de servicio solo pueden usar plantillas que hagan referencia a subredes que están autorizados a usar.

  • Cuando Google Cloud recibe una solicitud para crear un grupo de instancias administrado, comprueba si el principal de IAM que hace la solicitud tiene permiso para usar la subred (en la misma región que el grupo) que se especificó en la plantilla de instancias. Si la verificación falla, el grupo de instancias administrado no se crea y Google Cloud muestra un error: Required 'compute.subnetworks.use' permission for 'projects/SUBNET_NAME.

    Enumera las subredes disponibles para determinar cuáles se pueden usar y comunícate con el administrador de VPC compartida si la cuenta de servicio necesita acceso adicional. Para obtener más información, consulta Cuentas de servicio como administradores de proyectos de servicio.

Para obtener más información, consulta Crea grupos de instancias administrados en la documentación de Compute Engine.

Crea un balanceador de cargas HTTP(S)

Hay muchas formas de configurar balanceadores de cargas de aplicaciones externos dentro de una red de VPC compartida. Sin importar el tipo de implementación, todos los componentes del balanceador de cargas deben estar en la misma organización y en la misma red de VPC compartida.

Para obtener más información sobre las arquitecturas de VPC compartidas compatibles, consulta los siguientes vínculos:

Crea un balanceador de cargas de red de transferencia interno

En el siguiente ejemplo, se ilustra lo que debes tener en cuenta cuando creas un balanceador de cargas de red de transferencia interno en una red de VPC compartida. Los administradores del proyecto de servicio pueden crear un balanceador de cargas de red de transferencia interno que use una subred (en el proyecto host) a la que tengan acceso. La regla de reenvío interno del balanceador de cargas se define en el proyecto de servicio, pero su referencia de subred apunta a una subred en una red de VPC compartida del proyecto host.

Antes de crear un balanceador de cargas de red de transferencia interno en un entorno de VPC compartida, consulta la arquitectura de VPC compartida.

Console

  1. Ve a la página Balanceo de cargas en la consola de Google Cloud.
    Ir a la página Balanceo de cargas

  2. Crea un balanceador de cargas interno de TCP/UDP y realiza el siguiente ajuste: en la sección Configurar servicios de frontend, selecciona la subred de VPC compartida que necesitas de la sección Redes que comparten otros proyectos del menú Subred.

  3. Termina de crear el balanceador de cargas.

gcloud

Cuando crees la regla de reenvío interno, especifica una subred en el proyecto host con la marca --subnet:

gcloud compute forwarding-rules create FR_NAME \
    --project SERVICE_PROJECT_ID \
    --load-balancing-scheme internal \
    --region REGION \
    --ip-protocol IP_PROTOCOL \
    --ports PORT,PORT,... \
    --backend-service BACKEND_SERVICE_NAME \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
    --address INTERNAL_IP

Reemplaza lo siguiente:

  • FR_NAME: el nombre de la regla de reenvío.
  • SERVICE_PROJECT_ID: el ID del proyecto de servicio.
  • REGION es la región que contiene la subred compartida.
  • IP_PROTOCOL: TCP o UDP, que coincide con el protocolo del servicio de backend del balanceador de cargas.
  • PORT: el puerto numérico o la lista de puertos para el balanceador de cargas.
  • BACKEND_SERVICE_NAME: el nombre del servicio de backend (ya creado como parte del procedimiento general de creación de un balanceador de cargas de red de transferencia interno).
  • HOST_PROJECT_ID: es el ID del proyecto host de la VPC compartida.
  • SUBNET: el nombre de la subred compartida
  • INTERNAL_IP: una dirección IP interna en la subred compartida (si no se especifica, se seleccionará una disponible)

Para obtener más opciones, consulta el comando gcloud compute forwarding-rules create.

API

Crea la regla de reenvío interno y especifica una subred en el proyecto host.

POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/forwardingRules
{
  "name": "FR_NAME",
  "IPAddress": "IP_ADDRESS",
  "IPProtocol": "PROTOCOL",
  "ports": [ "PORT", ... ],
  "loadBalancingScheme": "INTERNAL",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
  "network": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME",
  "backendService": "https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/us-west1/backendServices/BE_NAME",
  "networkTier": "PREMIUM"
}

Reemplaza lo siguiente:

  • BE_NAME: el nombre del servicio de backend (ya creado como parte del procedimiento general de creación de un balanceador de cargas de red de transferencia interno).
  • FR_NAME: un nombre para la regla de reenvío.
  • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
  • IP_ADDRESS: una dirección IP interna en la subred compartida.
  • IP_PROTOCOL: TCP o UDP, que coincide con el protocolo del servicio de backend del balanceador de cargas.
  • PORT: el puerto numérico o la lista de puertos para el balanceador de cargas.
  • REGION es la región que contiene la subred compartida.
  • SERVICE_PROJECT_ID: el ID del proyecto de servicio
  • SUBNET: el nombre de la subred compartida

Para obtener más información, consulta el método forwardingRules.insert.

Terraform

Puedes usar un bloque de datos de Terraform para especificar la subred y la red del host. Luego, usa un recurso de Terraform para crear la regla de reenvío.

Especifica la red host:

data "google_compute_network" "network" {
  name    = "my-network-123"
  project = var.project
}

Especifica la subred del host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

En el proyecto de servicio, crea una regla de reenvío en la red y la subred del proyecto host de la siguiente forma:

resource "google_compute_forwarding_rule" "default" {
  project               = var.service_project
  name                  = "l4-ilb-forwarding-rule"
  backend_service       = google_compute_region_backend_service.default.id
  region                = "europe-west1"
  ip_protocol           = "TCP"
  load_balancing_scheme = "INTERNAL"
  all_ports             = true
  allow_global_access   = true
  network               = data.google_compute_network.network.self_link
  subnetwork            = data.google_compute_subnetwork.subnet.self_link
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

¿Qué sigue?