Il traffico VPC diretto in uscita fornisce una soluzione di networking ad alte prestazioni per il tuo servizio App Engine per inviare traffico a una rete Virtual Private Cloud (VPC). Il traffico VPC diretto in uscita consente ai workload di accedere senza problemi alle risorse di rete VPC ed elimina la necessità di configurare i connettori di accesso VPC serverless.
Vantaggi principali
- Gestione semplificata: elimina l'overhead operativo della gestione delle istanze del connettore, dei tipi di macchine e delle impostazioni di scalabilità. App Engine gestisce le configurazioni direttamente nel file
app.yamldel servizio. - Efficienza in termini di costi: l'utilizzo del traffico VPC diretto in uscita non comporta costi aggiuntivi e non devi pagare tariffe mensili fisse per le VM del connettore.
- Prestazioni e affidabilità migliorate: eliminando la necessità di utilizzare un connettore, il VPC diretto per il traffico in uscita offre una connessione più rapida e affidabile alle risorse della rete VPC. La scalabilità è rapida quanto quella del servizio App Engine ed evita le interruzioni della connessione che potrebbero verificarsi con i connettori durante la manutenzione.
Sicurezza granulare: puoi applicare i tag di rete direttamente alle versioni del servizio App Engine, abilitando regole firewall e policy di rete precise e specifiche per il servizio.
Supporta i log di flusso VPC: puoi attivare i log di flusso VPC sulla tua subnet per registrare il traffico in uscita dal tuo servizio App Engine.
Limitazioni
Consumo di indirizzi IP: l'utilizzo degli indirizzi IP del servizio scala direttamente con il 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 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 le reimpostazioni occasionali della connessione.
Avvii completi: i tempi di avvio completo iniziali dipendono dalla regione e dal caso d'uso specifico. In rari casi, gli avvii a freddo potrebbero durare fino a un minuto.
VPC diretto in entrata: App Engine non supporta il VPC diretto in entrata.
Numero di istanze: puoi configurare fino a 100 istanze per versione di App Engine per utilizzare il traffico VPC diretto in uscita.
Log di flusso VPC: non mostra la versione del servizio App Engine nei record di log. Il nome del servizio viene visualizzato nel campo
AppEngineServiceDetails.
Allocazione degli indirizzi IP
Per posizionare il servizio App Engine su una rete VPC, specifica una rete VPC o una subnet o entrambe. Se specifichi solo una rete, la subnet utilizza lo stesso nome della rete. App Engine alloca gli 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, esegui il deployment di una nuova versione che utilizza i nuovi valori di rete e subnet.
Scale up e fare lo scale down
Per uno scale up più rapido durante un picco di traffico, App Engine prenota gli indirizzi IP in blocchi di 16 (subnet mask 28) alla volta.
Per assicurarti di avere un numero sufficiente di indirizzi IPv4 disponibili per l'utilizzo in App Engine, l'intervallo di indirizzi IPv4 della subnet deve essere /26 o superiore.
Per l'efficienza dell'allocazione degli IP e la facilità di gestione, posiziona più risorse sulla stessa subnet. Se lo spazio di indirizzi IPv4 è limitato, consulta Intervalli IPv4 supportati per altre opzioni.
Per eliminare la subnet, devi prima eliminare o rifare 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 stabile, App Engine utilizza il doppio (2X) degli indirizzi IP rispetto al numero di istanze. Quando una versione fa lo scale down, App Engine conserva i suoi indirizzi IP per un massimo di 20 minuti. In totale, prenota almeno il doppio del numero di indirizzi IP, più un buffer per tenere conto degli aggiornamenti della versione.
Ad esempio, se esegui l'upgrade delle versioni in modo che version 1 passi da 100
istanze a zero, mentre version 2 passi da zero a 100,
App Engine conserva gli indirizzi IP di version 1 per un massimo di 20
minuti dopo aver fatto lo scale down. Durante la finestra di conservazione di 20 minuti, devi prenotare almeno 400 indirizzi IP ((100 + 100) * 2).
Intervalli IPv4 supportati
App Engine supporta i seguenti intervalli IPv4 per la tua subnet:
Prima di iniziare
Assicurati di avere una rete VPC e una subnet esistenti nel progetto. Se non hai ancora un VPC, segui le istruzioni per crearne uno in Crea una rete VPC.
Abilita l'API Compute Engine e l'API Cloud Build:
Per utilizzare il VPC diretto in uscita, assicurati di eseguire l'ultima versione di Google Cloud CLI:
gcloud components update
Ruoli obbligatori
Assicurati che App Engine abbia accesso alla rete VPC concedendo i seguenti ruoli al account di servizio di deployment:
Ruolo Agente di servizio App Engine: per impostazione predefinita, l'agente di servizio App Engine dispone del ruolo Agente di servizio App Engine (
roles/appengine.serviceAgent) che contiene le autorizzazioni necessarie.Autorizzazioni personalizzate: per un controllo più granulare, concedi all'agente di servizio App Engine le seguenti autorizzazioni aggiuntive sul progetto:
compute.networks.getcompute.subnetworks.getcompute.subnetworks.usesul progetto o sulla subnet specificacompute.addresses.getcompute.addresses.listcompute.addresses.createcompute.addresses.deletecompute.addresses.createInternalcompute.addresses.deleteInternalcompute.regionOperations.get
Ruolo Compute Network User: se non utilizzi il ruolo predefinito App Engine Service Agent o le autorizzazioni personalizzate, concedi il ruolo Compute Network User (
roles/compute.networkUser) al account di servizio App Engine Service Agent. Le subnet con IPv6 esterno richiedono anche il ruolo Compute Public IP Admin (roles/compute.publicIpAdmin).Ad esempio, per concedere il ruolo Compute Network User, esegui questo comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-gae-service." \ --role "roles/compute.networkUser"
Sostituisci quanto segue:
- PROJECT_ID: l'ID progetto.
- PROJECT_NUMBER: il numero di progetto in cui esegui il deployment del servizio App Engine.
Configura un servizio App Engine con VPC diretto in uscita
Per consentire a un servizio App Engine nuovo o esistente di connettersi direttamente alla tua rete VPC, segui questi passaggi:
Aggiungi la seguente impostazione
vpc_accessal fileapp.yaml:vpc_access: network_interface: network: NETWORK subnet: SUBNET tags: - NETWORK_TAGS vpc_egress: EGRESS_SETTING
Sostituisci quanto segue:
NETWORK: il nome della rete esistente a cui si connettono le istanze dell'applicazione, ad esempio
default. Specifica una rete VPC o una subnet oppure entrambe. Se specifichi solo una rete, la subnet utilizza lo stesso nome della rete.SUBNET: il nome della subnet esistente a cui si connettono le istanze dell'applicazione, ad esempio
default. Specifica una rete VPC o una subnet oppure entrambe. Se specifichi solo una rete, la subnet utilizza lo stesso nome della rete.(Facoltativo) NETWORK_TAGS: un elenco di tag di rete da associare alle istanze del servizio App Engine da utilizzare nelle regole firewall e nelle policy di routing.
(Facoltativo) EGRESS_SETTING: controlla il modo in cui viene instradato il traffico in uscita. Questo campo supporta le seguenti impostazioni di configurazione:
all-traffic: tutte le richieste in uscita vengono instradate attraverso la rete VPC.private-ranges-only(valore predefinito): solo il traffico verso gli indirizzi IP interni viene instradato tramite la rete VPC. Il traffico internet utilizza il percorso App Engine predefinito.
Esegui il deployment in App Engine utilizzando questo comando:
gcloud beta app deploy
Scollega un servizio
Per disconnettere il servizio dalla rete VPC:
Rimuovi la sezione
vpc_accessdal fileapp.yaml.Rifai il deployment del servizio:
gcloud beta app deploy
Best practice per la gestione degli IP
È necessario gestire gli indirizzi IP, poiché ogni istanza del servizio utilizza un indirizzo IP della subnet. Utilizza le seguenti strategie per gestire i tuoi indirizzi IP:
Intervallo IP consigliato: per una compatibilità ottimale, ti consigliamo di iniziare con l'intervallo RFC 6598 (
100.64.0.0/10).Intervalli IP alternativi: se utilizzi già l'intervallo IP consigliato di
100.64.0.0/10, puoi utilizzare intervalli non RFC 1918, ad esempio la classe E (240.0.0.0/4) nella subnet.Dimensionamento della subnet: assicurati che l'intervallo di indirizzi IPv4 della subnet sia
/26o più grande per fornire indirizzi sufficienti per la scalabilità.Esegui l'overprovisioning degli IP: ti consigliamo di eseguire l'overprovisioning del numero di IP disponibili nella subnet per evitare l'esaurimento. In modo simile ai servizi Cloud Run, in genere devi utilizzare un numero di IP quattro volte superiore (2X per lo stato stabile e altri 2X durante il deployment) rispetto al numero di istanze in esecuzione per facilitare lo scale up e gli aggiornamenti.
Isola il traffico internet in uscita
Per impostazione predefinita, quando vpc_egress è impostato su private-ranges-only, App Engine invia il traffico internet in uscita tramite un pool regionale di indirizzi IP dinamici condivisi tra i workload serverless. Non utilizzare questo pool condiviso predefinito per i workload che dipendono dalla reputazione IP o che generano un traffico di probing ad alto volume.
In questi casi, imposta vpc_egress: all-traffic e instrada il traffico in uscita tramite Cloud NAT con indirizzi IP in uscita statici dedicati:
- Il tuo servizio si connette a endpoint esterni sensibili alla reputazione, come gateway di pagamento, database ospitati o API partner dietro web application firewall (WAF) di terze parti. Gli indirizzi IP statici dedicati impediscono che il traffico rumoroso di altri tenant nel pool condiviso attivi blocchi WAF esterni o errori
HTTP 403. - Il tuo servizio esegue scansioni di rete autorizzate, enumerazione delle porte, fingerprinting degli host, probing delle vulnerabilità, web scraping o test di carico. L'esecuzione di questi workload sul pool di IP condivisi predefinito peggiora la reputazione degli IP, può interrompere il servizio per altri clienti in violazione delle Norme di utilizzo accettabile diGoogle Cloud e potrebbe indurre Google a limitare o sospendere il workload.
Quando esegui workload di scansione autorizzati o con un numero elevato di connessioni tramite Cloud NAT, alloca un numero sufficiente di indirizzi IP statici e configura la prenotazione delle porte per evitare l'esaurimento delle porte.
Risoluzione dei problemi
Questa sezione descrive gli errori comuni che potresti riscontrare durante il deployment del servizio App Engine con VPC diretto in uscita.
Impossibile eliminare la subnet
Per eliminare una subnet, devi prima eliminare o rifare il deployment di tutte le risorse che la utilizzano. Se App Engine utilizza una subnet, scollega il servizio App Engine dalla rete VPC o spostalo in un'altra subnet prima di eliminare la subnet.
Dopo aver eliminato o spostato il servizio App Engine, attendi 1-2 ore affinché App Engine rilasci gli indirizzi 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 VPC errati, ad esempio un nome di rete o subnet con errori di ortografia nel file
app.yaml. Per correggere potenziali errori, esamina la configurazione 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 (
Esaurimento degli indirizzi IP
Se la subnet esaurisce gli indirizzi IP disponibili, App Engine non riesce ad avviare nuove istanze e registra un errore. Per risolvere il problema, espandi l'intervallo IP della subnet o sposta il servizio in una subnet più grande.
Leak di indirizzi IP
Le fughe di indirizzi IP potrebbero causare l'esaurimento degli indirizzi IP. Le fughe di indirizzi IP sono improbabili durante le operazioni standard, ma potrebbero verificarsi per i seguenti motivi:
- Il tuo account di servizio di deployment dispone solo delle autorizzazioni per prenotare gli indirizzi (
create,createInternal) e non dispone delle autorizzazioni per rilasciare gli indirizzi (delete,deleteInternal). - Il tuo account di servizio è stato eliminato mentre erano attive altre prenotazioni di indirizzi Google Cloud .
- L'account di fatturazione Cloud è stato rimosso e successivamente riattivato nel progetto mentre le prenotazioni di indirizzi serverless erano attive.
- Il tuo progetto Google Cloud è stato eliminato e successivamente ripristinato mentre esistevano ancora prenotazioni di indirizzi serverless.
Per risolvere il problema, procedi nel seguente modo:
Esegui una query per i seguenti log in Esplora log per identificare gli indirizzi trapelati:
protoPayload.authorizationInfo.permission=~"compute.addresses.delete.*" protoPayload.authorizationInfo.resourceAttributes.type="compute.addresses" protoPayload.resourceName=~"projects/.*/regions/.*/addresses/serverless-.*" severity>=WARNINGSe questa query non restituisce risultati, non ci sono fughe di indirizzi IP e non sono necessarie ulteriori azioni.
Se la query restituisce risultati, assicurati che il account di servizio di deployment contenga il ruolo Agente di servizio App Engine (
roles/appengine.serviceAgent). Se non puoi utilizzare questo ruolo, assicurati di concedere altri ruoli e autorizzazioni richiesti al account di servizio di deployment.Elimina manualmente gli indirizzi IP trapelati utilizzando la console Google Cloud o Google Cloud CLI:
Console
Vai alla pagina Indirizzi IP nella console Google Cloud :
Seleziona gli indirizzi IP esposti che hai identificato nel passaggio precedente eseguendo la query.
Fai clic su Rilascia indirizzo statico per rimuovere gli indirizzi trapelati.
gcloud
Esegui il comando
gcloud compute addresses delete:gcloud compute addresses delete ADDRESS_NAME --region=REGION
Sostituisci quanto segue:
- ADDRESS_NAME: il nome dell'indirizzo IP trapelato.
- REGION: la regione dell'indirizzo IP divulgato.