Acceder a las APIs globales de Google a través de back-ends

En esta página se describe cómo acceder a las APIs de Google globales mediante backends de Private Service Connect basados en balanceadores de carga de aplicación internos entre regiones.

Esta configuración te permite orientar una o varias APIs de Google globales concretas y, al mismo tiempo, aplicar la visibilidad y el control que proporcionan los backends de Private Service Connect.

  • Puedes configurar nombres de host personalizados, locales en tu nube privada virtual (VPC) y en las redes on-premise conectadas, que dirijan el tráfico a las APIs de Google globales que elijas.
  • Puedes acceder a los backends desde cualquier región, y el backend puede balancear la carga del tráfico a los grupos de endpoints de red (NEGs) de Private Service Connect que se encuentren en cualquier región.
  • Puedes enviar tráfico a los backends desde redes VPC emparejadas.

Para ver una lista de las APIs de Google globales disponibles, consulta Objetivos de las APIs de Google globales.

Antes de empezar

  • Para obtener los permisos que necesitas para configurar un backend que acceda a las APIs globales de Google, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto: Google Cloud

    Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

  • Habilita la API de Compute Engine en tu proyecto.

  • Habilita la API Certificate Manager en tu proyecto.

  • Crea una clave privada y un certificado firmado a partir de una autoridad de certificación (AC). Sigue las instrucciones del paso 1: Crea una clave privada y un certificado. La clave privada y el certificado son necesarios para crear un certificado SSL autogestionado con Gestor de certificados.

  • Crea un recurso de certificado para un balanceador de carga de aplicación interno entre regiones mediante la clave privada y el certificado firmado que has creado. Cuando subas el certificado, debes definir el alcance como all-regions. Para obtener más información, consulta Subir un certificado autogestionado a Certificate Manager. El recurso de certificado es necesario para configurar el proxy HTTPS de destino del balanceador de carga.

  • Crea una subred de solo proxy si aún no tienes una. Debe haber una sola subred de solo proxy en la red de VPC y en la región en las que quieras crear la regla de reenvío del balanceador de carga de aplicación interno entre regiones. Todos los balanceadores de carga de aplicaciones internos de esa red y región usan esta subred.

Crear un NEG de Private Service Connect

Por cada API global de Google a la que quieras acceder, crea un NEG de Private Service Connect. Los NEGs de Private Service Connect son regionales, incluso cuando se usan para conectarse a APIs de Google globales.

Un NEG de Private Service Connect no se puede actualizar después de crearse.

Consola

  1. En la Google Cloud consola, ve a la página Crear un grupo de endpoints de red.

    Ve a Crear un grupo de endpoints de red.

  2. En la página Crear grupo de puntos finales de red, introduce un Nombre para el grupo de puntos finales de red.

  3. En Tipo de grupo de endpoints de red, selecciona NEG de Private Service Connect (regional).

  4. En Target (Destino), selecciona Global Google APIs (APIs de Google globales).

  5. Selecciona la región del grupo de puntos finales de red.

  6. Selecciona el Servicio de destino del grupo de endpoints de red.

  7. Haz clic en Crear.

gcloud

Usa el comando network-endpoint-groups create.

gcloud compute network-endpoint-groups create NEG_NAME \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=TARGET_SERVICE \
    --region=REGION

Haz los cambios siguientes:

  • NEG_NAME: nombre del grupo de endpoints de red.

  • TARGET_SERVICE: el destino de la API de Google global al que quieres conectarte (por ejemplo, pubsub.googleapis.com). Consulta la lista de objetivos de la API de Google globales admitidos.

  • REGION: la región en la que se va a crear el grupo de puntos finales de red.

API

