Accede a las APIs de Google globales a través de backends

En esta página, se describe cómo acceder a las APIs de Google globales mediante backends de Private Service Connect que se basan en balanceadores de cargas de aplicaciones internos entre regiones.

Esta configuración te permite orientar una o más APIs de Google globales individuales mientras aplicas la visibilidad y el control que proporcionan los backends de Private Service Connect.

  • Puedes configurar nombres de host personalizados, locales para tu nube privada virtual (VPC) y redes locales conectadas, que enrutan el tráfico a las APIs de Google globales que eliges.
  • Puedes acceder a los backends desde cualquier región, y el backend puede equilibrar el tráfico en los grupos de extremos de red (NEG) de Private Service Connect que se encuentran en cualquier región.
  • Puedes enviar tráfico a los backends desde redes de VPC con intercambio de tráfico.

Para obtener una lista de las APIs de Google globales disponibles, consulta Destinos de la API de Google global.

Antes de comenzar

Crea un NEG de Private Service Connect

Para cada API global de Google a la que desees acceder, crea un NEG de Private Service Connect. Los NEG 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 su creación.

Console

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

    Ir a Crear un grupo de extremos de red

  2. En la página Crea un grupo de extremos de red, ingresa un Nombre para el grupo de extremos de red.

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

  4. En Destino, selecciona APIs de Google globales.

  5. Selecciona una región para el grupo de extremos de red.

  6. Selecciona el Servicio de destino para el grupo de extremos 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

Reemplaza lo siguiente:

  • NEG_NAME: un nombre para el grupo de extremos de red.

  • TARGET_SERVICE: el destino global de la API de Google al que deseas conectarte, por ejemplo, pubsub.googleapis.com. Consulta la lista de destinos de la API de Google globales compatibles.

  • REGION: la región en la que se creará el grupo de extremos 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"
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto del grupo de extremos de red.
  • REGION: la región en la que se creará el grupo de extremos de red.
  • NEG_NAME: un nombre para el grupo de extremos de red.
  • TARGET_SERVICE: el destino global de la API de Google al que deseas conectarte, por ejemplo, pubsub.googleapis.com. Consulta la lista de destinos de la API de Google globales compatibles.

Configura el balanceador de cargas

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

Console

Inicia la configuración

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

    Ir a Balanceo de cargas

  2. Haz clic en Crear balanceador de cargas.
  3. En Tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones (HTTP/HTTPS) y haz clic en Siguiente.
  4. En Orientado al público o interno, selecciona Interno y haz clic en Siguiente.
  5. En Implementación entre regiones o de una sola región, selecciona Ideal para cargas de trabajo entre regiones y haz clic en Siguiente.
  6. Haz clic en Configurar.

Configuración básica

  1. Ingresa un Nombre para el balanceador de cargas.
  2. Selecciona una red para el balanceador de cargas.

    La red debe contener una subred de solo proxy en la región en la que crearás el balanceador de cargas.

Configuración de frontend

  1. Haga clic en Configuración de frontend.
  2. Ingresa un Nombre para la regla de reenvío del balanceador de cargas.
  3. En el campo Protocolo, elige HTTPS (incluye HTTP/2 y HTTP/3).
  4. Selecciona una Región de subred para la subred del balanceador de cargas.
  5. Selecciona una Subred para el balanceador de cargas.
  6. Haz clic en Dirección IP y, luego, realiza una de las siguientes acciones:
    • Para asignar una dirección IP efímera de forma automática, selecciona Efímera (automática).
    • Para elegir una dirección IP efímera, selecciona Efímera (personalizada) y, luego, ingresa una dirección IP efímera personalizada del rango de direcciones IP de la subred del balanceador de cargas.
    • Para reservar y usar una dirección IP interna estática, haz clic en Crear dirección IP y, luego, haz lo siguiente:
      1. Ingresa un nombre para la dirección IP.
      2. Haz clic en Dirección IP estática y, luego, realiza una de las siguientes acciones:
        • Para asignar una dirección IP estática de forma automática, selecciona Asignar de forma automática.
        • Para configurar una dirección IP específica, selecciona Permitirme elegir y, luego, ingresa una dirección IP personalizada del rango de direcciones IP de la subred del balanceador de cargas.
      3. Haz clic en Reservar.
  7. Asegúrate de que el campo Puerto esté establecido en 443 para permitir el tráfico HTTPS.
  8. Haz clic en la lista Certificado y, luego, selecciona el certificado que administras.
  9. Haz clic en Listo.

