Salida de VPC directa

La salida de VPC directa proporciona una solución de redes de alto rendimiento para que tu servicio de App Engine envíe tráfico a una red de nube privada virtual (VPC). La salida de VPC directa permite que las cargas de trabajo accedan sin problemas a los recursos de la red de VPC y elimina la necesidad de configurar conectores de Acceso a VPC sin servidores.

Ventajas clave

  • Administración simplificada: Elimina la sobrecarga operativa de administrar instancias de conectores, tipos de máquinas y parámetros de configuración de escalamiento. App Engine controla las configuraciones directamente en el archivo app.yaml de tu servicio.
  • Eficiencia en los costos: El uso de la salida de VPC directa no tiene cargos adicionales, y no tienes que pagar cargos mensuales fijos por las VMs del conector.
  • Mejora del rendimiento y la confiabilidad: Al eliminar la necesidad de usar un conector, la salida de VPC directa ofrece una conexión más rápida y confiable a los recursos de tu red de VPC. Se ajusta tan rápido como tu servicio de App Engine y evita las interrupciones de conexión que podrían ocurrir con los conectores durante el mantenimiento.
  • Seguridad detallada: Puedes aplicar etiquetas de red directamente a tus versiones de servicio de App Engine, lo que permite reglas de firewall y políticas de red precisas y específicas del servicio.

Limitaciones

  • Consumo de direcciones IP: El uso de direcciones IP de tu servicio se ajusta directamente con la cantidad de instancias en ejecución, y tu capacidad de ajuste se limita a la cantidad de direcciones IP disponibles en la subred que elijas.

  • Eventos de mantenimiento: Es posible que tu servicio experimente interrupciones breves de conexión durante los eventos de mantenimiento de la infraestructura de red. Te recomendamos que uses bibliotecas cliente para controlar los restablecimientos ocasionales de la conexión.

  • Inicios en frío: Los tiempos de inicio en frío iniciales dependen de la región y del caso de uso específico. En casos excepcionales, los inicios en frío pueden durar hasta un minuto.

  • Entrada de VPC directa: App Engine no admite la entrada de VPC directa.

  • Cantidad de instancias: Solo puedes configurar hasta 100 instancias por versión de App Engine para usar la salida de VPC directa.

Asignación de direcciones IP

Para colocar tu servicio de App Engine en una red de VPC, especifica una red de VPC o una subred, o ambas. Si solo especificas una red, la subred usará el mismo nombre que la red. App Engine asigna direcciones IP desde tu subred.

Las direcciones IP son efímeras, por lo que no debes crear políticas basadas en IPs individuales. Si necesitas crear una política basada en IPs, como en reglas de firewall, debes usar el rango de direcciones IP de toda la subred.

Para cambiar la red o subred que usa tu servicio, implementa una versión nueva que use los valores de red y subred nuevos.

Aumenta y reduce la escala

Para un escalamiento vertical más rápido durante un aumento de tráfico, App Engine reserva direcciones IP en bloques de 16 (máscara de subred 28) a la vez. Para asegurarte de tener suficientes direcciones IPv4 disponibles para usar en App Engine, el rango de direcciones IPv4 de tu subred debe ser /26 o mayor.

Para obtener eficiencia en la asignación de IP y facilidad de administración, coloca varios recursos en la misma subred. Si tu espacio de direcciones IPv4 es limitado, consulta Rangos de IPv4 compatibles para obtener más opciones.

Para borrar la subred, primero debes borrar o volver a implementar tu servicio de App Engine para dejar de usar la subred y, luego, esperar entre 1 y 2 horas.

Consumo de direcciones IP para los servicios

En estado estable, App Engine usa 2 veces (2X) más direcciones IP que la cantidad de instancias. Cuando una versión se reduce, App Engine conserva sus direcciones IP durante un máximo de 20 minutos. En total, reserva al menos el doble de la cantidad de direcciones IP, más un búfer para tener en cuenta las actualizaciones de versiones.

Por ejemplo, si actualizas versiones para que version 1 escale de 100 instancias a cero, mientras que version 2 escala de cero a 100, App Engine conserva las direcciones IP de version 1 durante un máximo de 20 minutos después de reducir el escalamiento. Durante el período de retención de 20 minutos, debes reservar al menos 400 direcciones IP ((100 + 100) * 2).

Rangos de IPv4 admitidos

App Engine admite los siguientes rangos de IPv4 para tu subred:

  • RFC 1918
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • RFC 6598
    • 100.64.0.0/10
  • Clase E
    • 240.0.0.0/4

