Salida de VPC directa con una red de VPC compartida

Puedes habilitar tu servicio de App Engine para enviar tráfico a una red de VPC compartida mediante la salida de VPC directa sin necesidad de usar el conector de Acceso a VPC sin servidores.

En esta página, se describe cómo configurar los permisos de IAM de App Engine para usar la subred de la red de VPC compartida y, luego, colocar tu servicio en la subred compartida.

Antes de comenzar

Revisa la sección de asignación de direcciones IP para obtener orientación sobre cómo asignar direcciones IP desde tu subred.

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 está limitada por la cantidad de direcciones IP disponibles en la subred elegida.

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

  • Ingreso de VPC directa: App Engine no admite el ingreso 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.

Configura los permisos de IAM

Antes de que App Engine en un proyecto de servicio de VPC compartida pueda acceder a una red de VPC compartida, asegúrate de que el agente de servicio de App Engine tenga suficientes permisos para usar la subred.

  • Rol de agente de servicio de App Engine: Para acceder a la red de VPC compartida, otorga permisos suficientes al agente de servicio de App Engine agregando uno de los siguientes roles:

    • Usuario de la red de Compute (roles/compute.networkUser) en el proyecto host de la VPC compartida. Las subredes con IPv6 externa también requieren el rol de administrador de IP pública de Compute (roles/compute.publicIpAdmin).

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

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

      Reemplaza lo siguiente:

      • HOST_PROJECT_ID: es el ID del proyecto host de la VPC compartida.
      • SERVICE_PROJECT_NUMBER: es el número de proyecto de servicio de VPC compartida en el que implementas tu servicio de App Engine.
    • Visualizador de la red de Compute (compute.networkViewer) en el proyecto host de VPC compartida y el Usuario de la red de Compute (compute.networkUser) rol en la subred de VPC compartida. Las subredes con IPv6 externa también requieren el rol de administrador de IP pública de Compute (roles/compute.publicIpAdmin).

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

      gcloud compute networks subnets add-iam-policy-binding SUBNET_NAME \
        --region REGION \
        --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \
        --role "roles/compute.networkUser" \
        --project HOST_PROJECT_ID

      Reemplaza lo siguiente:

      • SUBNET_NAME: es el nombre de recurso completamente calificado de la subred en la que deseas ejecutar tus servicios de App Engine.
      • REGION: es la región del servicio de App Engine, que debe coincidir con la región de la subred.
      • SERVICE_PROJECT_NUMBER: es el número de proyecto de servicio de VPC compartida en el que implementas tu servicio de App Engine.
      • HOST_PROJECT_ID: es el ID del proyecto host de la VPC compartida.
  • 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 en el proyecto host de la VPC compartida
    • compute.subnetworks.get en el proyecto host o en la subred específica
    • compute.subnetworks.use en el proyecto host o en la subred específica
    • compute.addresses.get en el proyecto de servicio de la VPC compartida
    • compute.addresses.list en el proyecto de servicio de la VPC compartida
    • compute.addresses.create en el proyecto de servicio de la VPC compartida
    • compute.addresses.delete en el proyecto de servicio de la VPC compartida
    • compute.addresses.createInternal en el proyecto de servicio de la VPC compartida
    • compute.addresses.deleteInternal en el proyecto de servicio de la VPC compartida
    • compute.regionOperations.get en el proyecto de servicio de la VPC compartida

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 especificas solo una red, la subred usa 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 escalar verticalmente 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 más grande.

Para obtener eficiencia de la asignación de IP y facilidad de administración, coloca varios recursos en la misma subred. Si el 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 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 2X la cantidad de direcciones IP, más un búfer para tener en cuenta las actualizaciones de la versión.

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 la IP direcciones 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 compatibles

App Engine admite los siguientes rangos 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

Implementa un servicio de App Engine

La salida de VPC directa permite que tu servicio de App Engine envíe tráfico a una red de VPC compartida sin un conector de Acceso a VPC sin servidores. Puedes asignar etiquetas de red a una versión específica de tu servicio de App Engine para obtener una seguridad de red más detallada, como aplicar reglas de firewall de VPC.

Para colocar tu servicio en la subred compartida, especifica los nombres de recursos completamente calificados para la red de VPC compartida y la subred en tu archivo app.yaml.

  1. Actualiza tu archivo app.yaml para incluir la sección vpc_access:

    vpc_access:
      network_interface:
        network: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK
        subnet: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
        tags:
            - NETWORK_TAGS
      vpc_egress: EGRESS_SETTING

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: el ID de tu proyecto de VPC compartida.
    • VPC_NETWORK: el nombre de tu red de VPC compartida.
    • REGION: es la región del servicio de App Engine, que debe coincidir con la región de la subred.
    • SUBNET_NAME: el nombre de recurso completamente calificado de tu subred.
    • Opcional: NETWORK_TAGS: una lista de etiquetas de red para asociar con las instancias de tu servicio de App Engine para usar 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: Envía todo el tráfico saliente por medio de la red de VPC compartida.
      • private-ranges-only (predeterminado): Envía solo tráfico a direcciones internas a través de la red de VPC compartida.
  2. Para implementar el servicio, ejecuta el siguiente comando:

    gcloud beta app deploy

Desconecta un servicio

Para quitar el servicio de la red de VPC compartida, haz lo siguiente:

  1. Quita la sección vpc_access de tu archivo app.yaml.
  2. Vuelve a implementar el servicio:

    gcloud beta app deploy

Solucionar problemas

En esta sección, se describen los errores comunes que puedes encontrar cuando usas la salida de VPC directa con una red de VPC compartida y se proporciona orientación para resolverlos.

No se puede borrar la subred

Para borrar una subred, primero debes borrar todos los recursos que la usen. Si App Engine usa una subred, debes desconectarla o moverla a una subred diferente antes de borrar la subred.

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

Errores en la Deployment

Si falla la implementación, Google Cloud CLI muestra mensajes de error que indican la causa raíz. Algunos problemas comunes incluyen los siguientes:

  • Metadatos de red 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 red de 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:

No se puede desconectar la red de VPC compartida

Para desconectar la red de VPC compartida en el proyecto host, sigue los pasos para desaprovisionar la VPC compartida y asegúrate de desconectar cualquier servicio de App Engine de la red de VPC compartida.

Para ver qué recursos de App Engine usan la red de VPC compartida, ejecuta el siguiente comando:

gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID

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

La subred de salida de VPC directa se queda sin direcciones IPv4

Si la subred de la red de VPC se queda sin direcciones IPv4, App Engine no puede iniciar más instancias de servicio.

Para resolver este problema, considera cambiar a una subred con más direcciones IP disponibles o expandir el rango de subred.

Visualiza las direcciones IP asignadas

Para ver qué direcciones IP asignó App Engine, ve a la página de direcciones IP en la Google Cloud consola o ejecuta el siguiente comando desde Google Cloud CLI:

gcloud compute addresses list