Acceder a servicios publicados a través de back-ends

En esta guía se describe cómo configurar un balanceador de carga de aplicaciones externo global con un backend de Private Service Connect para acceder a un servicio publicado mediante Private Service Connect.

Si se usa un backend basado en un balanceador de carga de aplicaciones externo global, los consumidores de servicios con acceso a Internet pueden enviar tráfico a los servicios de la red de VPC del productor de servicios (haz clic para ampliar).

Para obtener más información, consulta Acerca de los back-ends de Private Service Connect.

Roles

El rol Administrador de balanceadores de carga de Compute (roles/compute.loadBalancerAdmin) contiene el permiso necesario para llevar a cabo las tareas descritas en esta guía.

Antes de empezar

  • Si quieres publicar tu propio servicio, consulta Publicar servicios mediante Private Service Connect.

  • Si vas a conectar un servicio publicado por un tercero, pide al productor del servicio la siguiente información:

    • El URI del adjunto de servicio del servicio al que quieras conectarte. La vinculación de servicio tiene este formato: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • Requisitos sobre los nombres de DNS que se usan para enviar solicitudes. Es posible que tengas que usar nombres de DNS específicos en la configuración del mapa de URLs o en la configuración de DNS.

Crear un grupo de endpoints de red

Crea un NEG de Private Service Connect que apunte a la vinculación de servicio del servicio publicado al que quieras acceder. Si el servicio publicado se implementa en varias regiones diferentes, cree una NEG por cada adjunto de servicio.

Cada NEG de Private Service Connect consume una dirección IP /32 para que el balanceador de carga pueda comunicarse con él.

Consola

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

    Ve a Grupos de puntos finales de red
    .

  2. Haz clic en Crear grupo de endpoints de red.

  3. Introduce un nombre para el grupo de endpoints de red.

  4. En Tipo de grupo de endpoints de red, selecciona Grupo de endpoints de red (Private Service Connect).

  5. Seleccione el tipo de destino Servicio publicado.

  6. En Servicio de destino, introduce el URI de la vinculación de servicio.

  7. Selecciona la Red y la Subred en las que quieres crear el grupo de endpoints de red.

    La subred debe estar en la misma región que el servicio publicado.

  8. Haz clic en Crear.

gcloud

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

Haz los cambios siguientes:

  • NEG_NAME: nombre del grupo de endpoints de red.

  • TARGET_SERVICE: el archivo adjunto de servicio al que quieras conectarte.

  • REGION: la región en la que se va a crear el grupo de puntos finales de red. La región debe ser la misma que la del servicio de destino.

  • NETWORK: la red en la que se va a crear el grupo de endpoints de red. Si se omite, se usará la red predeterminada.

  • SUBNET: la subred en la que se va a crear el grupo de endpoints de red. La subred debe estar en la misma región que el servicio de destino. Si proporcionas la red, debes proporcionar una subred. Si se omiten tanto la red como la subred, se usará la red predeterminada y la subred predeterminada de la REGION especificada.

Reservar una dirección IP externa para el balanceador de carga

Para reservar una dirección IP externa para el balanceador de carga, sigue estos pasos.

Consola

  1. En la Google Cloud consola, ve a la página Direcciones IP.

    Ir a direcciones IP

  2. Para reservar una dirección IPv4, haz clic en Reservar dirección estática.

  3. Asigna un nombre al recurso de dirección IP.

  4. Configure el nivel de red como Premium.

  5. Configura IPv4 (versión de IP) como IPv4.

  6. En Tipo, seleccione Global.

  7. Haz clic en Reservar.

gcloud

  1. Reserva una dirección IPv4 externa global para el balanceador de carga.

    gcloud compute addresses create ADDRESS_NAME \
        --ip-version=IPV4 --global
    

    Sustituye ADDRESS_NAME por el nombre del recurso de dirección IP.

  2. Ejecuta este comando para ver la dirección IP reservada:

    gcloud compute addresses describe ADDRESS_NAME \
      --format="get(address)" --global
    

Crear un recurso de certificado SSL

Para crear un balanceador de carga HTTPS, debes añadir un recurso de certificado SSL al frontend del balanceador de carga. Crea un recurso de certificado SSL con un certificado SSL gestionado por Google o un certificado SSL autogestionado.

  • Certificados gestionados por Google. Te recomendamos que utilices certificados gestionados por Google, ya que Google Cloud los obtiene, gestiona y renueva automáticamente. Para crear un certificado gestionado por Google, debes tener un dominio y los registros DNS de ese dominio para aprovisionar el certificado. Además, debes actualizar el registro A del DNS del dominio para que apunte a la dirección IP del balanceador de carga que has creado en el paso anterior. Para obtener instrucciones detalladas, consulta el artículo Usar certificados gestionados por Google.

  • Certificados autogestionados. Los certificados SSL autogestionados son certificados que obtienes, aprovisionas y renuevas tú mismo. Los certificados autogestionados pueden estar firmados por una autoridad de certificación o tener una firma automática. Si están firmados por una autoridad de certificación, debes tener un dominio. Además, debes actualizar el registro A del DNS del dominio para que apunte a la dirección IP del balanceador de carga creado en el paso anterior. Para obtener instrucciones detalladas, consulta Usar certificados SSL autogestionados.

    Si no quieres configurar un dominio en este momento, puedes usar un certificado SSL autofirmado para hacer pruebas.

