VPC diretto in uscita

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.yaml del 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:

  • RFC 1918
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • RFC 6598
    • 100.64.0.0/10
  • Classe E
    • 240.0.0.0/4

Prima di iniziare

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

  2. Abilita l'API Compute Engine e l'API Cloud Build:

    Abilita le API

  3. 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.get
    • compute.subnetworks.get
    • compute.subnetworks.use sul progetto o sulla subnet specifica
    • compute.addresses.get
    • compute.addresses.list
    • compute.addresses.create
    • compute.addresses.delete
    • compute.addresses.createInternal
    • compute.addresses.deleteInternal
    • compute.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:

  1. Aggiungi la seguente impostazione vpc_access al file app.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.
  2. Esegui il deployment in App Engine eseguendo questo comando:

    gcloud beta app deploy

Disconnettere un servizio

Per disconnettere il servizio dalla rete VPC:

  1. Rimuovi la sezione vpc_access dal file app.yaml.

  2. 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 /26 o 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 file app.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:

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:

  1. 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>=WARNING
    

    Se questa query non restituisce risultati, non ci sono perdite di indirizzi IP e non sono necessarie ulteriori azioni.

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

  3. Elimina manualmente gli indirizzi IP compromessi utilizzando la console Google Cloud o Google Cloud CLI:

    Console

    1. Vai alla pagina Indirizzi IP nella console Google Cloud :

      Vai a indirizzi IP

    2. Seleziona gli indirizzi IP compromessi che hai identificato nel passaggio precedente eseguendo la query.

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