Antes de comenzar

  1. Asegúrate de tener una red de VPC y una subred existentes en tu proyecto. Si aún no tienes una VPC existente, sigue las instrucciones para crear una en Crea una red de VPC.

  2. Habilita la API de Compute Engine y la API de Cloud Build:

    Habilita las API

  3. Para usar la salida de VPC directa, asegúrate de ejecutar la versión más reciente de Google Cloud CLI:

    gcloud components update

Roles obligatorios

Para asegurarte de que App Engine tenga acceso a la red de VPC, otorga los siguientes roles a tu cuenta de servicio de implementación:

  • Rol Agente de servicio de App Engine: De forma predeterminada, el agente de servicio de App Engine tiene el rol Agente de servicio de App Engine (roles/appengine.serviceAgent) que contiene los permisos necesarios.

  • Permisos personalizados: Para obtener un control más detallado, otorga al agente de servicio de App Engine los siguientes permisos adicionales en el proyecto:

    • compute.networks.get
    • compute.subnetworks.get
    • compute.subnetworks.use en el proyecto host o en la subred específica
    • compute.addresses.get
    • compute.addresses.list
    • compute.addresses.create
    • compute.addresses.delete
    • compute.addresses.createInternal
    • compute.addresses.deleteInternal
    • compute.regionOperations.get
  • Rol Usuario de red de Compute: Si no usas el rol predeterminado Agente de servicio de App Engine o los permisos personalizados, otorga el rol Usuario de red de Compute (roles/compute.networkUser) en la cuenta de servicio del Agente de servicio de App Engine. Las subredes con IPv6 externa también requieren el rol de administrador de IP públicas de Compute (roles/compute.publicIpAdmin).

    Por ejemplo, para otorgar el rol de usuario de red de Compute, ejecuta el siguiente comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \
    --role "roles/compute.networkUser"

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • PROJECT_NUMBER: Es el número de proyecto en el que implementas tu servicio de App Engine.

Configura un servicio de App Engine con salida de VPC directa

Para permitir que un servicio de App Engine nuevo o existente se conecte directamente a tu red de VPC, sigue estos pasos:

  1. Agrega el siguiente parámetro de configuración vpc_access a tu archivo app.yaml:

    vpc_access:
      network_interface:
        network: NETWORK
        subnet: SUBNET
        tags:
            - NETWORK_TAGS
      vpc_egress: EGRESS_SETTING

    Reemplaza lo siguiente:

    • NETWORK: Es el nombre de la red existente a la que se conectan las instancias de tu aplicación, por ejemplo, default. Especifica una red de VPC o una subred, o ambas. Si solo especificas una red, la subred usará el mismo nombre que la red.

    • SUBNET: Es el nombre de la subred existente a la que se conectan las instancias de tu aplicación, por ejemplo, default. Especifica una red de VPC o una subred, o ambas. Si solo especificas una red, la subred usará el mismo nombre que la red.

    • Opcional: NETWORK_TAGS: Es una lista de etiquetas de red para asociar con las instancias de tu servicio de App Engine y usarlas en reglas de firewall y políticas de enrutamiento.

    • Opcional: EGRESS_SETTING: Controla cómo se enruta el tráfico saliente. Este campo admite los siguientes parámetros de configuración:

      • all-traffic: Todas las solicitudes salientes se enrutan a través de la red de VPC.
      • private-ranges-only (predeterminado): Solo el tráfico a direcciones IP internas se enruta a través de la red de VPC. El tráfico de Internet usa la ruta predeterminada de App Engine.
  2. Ejecuta el siguiente comando para realizar la implementación en App Engine:

    gcloud beta app deploy

Desconecta un servicio

Para desconectar tu servicio de la red de VPC, haz lo siguiente:

  1. Quita la sección vpc_access de tu archivo app.yaml.

  2. Vuelve a implementar tu servicio:

    gcloud beta app deploy

Prácticas recomendadas para la administración de IP