En estas instrucciones se da por hecho que ya has creado un recurso de certificado SSL.

Configurar el balanceador de carga

Configura un balanceador de carga de aplicación externo global con funciones avanzadas de gestión del tráfico (esquema de balanceo de carga definido como EXTERNAL_MANAGED) para conectarte a un servicio gestionado.

Si te conectas a un servicio publicado que se ha desplegado en varias regiones y has creado varios NEGs de Private Service Connect para conectarte a cada vinculación de servicio, puedes añadir todos los NEGs al servicio de backend.

Aunque el NEG de Private Service Connect es regional, el resto de los componentes de balanceo de carga de esta configuración son globales.

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 Público (externo) y haz clic en Siguiente.
  5. En Implementación global o en una sola región, selecciona La mejor opción para cargas de trabajo globales y haz clic en Siguiente.
  6. En Generación del balanceador de carga, selecciona Balanceador de carga de aplicación externo global y haz clic en Siguiente.
  7. Haz clic en Configurar.

Configuración básica

  1. Introduce un nombre de balanceador de carga.
  2. Mantén la ventana abierta para continuar.

Configuración de frontend

  1. Haz clic en Configuración de frontend.
  2. Haz clic en Añadir IP y puerto de frontend.
  3. Introduce un nombre para el balanceador de carga.
  4. En el campo Protocol (Protocolo), selecciona HTTPS (includes HTTP/2) (HTTPS [incluye HTTP/2]).
  5. Asegúrate de que el Puerto esté configurado como 443 para permitir el tráfico HTTPS.
  6. En Dirección IP, selecciona la dirección IP que has reservado.

  7. Haz clic en la lista Certificado y selecciona el certificado que has creado.

  8. Haz clic en Aceptar.

  9. Haz clic en Listo.

Configuración de backend

El grupo de endpoints de red de Private Service Connect es un tipo de backend de balanceador de carga. Añade todos los NEGs de Private Service Connect del mismo servicio gestionado al servicio de backend.

  1. Haz clic en Configuración de backend.
  2. Haz clic en la lista Servicios y segmentos de backend y, a continuación, en Crear un servicio de backend.
  3. Introduce un Nombre para el servicio backend.
  4. En Tipo de backend, selecciona Grupo de endpoints de red de Private Service Connect.
  5. En la sección Backends (Backends), haz clic en la lista Private Service Connect network endpoint group (Grupo de endpoints de red de Private Service Connect) y selecciona el NEG de Private Service Connect que has creado. Haz clic en Listo.
  6. Si has creado más de un NEG de Private Service Connect, haz clic en Añadir backend para seleccionar otro NEG.

    Repita este paso hasta que se hayan añadido todos los NEGs de este servicio gestionado al servicio de backend.

  7. Haz clic en Crear.

Reglas de enrutamiento

Como esta configuración solo contiene un servicio de backend, la regla de enrutamiento predeterminada es suficiente y no es necesario que haga ningún cambio en esta sección.

Revisar y finalizar

  1. Para revisar la configuración, haz clic en Revisar y finalizar.
  2. Haz clic en Crear.

gcloud

  1. Crea un servicio de backend para el servicio gestionado al que quieras conectarte.

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

    Sustituye BACKEND_SERVICE_NAME por el nombre del servicio backend.

  2. Añade el NEG de Private Service Connect que apunta al servicio de destino.

    Si has creado varios NEGs en diferentes regiones para el mismo servicio, repite este paso para añadir todos los NEGs al servicio de 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:

    • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
    • NEG_NAME: el nombre del grupo de endpoints de red.
    • REGION: la región del grupo de puntos finales de red.
  3. Crea un mapa de URLs para el balanceador de carga.

    Un mapa de URLs debe hacer referencia a un servicio de backend predeterminado. Configura el servicio de backend que has creado como servicio de backend predeterminado.

    gcloud compute url-maps create URL_MAP_NAME \
      --default-service=BACKEND_SERVICE_NAME \
      --global
    

    Haz los cambios siguientes:

    • URL_MAP_NAME: nombre del mapa de URLs.

    • 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.

  4. Crea el proxy HTTPS de destino.

    Usa el recurso de certificado SSL que has creado para crear un proxy HTTPS de destino.

    gcloud compute target-https-proxies create PROXY_NAME \
      --url-map=URL_MAP_NAME \
      --ssl-certificates=CERTIFICATE
    

    Haz los cambios siguientes:

    • PROXY_NAME: nombre del proxy HTTPS de destino.
    • URL_MAP_NAME: nombre del mapa de URLs.
    • CERTIFICATE: el nombre del recurso de certificado.
  5. Crea la regla de reenvío.

    gcloud compute forwarding-rules create FWD_RULE \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=ADDRESS_NAME \
        --target-https-proxy=PROXY_NAME \
        --ports=443 \
        --global
    

    Haz los cambios siguientes:

    • FWD_RULE: el nombre de la regla de reenvío.

    • ADDRESS_NAME: el recurso de dirección IP que has reservado para usarlo en la regla de reenvío.

    • PROXY_NAME: nombre del proxy HTTPS de destino.