Configuración de backend

  1. Haga clic en Configuración de backend.
  2. Para cada API global de Google a la que desees acceder, crea un servicio de backend global. Para crear un servicio de backend global, haz lo siguiente:

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

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

    7. Haz clic en Listo.

    8. Haz clic en Crear.

  3. Asegúrate de que cada servicio de backend que desees agregar esté seleccionado en el menú Crear o seleccionar servicios de backend y, luego, 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 URL. Para obtener más información sobre los mapas de URL, consulta la Descripción general de los mapas de URL.

Si configuras solo un servicio de backend para el balanceador de cargas, la regla de enrutamiento predeterminada es suficiente y puedes pasar a Revisa y finaliza.

Si configuras varios servicios de backend, debes crear un comparador de rutas de acceso para cada servicio de backend. Cada regla de host puede hacer referencia solo a un comparador de rutas de acceso, pero dos o más reglas de host pueden hacer referencia al mismo comparador de rutas de acceso.

  1. Si tienes más de un servicio de backend, haz clic en Reglas de enrutamiento.
  2. Selecciona Regla sencilla de host y ruta de acceso.
  3. Para cada backend, haz lo siguiente:
    1. Haz clic en Agrega la regla de host y de ruta.
    2. En Host, ingresa el nombre de host que se usará para enviar solicitudes a este servicio, por ejemplo, pubsub.example.com.
    3. En Rutas de acceso, ingresa la ruta de acceso, por ejemplo, /*.
    4. En Backends, selecciona el servicio de backend.

Revisa y finaliza

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

gcloud

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

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

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

      Reemplaza BACKEND_SERVICE_NAME por el nombre del servicio de backend.

    2. Para agregar 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
      

      Reemplaza lo siguiente:

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

    Un mapa de URL debe hacer referencia a un servicio de backend predeterminado. Si configuras tu balanceador de cargas con un servicio de backend, establece ese servicio de backend como el predeterminado. Si configuras el balanceador de cargas para usar varios servicios de backend, elige uno de los servicios de backend como predeterminado para el mapa de URL.

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

    Reemplaza lo siguiente:

    • URL_MAP_NAME: un nombre para el mapa de URL
    • DEFAULT_BACKEND_SERVICE_NAME: el nombre del servicio de backend predeterminado del balanceador de cargas El valor predeterminado se usa cuando ninguna regla de host coincide con el nombre de host solicitado.
  3. Opcional: Si configuras el balanceador de cargas para usar varios servicios de backend, completa este paso. Si el mapa de URL solo hace referencia a un servicio de backend, omite este paso.

    Para agregar servicios de backend adicionales al mapa de URL, usa el comando gcloud compute url-maps add-path-matcher.

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

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

    Reemplaza lo siguiente:

    • PATH_MATCHER: un nombre para el comparador de rutas de acceso.
    • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
    • HOSTNAMES: Uno o más nombres de host a los que se enviarán solicitudes para el servicio de backend, por ejemplo, pubsub.example.com. Puedes ingresar 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
    

    Reemplaza lo siguiente:

    • PROXY_NAME: un nombre para el proxy HTTPS de destino.
    • URL_MAP_NAME: el nombre del mapa de URL.
    • CERTIFICATE_NAME: el nombre del recurso de certificado.
  5. Para crear una regla de reenvío global para tu balanceador de cargas, 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
    

    Reemplaza lo siguiente:

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

API

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

    1. Para crear un servicio de backend global, realiza 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"
      }
      

      Reemplaza lo siguiente:

      • PROJECT_ID: el ID del proyecto del proyecto.
      • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
    2. Para agregar un NEG al servicio de backend correspondiente, realiza una solicitud PATCH al método backendServices.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"
          }
        ]
      }
      

      Reemplaza lo siguiente:

      • REGION: Es la región del NEG.
      • NEG_NAME: Es el nombre del grupo de extremos de red que se agregará.
  2. Para crear un mapa de URL global para el balanceador de cargas, realiza una solicitud POST al método urlMaps.insert.

    Un mapa de URL debe hacer referencia a un servicio de backend predeterminado. Si configuras tu balanceador de cargas con un servicio de backend, establece ese servicio de backend como el predeterminado. Si configuras el balanceador de cargas para usar varios servicios de backend, elige uno de los servicios de backend como predeterminado para el mapa de URL.

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

    Reemplaza lo siguiente:

    • DEFAULT_BACKEND_SERVICE_NAME: el nombre del balanceador de cargas predeterminado. El valor predeterminado se usa cuando ninguna regla de host coincide con el nombre de host solicitado.
    • URL_MAP_NAME: un nombre para el mapa de URL
  3. Si configuras el balanceador de cargas para usar varios servicios de backend, completa este paso. Si el mapa de URL solo hace referencia a un servicio de backend, omite este paso.

    Para agregar servicios de backend adicionales al mapa de URL, realiza una solicitud PATCH al método urlMaps.patch.

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

    Puedes agregar varios comparadores de rutas de acceso y reglas de host mediante una sola solicitud a la 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"
         }
       ]
     }
     

    Reemplaza lo siguiente:

    • PATH_MATCHER_NAME_1: un nombre para el primer comparador de rutas de acceso.
    • BACKEND_SERVICE_NAME_1: el nombre del primer servicio de backend.
    • PATH_MATCHER_NAME_2: un nombre para el segundo comparador de rutas de acceso.
    • BACKEND_SERVICE_NAME_2: el nombre del segundo servicio de backend.
    • HOSTNAME_1: el nombre de host al que se enviarán solicitudes para el primer servicio, por ejemplo, pubsub.example.com.
    • HOSTNAME_2: el nombre de host al que se enviarán solicitudes para el segundo servicio.
  4. Para crear un proxy HTTPS de destino, realiza 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"
     }
     

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID del proyecto.
    • PROXY_NAME: un nombre para el proxy HTTPS de destino.
    • CERTIFICATE_NAME: el nombre del recurso de certificado.
    • URL_MAP_NAME: el nombre del mapa de URL.
  5. Si deseas crear una regla de reenvío global para tu balanceador de cargas, realiza 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"
     }
     

    Reemplaza lo siguiente:

    • IP_ADDRESS: la dirección IP interna de la regla de reenvío, que debe estar dentro del rango 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 que Google Cloud selecciona 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 de VPC de la regla de reenvío. Esta red debe contener una subred de solo proxy en la región en la que creas el balanceador de cargas.
    • 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.

Verifica la configuración

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

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

    Puedes omitir la validación del certificado con la marca -k. Es posible que debas omitir la validación si usaste un certificado autofirmado para configurar el proxy HTTPS de destino o si la VM no tiene el certificado de la autoridad certificadora que firmó el certificado.

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

    Reemplaza lo siguiente:

    • HOSTNAME: el nombre de host que configuraste en el mapa de URL, por ejemplo, pubsub.example.com.
    • IP_ADDRESS: la dirección IP de la regla de reenvío del balanceador de cargas.
    • RESOURCE_URI: el resto del URI del recurso que deseas usar para la verificación. Por ejemplo, si el balanceador de cargas reenvía las solicitudes a un extremo regional para Pub/Sub, puedes usar $discovery/rest?version=v1.

Configura registros DNS

Configura los registros DNS para cada host que agregaste al mapa de URL y apunta a la dirección IP de la regla de reenvío. Si usas Cloud DNS para administrar DNS, consulta Agrega, modifica y borra registros. De lo contrario, configura los registros DNS en tu servidor DNS.

Por ejemplo, supongamos que creaste las siguientes configuraciones:

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

  • Un balanceador de cargas de aplicaciones interno entre regiones que usa ese NEG de Private Service Connect como un backend.

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

Para que esta configuración funcione de forma correcta, debes 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 enviadas a pubsub.example.com se envían al balanceador de cargas, que reenvía la solicitud a pubsub.googleapis.com.

Configura los clientes para que envíen solicitudes al backend

Para enviar solicitudes a través del backend en lugar de los extremos de servicio público, debes configurar los clientes para que envíen solicitudes al nombre de host que definiste en el mapa de URL del balanceador de cargas, por ejemplo, pubsub.example.com. Consulta la documentación de tu cliente o biblioteca cliente para obtener información sobre cómo configurarla con el fin de usar extremos personalizados. En las siguientes páginas, se incluyen los pasos de configuración para algunos clientes comunes:

  • Python: puedes configurar api_endpoint en Opciones del cliente.

  • Go: puedes configurar WithEndpoint en ClientOptions.

  • .NET: puedes configurar Endpoint en la clase de compilador del cliente.

  • gcloud: Puedes configurar api_endpoint_overrides en la gcloud CLI.