Es necesario administrar tus direcciones IP, ya que cada instancia de tu servicio consume una dirección IP de tu subred. Usa las siguientes estrategias para administrar tus direcciones IP:

  • Rango de IP recomendado: Para obtener la mejor compatibilidad, te recomendamos que comiences con el rango RFC 6598 (100.64.0.0/10).

  • Rangos de IP alternativos: Si ya usas el rango de IP recomendado de 100.64.0.0/10, puedes usar rangos que no sean RFC 1918, como la clase E (240.0.0.0/4) en tu subred.

  • Tamaño de la subred: Asegúrate de que el rango de direcciones IPv4 de tu subred sea /26 o más grande para proporcionar suficientes direcciones para el escalamiento.

  • Aprovisiona IPs en exceso: Te recomendamos que aprovisiones en exceso la cantidad de IPs disponibles en tu subred para evitar que se agoten. Al igual que con los servicios de Cloud Run, por lo general, debes usar cuatro veces más IPs (2 veces para el estado estable y 2 veces adicionales durante la implementación) que la cantidad de instancias en ejecución para facilitar las actualizaciones y el ajuste de escala sin problemas.

Solucionar problemas

En esta sección, se describen los errores comunes que puedes encontrar cuando implementas tu servicio de App Engine con salida directa de VPC.

No se puede borrar la subred

Para borrar una subred, primero debes borrar o volver a implementar todos los recursos que la usen. Si App Engine usa una subred, desconecta el servicio de App Engine de la red de VPC o muévelo a una subred diferente antes de borrar la subred.

Después de borrar o mover tu servicio de App Engine, espera de 1 a 2 horas para que App Engine libere las direcciones IP antes de borrar la subred.

Fallas en la Deployment

Si falla la implementación, Google Cloud CLI muestra mensajes de error que indican la causa raíz. Estos son algunos problemas comunes:

  • Metadatos de VPC incorrectos, como un nombre de red o subred mal escrito en tu archivo app.yaml Para corregir posibles errores, revisa la configuración de la VPC en tu archivo app.yaml.

  • Permisos de IAM insuficientes Asegúrate de otorgar los permisos necesarios en tu cuenta de servicio de implementación. Si encuentras errores de permisos durante la implementación, asegúrate de otorgar los siguientes roles adicionales a la cuenta de servicio:

Agotamiento de direcciones IP

Si tu subred se queda sin direcciones IP disponibles, App Engine no podrá iniciar instancias nuevas y registrará un error. Para resolver este problema, expande el rango de IP de tu subred o mueve tu servicio a una subred más grande.

Fugas de direcciones IP

Las fugas de direcciones IP pueden provocar el agotamiento de las direcciones IP. Es poco probable que se produzcan filtraciones de direcciones IP durante las operaciones estándar, pero podrían ocurrir por los siguientes motivos:

  • Tu cuenta de servicio de implementación solo tiene permiso para reservar direcciones (create, createInternal) y no tiene permiso para liberar direcciones (delete, deleteInternal).
  • Se borró tu cuenta de servicio mientras otras reservas de direcciones Google Cloud estaban activas.
  • Se quitó la cuenta de Facturación de Cloud y, luego, se volvió a habilitar en el proyecto mientras las reservas de direcciones sin servidores estaban activas.
  • Tu proyecto Google Cloud se borró y, luego, se restableció mientras aún existían las reservas de direcciones sin servidores.

Para resolver el problema, sigue estos pasos:

  1. Consulta los siguientes registros en el Explorador de registros para identificar las direcciones filtradas:

    protoPayload.authorizationInfo.permission=~"compute.addresses.delete.*"
    protoPayload.authorizationInfo.resourceAttributes.type="compute.addresses"
    protoPayload.resourceName=~"projects/.*/regions/.*/addresses/serverless-.*"
    severity>=WARNING
    

    Si esta consulta no devuelve resultados, no hay filtraciones de direcciones IP y no es necesario que realices ninguna otra acción.

  2. Si tu consulta devuelve resultados, asegúrate de que tu cuenta de servicio de implementación contenga el rol de agente de servicio de App Engine (roles/appengine.serviceAgent). Si no puedes usar este rol, asegúrate de otorgar otros roles y permisos obligatorios en tu cuenta de servicio de implementación.

  3. Borra manualmente las direcciones IP filtradas con la Google Cloud consola o Google Cloud CLI:

    Console

    1. Ve a la página Direcciones IP en la consola de Google Cloud :

      Ir a Direcciones IP

    2. Selecciona las direcciones IP filtradas que identificaste en el paso anterior ejecutando la consulta.

    3. Haz clic en Liberar dirección estática para quitar las direcciones filtradas.

    gcloud

    Ejecuta el comando gcloud compute addresses delete:

    gcloud compute addresses delete ADDRESS_NAME --region=REGION

    Reemplaza lo siguiente:

    • ADDRESS_NAME: Es el nombre de la dirección IP filtrada.
    • REGION: Es la región de la dirección IP filtrada.