L'uscita VPC diretto fornisce una soluzione di rete ad alte prestazioni per il tuo servizio App Engine per inviare traffico a una rete Virtual Private Cloud (VPC). Il traffico VPC in uscita consente ai workload di accedere facilmente alle risorse di rete VPC e non è necessario configurare i connettori di accesso VPC serverless.
Vantaggi principali
- Gestione semplificata: elimina l'overhead operativo della gestione di istanze di connettori, tipi di macchine e impostazioni di scalabilità. App Engine
gestisce le configurazioni direttamente nel file
app.yamldel servizio. - Efficienza in termini di costi: l'utilizzo dell'uscita VPC diretto non comporta costi aggiuntivi e non devi pagare costi mensili fissi per le VM del connettore.
- Prestazioni e affidabilità migliorate: eliminando la necessità di utilizzare un connettore, l'uscita VPC diretta offre una connessione più veloce e affidabile alle risorse della rete VPC. Si adatta rapidamente al servizio App Engine ed evita 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, consentendo regole firewall e policy di rete precise e specifiche per il servizio.
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.
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:
Prima di iniziare
Assicurati di avere una rete VPC e una subnet esistenti nel tuo progetto. Se non hai già un VPC esistente, segui le istruzioni per crearne uno in Crea una rete VPC.
Abilita l'API Compute Engine e l'API Cloud Build:
Per utilizzare l'uscita VPC diretto, assicurati di eseguire la versione più recente 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 al service agent 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 Utente rete Compute: se non utilizzi il ruolo Agente di servizio App Engine predefinito o le autorizzazioni personalizzate, concedi il ruolo Utente rete Compute (
roles/compute.networkUser) all'account di servizio dell'agente di servizio App Engine. Le subnet con IPv6 esterno richiedono anche il ruolo Amministratore IP pubblico Compute (roles/compute.publicIpAdmin).Ad esempio, per concedere il ruolo Utente di rete Compute, esegui questo comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
Sostituisci quanto segue:
- PROJECT_ID: l'ID progetto.
- PROJECT_NUMBER: il numero di progetto in cui deploy il servizio App Engine.
Configura un servizio App Engine con l'uscita VPC diretta
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 per l'utilizzo nelle regole firewall e nelle policy di routing.
(Facoltativo) EGRESS_SETTING: controlla il routing del traffico in uscita. Questo campo supporta le seguenti impostazioni di configurazione:
all-traffic: tutte le richieste in uscita vengono instradate tramite la rete VPC.private-ranges-only(impostazione predefinita): solo il traffico verso indirizzi IP interni viene instradato tramite la rete VPC. Il traffico internet utilizza il percorso App Engine predefinito.
Esegui il deployment in App Engine eseguendo questo comando:
gcloud beta app deploy
Disconnettere un servizio
Per disconnettere il servizio dalla rete VPC:
Rimuovi la sezione
vpc_accessdal fileapp.yaml.Esegui nuovamente 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
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 lo scaling.Eseguire il provisioning eccessivo degli IP: ti consigliamo di eseguire il provisioning eccessivo del numero di IP disponibili nella subnet per evitare l'esaurimento. Analogamente ai servizi Cloud Run, in genere devi utilizzare un numero di IP quattro volte superiore (2X per lo stato stazionario e un ulteriore 2X durante il deployment) rispetto al numero di istanze in esecuzione per facilitare lo scaling e gli aggiornamenti senza problemi.
Risoluzione dei problemi
Questa sezione descrive gli errori comuni che potresti riscontrare durante il deployment del servizio App Engine con l'uscita VPC diretta.
Impossibile eliminare la subnet
Per eliminare una subnet, devi prima eliminare o rieseguire il deployment di tutte le risorse che la utilizzano. Se App Engine utilizza una subnet, disconnetti il servizio App Engine dalla rete VPC o spostalo in una subnet diversa prima di eliminare la subnet.
Dopo aver eliminato o spostato il servizio App Engine, attendi 1-2 ore prima che 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 scritto in modo errato nel file
app.yaml. Per correggere potenziali errori, rivedi 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 tua 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.
Perdite di indirizzi IP
Le perdite di indirizzi IP potrebbero portare all'esaurimento degli indirizzi IP. Le perdite di indirizzi IP sono improbabili durante le operazioni standard, ma potrebbero verificarsi per i seguenti motivi:
- L'account di servizio di deployment dispone solo delle autorizzazioni per riservare indirizzi (
create,createInternal) e non dispone delle autorizzazioni per rilasciare indirizzi (delete,deleteInternal). - Il account di servizio è stato eliminato mentre erano attive altre prenotazioni di indirizzi Google Cloud .
- L'account di fatturazione Cloud è stato rimosso e riattivato nel progetto mentre le prenotazioni di indirizzi serverless erano attive.
- Il tuo progetto Google Cloud è stato eliminato e poi ripristinato mentre le prenotazioni di indirizzi serverless esistevano ancora.
Per risolvere il problema, segui questi passaggi:
Esegui una query per i seguenti log in Esplora log per identificare gli indirizzi divulgati:
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 perdite 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 Service Agent App Engine (
roles/appengine.serviceAgent). Se non puoi utilizzare questo ruolo, assicurati di concedere altri ruoli e autorizzazioni richiesti al tuo account di servizio di deployment.Elimina manualmente gli indirizzi IP compromessi utilizzando la console Google Cloud o Google Cloud CLI:
Console
Vai alla pagina Indirizzi IP nella console Google Cloud :
Seleziona gli indirizzi IP compromessi che hai identificato nel passaggio precedente eseguendo la query.
Fai clic su Rilascia indirizzo statico per rimuovere gli indirizzi compromessi.
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 divulgato.
- REGION: la regione dell'indirizzo IP divulgato.