Realiza una solicitud POST al método regionNetworkEndpointGroups.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups
{
  "name": "NEG_NAME",
  "networkEndpointType": "PRIVATE_SERVICE_CONNECT",
  "pscTargetService": "TARGET_SERVICE"
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto del grupo de puntos finales de red.
  • REGION: la región en la que se va a crear el grupo de puntos finales de red.
  • NEG_NAME: nombre del grupo de endpoints de red.
  • TARGET_SERVICE: el destino de la API de Google global al que quieres conectarte (por ejemplo, pubsub.googleapis.com). Consulta la lista de objetivos de la API de Google globales admitidos.

Configurar el balanceador de carga

Para acceder a las APIs globales de Google, configura un balanceador de carga de aplicaciones interno entre regiones.

Consola

Selecciona el tipo de balanceador de carga

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a Balanceo de carga

  2. Haga clic en Crear balanceador de carga.
  3. En Tipo de balanceador de carga, selecciona Balanceador de carga de aplicación (HTTP/HTTPS) y haz clic en Siguiente.
  4. En Público o interno, selecciona Interno y haz clic en Siguiente.
  5. En Implementación en una sola región o en varias regiones, selecciona La mejor opción para cargas de trabajo entre regiones y haz clic en Siguiente.
  6. Haz clic en Configurar.

Configuración básica

  1. Introduce un nombre para el balanceador de carga.
  2. Selecciona una red para el balanceador de carga.

    La red debe contener una subred de solo proxy en la región en la que vayas a crear el balanceador de carga.

Configuración de frontend

  1. Haz clic en Configuración de frontend.
  2. Introduce un nombre para la regla de reenvío del balanceador de carga.
  3. En el campo Protocol (Protocolo), selecciona HTTPS (includes HTTP/2 and HTTP/3) [HTTPS (incluye HTTP/2 y HTTP/3)].
  4. Selecciona una región de subred para la subred del balanceador de carga.
  5. Selecciona una subred para el balanceador de carga.
  6. Haga clic en Dirección IP y, a continuación, realice una de las siguientes acciones:
    • Para asignar automáticamente una dirección IP efímera, selecciona Efímera (automática).
    • Para elegir una dirección IP efímera, selecciona Efímera (personalizada) y, a continuación, introduce una dirección IP efímera personalizada del intervalo de direcciones IP de la subred del balanceador de carga.
    • Para reservar y usar una dirección IP interna estática, haz clic en Crear dirección IP y, a continuación, haz lo siguiente:
      1. Introduce un nombre para la dirección IP.
      2. Haz clic en Dirección IP estática y, a continuación, sigue uno de estos pasos:
        • Para asignar automáticamente una dirección IP estática, selecciona Asignar automáticamente.
        • Para configurar una dirección IP específica, selecciona Dejarme elegir y, a continuación, introduce una Dirección IP personalizada del intervalo de direcciones IP de la subred del balanceador de carga.
      3. Haz clic en Reservar.
  7. Asegúrate de que el campo Puerto esté configurado como 443 para permitir el tráfico HTTPS.
  8. Haga clic en la lista Certificado y, a continuación, seleccione el certificado autogestionado.
  9. Haz clic en Listo.

Configuración de backend

  1. Haz clic en Configuración de backend.
  2. Crea un servicio de backend global para cada API global de Google a la que quieras acceder. Para crear un servicio de backend global, sigue estos pasos:

    1. En el menú Crear o seleccionar servicios de backend, selecciona Crear un servicio de backend.
    2. Introduce un Nombre para el servicio backend.
    3. Define el Tipo de backend como Grupo de endpoints de red de Private Service Connect.
    4. En Tipo de destino de Private Service Connect, seleccione API de Google global.
    5. Selecciona HTTPS como protocolo.
    6. En la sección Backends (Backends), haz clic en el menú New backend (Nuevo backend) y selecciona un grupo de endpoints de red de Private Service Connect.

      Si necesitas crear un grupo de endpoints de red de Private Service Connect, haz clic en Crear NEG de PSC.

    7. Haz clic en Listo.

    8. Haz clic en Crear.

  3. Asegúrate de que cada servicio de backend que quieras añadir esté seleccionado en el menú Crear o seleccionar servicios de backend y, a continuación, haz clic en Aceptar.

Reglas de enrutamiento

El conjunto de reglas para enrutar las solicitudes HTTPS entrantes a servicios de backend específicos se denomina mapa de URLs. Para obtener más información sobre los mapas de URLs, consulte la descripción general de los mapas de URLs.

Si solo vas a configurar un servicio de backend para el balanceador de carga, la regla de enrutamiento predeterminada será suficiente y podrás ir a la sección Revisar y finalizar.

Si configura varios servicios de backend, debe crear un elemento PathMatcher para cada uno de ellos. Cada regla de host solo puede hacer referencia a un matcher de ruta, pero dos o más reglas de host pueden hacer referencia al mismo matcher de ruta.

  1. Si tienes más de un servicio backend, haz clic en Reglas de enrutamiento.
  2. Selecciona Regla sencilla de host y ruta.
  3. Sigue estos pasos para cada backend:
    1. Haz clic en Añadir regla de host y ruta.
    2. En Host, introduce el nombre de host que se usará para enviar solicitudes a este servicio. Por ejemplo, pubsub.example.com.
    3. En Rutas, introduce la ruta (por ejemplo, /*).
    4. En Backends (Backends), selecciona el servicio de backend.

Revisar y finalizar

  1. Haz clic en Revisar y finalizar para revisar la configuración.
  2. Haz clic en Crear.

gcloud

  1. Para cada API global de Google a la que quieras acceder, haz lo siguiente:

    1. Para crear un servicio de backend global, usa el comando gcloud compute backend-services create.

      gcloud compute backend-services create BACKEND_SERVICE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --protocol=HTTPS \
          --global
      

      Sustituye BACKEND_SERVICE_NAME por el nombre del servicio de backend.

    2. Para añadir un NEG al servicio de backend correspondiente, usa el comando gcloud compute backend-services add-backend.

      gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
          --network-endpoint-group=NEG_NAME \
          --network-endpoint-group-region=REGION \
          --global
      

      Haz los cambios siguientes:

      • NEG_NAME: el nombre del NEG de Private Service Connect.
      • REGION: la región del NEG de Private Service Connect.
  2. Para crear un mapa de URLs global para el balanceador de carga, usa el comando gcloud compute url-maps create.

    Un mapa de URLs debe hacer referencia a un servicio de backend predeterminado. Si vas a configurar tu balanceador de carga con un servicio de backend, define ese servicio de backend como predeterminado. Si vas a configurar tu balanceador de carga para que use varios servicios de backend, elige uno de ellos para que sea el predeterminado del mapa de URLs.

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=DEFAULT_BACKEND_SERVICE_NAME
    

    Haz los cambios siguientes:

    • URL_MAP_NAME: nombre del mapa de URLs.
    • DEFAULT_BACKEND_SERVICE_NAME: el nombre del servicio de backend predeterminado del balanceador de carga. El valor predeterminado se usa cuando ninguna regla de host coincide con el nombre de host solicitado.
  3. Opcional: Si vas a configurar tu balanceador de carga para que use varios servicios de backend, completa este paso. Si tu mapa de URLs solo hace referencia a un servicio de backend, puedes saltarte este paso.

    Para añadir más servicios de backend al mapa de URLs, usa el comando gcloud compute url-maps add-path-matcher.

    En cada servicio de backend, añade un comparador de rutas y una o varias reglas de host. Debes crear un comparador de rutas para cada servicio de backend. Cada regla de host solo puede hacer referencia a un comparador de rutas, pero dos o más reglas de host pueden hacer referencia al mismo comparador de rutas.

    gcloud compute url-maps add-path-matcher URL_MAP_NAME \
        --path-matcher-name=PATH_MATCHER \
        --default-service=BACKEND_SERVICE_NAME \
        --new-hosts=HOSTNAMES
    

    Haz los cambios siguientes:

    • PATH_MATCHER: nombre del comparador de rutas.
    • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
    • HOSTNAMES: uno o varios nombres de host a los que enviar solicitudes para el servicio backend. Por ejemplo, pubsub.example.com. Puedes introducir varios nombres de host en una lista separada por comas.
  4. Para crear un proxy HTTPS de destino, usa el comando gcloud compute target-https-proxies create.

    gcloud compute target-https-proxies create PROXY_NAME \
        --url-map=URL_MAP_NAME \
        --certificate-manager-certificates=CERTIFICATE_NAME
    

    Haz los cambios siguientes:

    • PROXY_NAME: nombre del proxy HTTPS de destino.
    • URL_MAP_NAME: nombre del mapa de URLs.
    • CERTIFICATE_NAME: el nombre del recurso del certificado.
  5. Para crear una regla de reenvío global para tu balanceador de carga, usa el comando gcloud compute forwarding-rules create.

    gcloud compute forwarding-rules create RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=NETWORK \
        --address=IP_ADDRESS \
        --ports=443 \
        --target-https-proxy=PROXY_NAME \
        --subnet=SUBNET \
        --subnet-region=SUBNET_REGION \
        --global
    

    Haz los cambios siguientes:

    • RULE_NAME: el nombre de la regla de reenvío.
    • NETWORK: la red de VPC de la regla de reenvío. Esta red debe contener una subred de solo proxy en la región en la que estés creando el balanceador de carga.
    • IP_ADDRESS: la dirección IP interna de la regla de reenvío, que debe estar dentro del intervalo de direcciones IP de la subred de la regla de reenvío. Para usar una dirección IP efímera específica, introduce la dirección IP (por ejemplo, 10.0.0.5). Para usar una dirección IP interna estática, introduce el nombre de la dirección IP. Para permitir que Google Cloud seleccione una dirección IP efímera, omite esta marca.
    • SUBNET: la subred de la regla de reenvío.
    • SUBNET_REGION: la región de la subred de la regla de reenvío.

API

  1. Para cada API global de Google a la que quieras acceder, haz lo siguiente:

    1. Para crear un servicio de backend global, envía una solicitud POST al método backendServices.insert.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
      {
        "loadBalancingScheme": "INTERNAL_MANAGED",
        "name": "BACKEND_SERVICE_NAME",
        "protocol": "HTTPS"
      }
      

      Haz los cambios siguientes:

      • PROJECT_ID: el ID de tu proyecto.
      • BACKEND_SERVICE_NAME: el nombre del servicio backend.
    2. Para añadir un NEG al servicio de backend correspondiente, haz una solicitud a través del método backendServices.patch.PATCH

      PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
      {
        "backends": [
          {
            "group": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups/NEG_NAME"
          }
        ]
      }
      

      Haz los cambios siguientes:

      • REGION: la región de la NEG.
      • NEG_NAME: nombre del grupo de puntos finales de red que se va a añadir.
  2. Para crear un mapa de URLs global para el balanceador de carga, haz una solicitud POST al método urlMaps.insert.

    Un mapa de URLs debe hacer referencia a un servicio de backend predeterminado. Si vas a configurar tu balanceador de carga con un servicio de backend, define ese servicio de backend como predeterminado. Si vas a configurar tu balanceador de carga para que use varios servicios de backend, elige uno de ellos para que sea el predeterminado del mapa de URLs.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps
     {
       "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/DEFAULT_BACKEND_SERVICE_NAME",
       "name": "URL_MAP_NAME"
     }
     

    Haz los cambios siguientes:

    • DEFAULT_BACKEND_SERVICE_NAME: el nombre del valor predeterminado del balanceador de carga. El valor predeterminado se usa cuando ninguna regla de host coincide con el nombre de host solicitado.
    • URL_MAP_NAME: nombre del mapa de URLs.
  3. Si vas a configurar tu balanceador de carga para que use varios servicios de backend, completa este paso. Si tu mapa de URLs solo hace referencia a un servicio de backend, puedes saltarte este paso.

    Para añadir más servicios de backend al mapa de URLs, haz una solicitud PATCH al método urlMaps.patch.

    En cada servicio de backend, añade un comparador de rutas y una o varias reglas de host. Debes crear un comparador de rutas para cada servicio de backend. Cada regla de host solo puede hacer referencia a un comparador de rutas, pero dos o más reglas de host pueden hacer referencia al mismo comparador de rutas.

    Puedes añadir varios matchers de ruta y reglas de host haciendo una sola solicitud de API.

     PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME
     {
       "pathMatchers": [
         {
           "name": "PATH_MATCHER_NAME_1",
           "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_1"
         },
         {
           "name": "PATH_MATCHER_NAME_2",
           "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_2"
         }
       ],
       "hostRules": [
         {
           "hosts": ["HOSTNAME_1"],
           "pathMatcher": "PATH_MATCHER_NAME_1"
         },
         {
           "hosts": ["HOSTNAME_2"],
           "pathMatcher": "PATH_MATCHER_NAME_2"
         }
       ]
     }
     

    Haz los cambios siguientes:

    • PATH_MATCHER_NAME_1: nombre del primer matcher de ruta.
    • BACKEND_SERVICE_NAME_1: el nombre del primer servicio backend.
    • PATH_MATCHER_NAME_2: nombre del segundo matcher de ruta.
    • BACKEND_SERVICE_NAME_2: el nombre del segundo servicio de backend.
    • HOSTNAME_1: el nombre de host al que se enviarán las solicitudes del primer servicio (por ejemplo, pubsub.example.com).
    • HOSTNAME_2: el nombre de host al que se envían las solicitudes del segundo servicio.
  4. Para crear un proxy HTTPS de destino, envía una solicitud POST al método targetHttpsProxies.insert.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies
     {
       "name": "PROXY_NAME",
       "sslCertificates": [
         "https://certificatemanager.googleapis.com/v1/projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME"
       ],
       "urlMap": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME"
     }
     

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto.
    • PROXY_NAME: nombre del proxy HTTPS de destino.
    • CERTIFICATE_NAME: el nombre del recurso del certificado.
    • URL_MAP_NAME: nombre del mapa de URLs.
  5. Para crear una regla de reenvío global para tu balanceador de carga, haz una solicitud POST al método globalForwardingRules.insert. La red de la regla de reenvío debe contener una subred de solo proxy en la subred de la región de la regla de reenvío.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules
     {
       "IPAddress": "IP_ADDRESS",
       "loadBalancingScheme": "INTERNAL_MANAGED",
       "name": "FORWARDING_RULE_NAME",
       "network": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME",
       "portRange": "443",
       "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME",
       "target": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies/PROXY_NAME"
     }
     

    Haz los cambios siguientes:

    • IP_ADDRESS: la dirección IP interna de la regla de reenvío, que debe estar dentro del intervalo de direcciones IP de la subred de la regla de reenvío. Para usar una dirección IP efímera específica, proporciona la dirección IP (por ejemplo, 10.0.0.5). Para usar una dirección IP interna estática, proporciona el nombre de la dirección IP. Para permitir queGoogle Cloud seleccione una dirección IP efímera, omite este campo.
    • FORWARDING_RULE_NAME: el nombre de la regla de reenvío.
    • NETWORK_NAME: el nombre de la red VPC de la regla de reenvío. Esta red debe contener una subred de solo proxy en la región en la que estés creando el balanceador de carga.
    • SUBNET_REGION: la región de la subred de la regla de reenvío.
    • SUBNET_NAME: el nombre de la subred de la regla de reenvío.

Verificar la configuración

Para probar la conexión de tu backend con las APIs globales de Google, haz lo siguiente:

  1. Si no tienes ninguna, crea una instancia de máquina virtual (VM) en la red de VPC en la que hayas configurado el backend.
  2. Asegúrate de que no has creado reglas ni políticas de cortafuegos que anulen la regla de salida implícita de IPv4.
  3. Conéctate a la VM.
  4. En la VM, usa curl para verificar que puedes consultar cada API. Este comando define el encabezado Host y omite la resolución de DNS especificando una dirección IP definida por el usuario.

    Puedes omitir la validación de certificados con la marca -k. Es posible que tengas que omitir la validación si has usado un certificado autofirmado para configurar el proxy HTTPS de destino o si la VM no tiene el certificado de la autoridad de certificación que firmó tu certificado.

    curl -iv --resolve HOSTNAME:443:IP_ADDRESS \
       'https://HOSTNAME/RESOURCE_URI'
    

    Haz los cambios siguientes:

    • HOSTNAME: el nombre de host que has configurado en tu mapa de URLs. Por ejemplo, pubsub.example.com.
    • IP_ADDRESS: la dirección IP de la regla de reenvío de tu balanceador de carga.
    • RESOURCE_URI: el resto del URI del recurso que quieras usar para la verificación. Por ejemplo, si el balanceador de carga reenvía solicitudes a un punto final regional de Pub/Sub, puedes usar $discovery/rest?version=v1.

Configurar registros DNS

Configura los registros DNS de cada host que hayas añadido al mapa de URLs para que apunten a la dirección IP de la regla de reenvío. Si usas Cloud DNS para gestionar el DNS, consulta Añadir, modificar y eliminar registros. De lo contrario, configura los registros DNS en tu servidor DNS.

Por ejemplo, supongamos que ha creado las siguientes configuraciones:

  • Un NEG de Private Service Connect que usa el servicio de destino pubsub.googleapis.com.

  • Un balanceador de carga de aplicación interno entre regiones que usa ese NEG de Private Service Connect como backend.

  • Un mapa de URLs que define una regla de host para pubsub.example.com.

Para que esta configuración funcione correctamente, debe crear un registro DNS que apunte pubsub.example.com a la dirección IP de la regla de reenvío.

Con esta configuración, las solicitudes que se envíen a pubsub.example.com se enviarán al balanceador de carga, que las reenviará a pubsub.googleapis.com.

Configurar clientes para que envíen solicitudes al backend

Para enviar solicitudes a través del backend en lugar de los endpoints de servicio público, debes configurar los clientes para que envíen solicitudes al nombre de host que hayas definido en el mapa de URLs del balanceador de carga (por ejemplo, pubsub.example.com). Consulta la documentación de tu cliente o biblioteca de cliente para obtener información sobre cómo configurarlo para que use endpoints personalizados. En las siguientes páginas se incluyen los pasos de configuración de algunos clientes habituales:

  • Python: puedes configurar api_endpoint en Client options.

  • Ir: puedes configurar WithEndpoint en ClientOptions.

  • .NET: puedes configurar Endpoint en la clase de compilación del cliente.

  • gcloud puedes configurar api_endpoint_overrides en la CLI de gcloud.