Configurar registros DNS

Si quieres acceder a tu backend de Private Service Connect mediante un nombre DNS, crea nombres DNS para cada regla de reenvío externa. El registro DNS debe corresponder a un nombre del mapa de URLs. A menos que tu mapa de URLs reescriba los nombres, el registro DNS también debe corresponderse con los nombres que espera el servicio de productor.

Si usas Cloud DNS para gestionar el DNS, consulta cómo añadir un registro DNS.

Verificar la configuración

  1. Crea la instancia de VM.

    gcloud compute instances create VM_NAME \
        --network=NETWORK \
        --image-project=debian-cloud --image-family=debian-11 \
        --zone=ZONE
    

    Haz los cambios siguientes:

    • VM_NAME: nombre de la máquina virtual.

    • NETWORK: la red de la VM.

    • ZONE: la zona de la VM.

  2. Conéctate a la VM.

    gcloud compute ssh VM_NAME --zone=ZONE
    
  3. Usa curl para verificar la configuración. Este comando define el encabezado Host y omite la resolución de DNS especificando una dirección IP definida por el usuario. Puedes omitir el puerto si usas el puerto predeterminado del protocolo (por ejemplo, el puerto 443 para HTTPS).

    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 [-k] -s 'https://HOST:443/RESOURCE_URI' \
        -H 'Host: HOST' \
        --connect-to HOST:443:FWD_RULE_IP_ADDRESS:443
    

    Haz los cambios siguientes:

    • HOST: el nombre de host configurado en el mapa de URLs.

    • RESOURCE_URI: el resto del URI del recurso que quieras usar para la verificación.

    • FWD_RULE_IP_ADDRESS: la dirección IP asignada a la regla de reenvío.

Solución de problemas

Se crea el backend, pero no se establece la conectividad

Si creas un backend para servicios publicados correctamente, pero no se establece la conectividad, comprueba el estado de la conexión del backend. El estado de la conexión puede indicar los pasos que puedes seguir para resolver el problema.

Se crea el backend, pero el productor rechaza la conexión

Si recibes un error connection refused, suele significar que el servidor backend del productor no está escuchando en el puerto al que el cliente está intentando conectarse.

Pide al productor del servicio que compruebe si su servicio está escuchando en el puerto que has especificado.

Si el servicio del productor está alojado en un balanceador de carga de red de pases interno que usa varios puertos, especifica el puerto del productor adecuado en la configuración del NEG de Private Service Connect. Consulta la configuración del puerto del productor.

El backend tiene problemas de rendimiento o se agota el tiempo de espera de las conexiones

Si tu backend tiene problemas de rendimiento o se agota el tiempo de espera de la conexión de forma intermitente, puede deberse a que se han descartado paquetes. Para investigar los paquetes perdidos, puede consultar las métricas que se describen en las siguientes secciones.

Paquetes perdidos en el servicio publicado

La private_service_connect/consumer/dropped_sent_packets_count métrica monitoriza los paquetes de un consumidor de Private Service Connect, como un backend, a un servicio publicado que se han descartado porque el backend ha superado el número máximo de conexiones al servicio.

Si un backend informa valores de esta métrica, prueba las siguientes soluciones:

  • Crea backends adicionales que se conecten al servicio publicado.
  • Reduce el número de conexiones a través de este backend.
  • Pide al productor del servicio que aumente la capacidad del servicio publicado. Por ejemplo, puede añadir más instancias de máquina virtual o endpoints de red.

Paquetes perdidos de servicios publicados

La métrica private_service_connect/consumer/dropped_received_packets_count registra los paquetes enviados desde un servicio publicado a un consumidor de Private Service Connect, como un backend, que se han descartado porque Private Service Connect no encuentra ninguna conexión que coincida con los paquetes de respuesta.

Private Service Connect solo permite las conexiones que se inician desde la red de VPC del consumidor. Cuando un consumidor inicia una conexión, esta se monitoriza para asociar los paquetes de respuesta del servicio publicado con una conexión existente. Si Private Service Connect no encuentra ninguna coincidencia para un paquete de respuesta, el paquete se descarta.

Es posible que Private Service Connect no encuentre una coincidencia para un paquete de respuesta si un servicio publicado envía paquetes de respuesta después de que se haya agotado el tiempo de espera de una conexión. Si ve valores de esta métrica, póngase en contacto con el productor del servicio. Es posible que puedan configurar su servicio para evitar este problema.