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.geten el proyecto host de la VPC compartidacompute.subnetworks.geten el proyecto host o en la subred específicacompute.subnetworks.useen el proyecto host o en la subred específicacompute.addresses.geten el proyecto de servicio de la VPC compartidacompute.addresses.listen el proyecto de servicio de la VPC compartidacompute.addresses.createen el proyecto de servicio de la VPC compartidacompute.addresses.deleteen el proyecto de servicio de la VPC compartidacompute.addresses.createInternalen el proyecto de servicio de la VPC compartidacompute.addresses.deleteInternalen el proyecto de servicio de la VPC compartidacompute.regionOperations.geten 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:
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.
Actualiza tu archivo
app.yamlpara incluir la secciónvpc_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.
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:
- Quita la sección
vpc_accessde tu archivoapp.yaml. 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 archivoapp.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:
- Cuenta de servicio de Cloud Build (
roles/cloudbuild.builds.builder) - Creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator)
- Cuenta de servicio de Cloud Build (
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