Puoi abilitare il tuo servizio App Engine a inviare traffico a una rete VPC condivisa utilizzando l'uscita VPC diretta senza richiedere un connettore di accesso VPC serverless.
Questa pagina descrive come configurare le autorizzazioni IAM di App Engine per utilizzare la subnet della rete VPC condiviso e quindi inserire il servizio nella subnet condivisa.
Prima di iniziare
Consulta la sezione Allocazione degli indirizzi IP per indicazioni sull'allocazione degli indirizzi IP dalla subnet.
Limitazioni
Utilizzo degli indirizzi IP: l'utilizzo degli indirizzi IP del tuo servizio viene scalato direttamente in base al numero di istanze in esecuzione e la tua capacità di scalabilità è limitata dal numero di indirizzi IP disponibili nella subnet scelta.
Eventi di manutenzione: il tuo servizio potrebbe subire brevi interruzioni della connessione durante gli eventi di manutenzione dell'infrastruttura di rete. Ti consigliamo di utilizzare le librerie client per gestire i ripristini occasionali della connessione.
Avvii a freddo: i tempi di avvio a freddo iniziali dipendono dalla regione e dal caso d'uso specifico. In rari casi, gli avvii a freddo potrebbero durare fino a un minuto.
Ingresso VPC diretto: App Engine non supporta l'ingresso VPC diretto.
Numero di istanze: puoi configurare fino a 100 istanze per versione di App Engine per utilizzare l'uscita Direct VPC.
Configurare le autorizzazioni IAM
Prima che App Engine in un progetto di servizio VPC condiviso possa accedere a una rete VPC condivisa, assicurati che l'agente di servizio App Engine disponga di autorizzazioni sufficienti per utilizzare la subnet.
Ruolo Agente di servizio App Engine: per accedere alla rete VPC condiviso, concedi autorizzazioni sufficienti all'agente di servizio App Engine aggiungendo uno dei seguenti ruoli:
Compute Network User (
roles/compute.networkUser) nel progetto host VPC condiviso. Le subnet con IPv6 esterno richiedono anche il ruolo Compute Public IP Admin (roles/compute.publicIpAdmin).Ad esempio, per concedere il ruolo Utente di rete Compute, esegui questo 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"
Sostituisci quanto segue:
- HOST_PROJECT_ID: l'ID del progetto host VPC condiviso.
- SERVICE_PROJECT_NUMBER: il numero del progetto di servizio VPC condiviso in cui esegui il deployment del servizio App Engine.
Compute Network Viewer (
compute.networkViewer) nel progetto host VPC condiviso e il ruolo Compute Network User (compute.networkUser) nella subnet VPC condivisa. Le subnet con IPv6 esterno richiedono anche il ruolo Compute Public IP Admin (roles/compute.publicIpAdmin).Ad esempio, per concedere il ruolo Utente di rete Compute sulla subnet, esegui il seguente 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
Sostituisci quanto segue:
- SUBNET_NAME: il nome completo della risorsa della subnet in cui vuoi eseguire i servizi App Engine.
- REGION: la regione per il servizio App Engine, che deve corrispondere alla regione della subnet.
- SERVICE_PROJECT_NUMBER: il numero del progetto di servizio VPC condiviso in cui esegui il deployment del servizio App Engine.
- HOST_PROJECT_ID: l'ID del progetto host VPC condiviso.
Autorizzazioni personalizzate: per un controllo più granulare, concedi al service agent App Engine le seguenti autorizzazioni aggiuntive sul progetto:
compute.networks.getsul progetto host VPC condivisocompute.subnetworks.getsul progetto host o sulla subnet specificacompute.subnetworks.usesul progetto host o sulla subnet specificacompute.addresses.getsul progetto di servizio del VPC condivisocompute.addresses.listsul progetto di servizio del VPC condivisocompute.addresses.createsul progetto di servizio del VPC condivisocompute.addresses.deletesul progetto di servizio del VPC condivisocompute.addresses.createInternalsul progetto di servizio del VPC condivisocompute.addresses.deleteInternalsul progetto di servizio del VPC condivisocompute.regionOperations.getsul progetto di servizio del VPC condiviso
Allocazione degli indirizzi IP
Per inserire il servizio App Engine in una rete VPC, specifica una rete VPC o una subnet oppure entrambe. Se specifichi solo una rete, la subnet utilizza lo stesso nome della rete. App Engine alloca indirizzi IP dalla tua subnet.
Gli indirizzi IP sono temporanei, quindi non creare policy basate su singoli IP. Se devi creare una policy basata sugli IP, ad esempio nelle regole firewall, devi utilizzare l'intervallo di indirizzi IP dell'intera subnet.
Per modificare la rete o la subnet utilizzata dal servizio, implementa una nuova versione che utilizzi i nuovi valori di rete e subnet.
Scale up e fare lo scale down
Per fare lo scale up più rapidamente durante un picco di traffico, App Engine riserva gli indirizzi IP in blocchi di 16 (subnet mask 28) alla volta. Per assicurarti di avere a disposizione un numero sufficiente di indirizzi IPv4 da utilizzare in App Engine, l'intervallo di indirizzi IPv4 della subnet deve essere /26 o superiore.
Per un'allocazione IP efficiente e una gestione semplice, posiziona più risorse nella stessa subnet. Se lo spazio di indirizzi IPv4 è limitato, consulta Intervalli IPv4 supportati per altre opzioni.
Per eliminare la subnet, devi prima eliminare o rieseguire il deployment del servizio App Engine per interrompere l'utilizzo della subnet, quindi attendere 1-2 ore.
Consumo di indirizzi IP per i servizi
In stato stazionario, App Engine utilizza un numero di indirizzi IP doppio (2X) rispetto al numero di istanze. Quando una versione viene ridimensionata, App Engine conserva i relativi indirizzi IP per un massimo di 20 minuti. In totale, riserva almeno il doppio del numero di indirizzi IP, più un buffer per tenere conto degli aggiornamenti delle versioni.
Ad esempio, se esegui l'upgrade delle versioni in modo che version 1 venga scalato da 100
istanze a zero, mentre version 2 viene scalato da zero a 100,
App Engine conserva gli indirizzi IP version 1 per un massimo di 20
minuti dopo la riduzione della scalabilità. Durante il periodo di conservazione di 20 minuti, devi
riservare almeno 400 indirizzi IP ((100 + 100) * 2).
Intervalli IPv4 supportati
App Engine supporta i seguenti intervalli IPv4 per la tua subnet:
Esegui il deployment di un servizio App Engine
L'uscita VPC diretta consente al tuo servizio App Engine di inviare traffico a una rete VPC condiviso senza un connettore di accesso VPC serverless. Puoi assegnare tag di rete a una versione specifica del servizio App Engine per una sicurezza di rete più granulare, ad esempio applicando regole firewall VPC.
Per inserire il servizio nella subnet condivisa, specifica i nomi delle risorse completi
per la reteVPC condivisoa e la subnet nel file app.yaml.
Aggiorna il file
app.yamlper includere la sezionevpc_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
Sostituisci quanto segue:
- HOST_PROJECT_ID: l'ID del tuo progetto VPC condiviso.
- VPC_NETWORK: il nome della tua rete VPC condiviso.
- REGION: la regione per il servizio App Engine, che deve corrispondere alla regione della subnet.
- SUBNET_NAME: il nome completo della risorsa della subnet.
- (Facoltativo) NETWORK_TAGS: un elenco di tag di rete da associare alle istanze del servizio App Engine per l'utilizzo nelle regole firewall e nelle norme di routing.
(Facoltativo) EGRESS_SETTING: controlla il modo in cui viene indirizzato il traffico in uscita. Questo campo supporta le seguenti impostazioni di configurazione:
all-traffic: invia tutto il traffico in uscita tramite la rete VPC condiviso.private-ranges-only(impostazione predefinita): invia il traffico solo agli indirizzi interni tramite la rete VPC condiviso.
Esegui il deployment del servizio eseguendo questo comando:
gcloud beta app deploy
Disconnettere un servizio
Per rimuovere il servizio dalla rete VPC condiviso:
- Rimuovi la sezione
vpc_accessdal fileapp.yaml. Esegui nuovamente il deployment del servizio:
gcloud beta app deploy
Risoluzione dei problemi
Questa sezione descrive gli errori comuni che potresti riscontrare quando utilizzi l'uscita VPC diretto con una rete VPC condiviso e fornisce indicazioni su come risolverli.
Impossibile eliminare la subnet
Per eliminare una subnet, devi prima eliminare tutte le risorse che la utilizzano. Se App Engine utilizza una subnet, devi scollegarla o spostarla in un'altra subnet prima di eliminarla.
Dopo aver eliminato o spostato le risorse App Engine, attendi 1-2 ore prima che App Engine rilasci gli IP prima di eliminare la subnet.
Errori di deployment
Se il deployment non riesce, Google Cloud CLI visualizza messaggi di errore che indicano la causa principale. Alcuni problemi comuni includono:
Metadati della rete VPC errati, ad esempio un nome di rete o subnet errato nel file
app.yaml. Per correggere i potenziali errori, rivedi la configurazione della rete VPC nel fileapp.yaml.Autorizzazioni IAM insufficienti. Assicurati di concedere le autorizzazioni richieste al account di servizio di deployment. Se si verificano errori di autorizzazione durante il deployment, assicurati di concedere i seguenti ruoli aggiuntivi al account di servizio:
- Service account Cloud Build (
roles/cloudbuild.builds.builder) - Creatore token service account (
roles/iam.serviceAccountTokenCreator)
- Service account Cloud Build (
Impossibile scollegare la rete VPC condiviso
Per scollegare la rete VPC condivisa nel progetto host, segui i passaggi per deprovisioning del VPC condiviso e assicurati di disconnettere tutti i servizi App Engine dalla rete VPC condivisa.
Per vedere quali risorse App Engine utilizzano la rete VPC condiviso, esegui questo comando:
gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
Sostituisci HOST_PROJECT_ID con l'ID del tuo progetto host VPC condiviso.
La subnet VPC diretto in uscita esaurisce gli indirizzi IPv4
Se la subnet della rete VPC esaurisce gli indirizzi IPv4, App Engine non può avviare altre istanze di servizio.
Per risolvere il problema, valuta la possibilità di passare a una subnet con più indirizzi IP disponibili o di espandere l'intervallo di subnet.
Visualizzare gli indirizzi IP allocati
Per vedere gli indirizzi IP allocati da App Engine, vai alla pagina Indirizzi IP nella console Google Cloud o esegui il seguente comando da Google Cloud CLI:
gcloud compute addresses list