Esegui la migrazione di un dominio personalizzato App Engine a Cloud Load Balancing

Questa guida illustra come configurare un nuovo endpoint pubblico per la tua app App Engine utilizzando Cloud Load Balancing.

Con Cloud Load Balancing, configuri l'endpoint del dominio personalizzato come servizio di frontend e la tua app App Engine come servizio di backend utilizzando un gruppo di endpoint di rete serverless (NEG). Il traffico all'endpoint del servizio di frontend Cloud Load Balancing viene indirizzato come prima, comprese tutte le regole di routing che definisci nel file dispatch.yaml della tua app.

Il seguente diagramma descrive le modifiche apportate alla tua app:

Prendi un dominio personalizzato App Engine e sposta le richieste in entrata in un servizio frontend di Cloud Load Balancing che distribuisce le richieste al servizio App Engine di backend.

La migrazione a Cloud Load Balancing ti consente di gestire il traffico in modo molto più flessibile quando raggiungi il tuo dominio, ad esempio pubblicando contenuti statici da Cloud Storage o aggiungendo servizi in esecuzione su altre piattaforme di computing come Cloud Run e Google Kubernetes Engine.

Puoi inoltre accedere alle funzionalità chiave di Google Cloud che non sono disponibili su App Engine, tra cui:

  • Google Cloud Armor, per una maggiore sicurezza con protezione DDoS avanzata, controlli di accesso basati su IP e dati geografici, regole web application firewall e altro ancora
  • Cloud CDN, per la distribuzione di contenuti memorizzati nella cache
  • Criteri SSL, per gestire quali funzionalità SSL e versioni TLS verranno accettate dalla tua app

Questa guida illustra le istruzioni di configurazione per lo spostamento delle richieste in entrata dal servizio App Engine con un dominio personalizzato a un servizio di frontend Cloud Load Balancing:

  1. Assicurati di disporre delle autorizzazioni richieste
  2. Creare un certificato gestito da Google
  3. Configura Cloud Load Balancing
  4. Testa il bilanciatore del carico
  5. Collegare il dominio al bilanciatore del carico
  6. Elimina la mappatura dei domini personalizzati di App Engine
  7. Configura il controllo in entrata per consentire l'accesso solo tramite Cloud Load Balancing

Prima di iniziare

Avere un'app App Engine con un dominio personalizzato configurato nelle impostazioni di App Engine.

Configura le autorizzazioni

Per seguire questa guida, devi creare un certificato gestito da Google, un NEG serverless e un bilanciatore del carico HTTP(S) esterno in un progetto. Devi essere un proprietario o un editor del progetto oppure avere i seguenti ruoli IAM:

Attività Ruolo obbligatorio
Crea un certificato SSL gestito da Google utilizzando Gestione certificati Proprietario gestore certificati o Editor gestore certificati e Amministratore bilanciatore del carico Compute
Aggiorna i record DNS per il dominio personalizzato Amministratore Cloud DNS se utilizzi Cloud DNS come soluzione DNS.

Se utilizzi un altro provider DNS, avrai bisogno delle autorizzazioni per aggiungere e aggiornare i record DNS per il dominio personalizzato.
Crea componenti per il bilanciamento del carico e il networking Amministratore rete Compute
Creare e modificare i NEG Amministratore istanze Compute
Crea e modifica i certificati SSL Amministratore sicurezza Compute
Elimina domini personalizzati nelle impostazioni di App Engine Ruolo Amministratore di App Engine o un ruolo che contiene l'autorizzazione appengine.applications.update.

Creare un certificato SSL gestito da Google

Un certificato SSL gestito da Google (noto anche come certificato TLS nella documentazione) consente a Google Cloud di ottenere, gestire e rinnovare automaticamente i certificati. Per eseguire la migrazione al frontend di Cloud Load Balancing senza causare tempi di inattività per il servizio App Engine esistente, devi utilizzare Gestore certificati per creare l'autorizzazione DNS e il tuo certificato gestito da Google.

Tieni presente che la documentazione di Cloud Load Balancing ha istruzioni simili per la creazione di un certificato SSL gestito da Google, ma le istruzioni lì utilizzate utilizzano l'autorizzazione del bilanciatore del carico, che richiede un tempo di inattività per il servizio App Engine che può durare anche diverse ore. Per maggiori informazioni, consulta Autorizzazione di dominio per i certificati gestiti da Google.

Per evitare tempi di inattività per la tua app, segui i passaggi riportati in questa pagina.

Crea autorizzazione DNS

  1. Crea l'autorizzazione DNS in Gestore certificati eseguendo i seguenti comandi:

    gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
        --domain="DOMAIN_NAME"
    gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
    

    Sostituisci quanto segue:

    • AUTHORIZATION_NAME è un nome univoco che descrive questa autorizzazione DNS.
    • DOMAIN_NAME è il nome di dominio personalizzato di App Engine per il quale stai creando questa autorizzazione DNS.
  2. Prendi nota del CNAME restituito dal comando gcloud. Devi utilizzarlo per aggiornare il record DNS nei seguenti passaggi.

Aggiungi il record CNAME alla configurazione DNS

A seconda che utilizzi Cloud DNS o un'altra soluzione DNS di terze parti, segui le istruzioni appropriate per il tuo caso d'uso:

Cloud DNS

Quando crei un'autorizzazione DNS, il comando gcloud restituisce il record CNAME corrispondente. Devi aggiungere questo record CNAME alla configurazione DNS nella zona DNS del dominio di destinazione come segue:

  1. Avvia la transazione del record DNS:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    Sostituisci DNS_ZONE_NAME con il nome della zona DNS pubblica. Se utilizzi Google Cloud per gestire il tuo dominio e ricevere traffico verso tale dominio, hai già creato una zona DNS pubblica. Per visualizzare la zona DNS pubblica, consulta Elencare e descrivere le zone gestite.

  2. Aggiungi il record CNAME alla zona DNS di destinazione:

    gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"
    

    Sostituisci quanto segue:

    • CNAME_RECORD è il valore completo del record CNAME restituito dal comando gcloud che ha creato l'autorizzazione DNS corrispondente.
    • DOMAIN_NAME è il nome di dominio personalizzato di App Engine. Devi includere il punto finale dopo il nome di dominio di destinazione.
    • DNS_ZONE_NAME è il nome della zona DNS di destinazione di prima.
  3. Esegui la transazione del record DNS per salvare le modifiche:

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    Sostituisci DNS_ZONE_NAME con il nome della zona DNS target precedente.

Altra soluzione DNS

Aggiungi un record CNAME alla configurazione DNS per il tuo dominio, utilizzando il nome (host) (_acme-challenge.DOMAIN_NAME) e i campi di dati della sezione precedente. Consulta la documentazione della soluzione DNS di terze parti.

Creare un certificato gestito da Google che faccia riferimento all'autorizzazione DNS

Per creare un certificato gestito da Google che faccia riferimento all'autorizzazione DNS creata nei passaggi precedenti, esegui questi comandi:

  1. Crea un certificato gestito da Google:

    gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME
    

    Sostituisci quanto segue:

    • CERTIFICATE_NAME è un nome univoco che descrive il certificato.
    • DOMAIN_NAME è il nome di dominio personalizzato di App Engine.
    • AUTHORIZATION_NAME è il nome dell'autorizzazione DNS creata in precedenza.
  2. Verifica che il certificato sia attivo.

    Utilizza il comando seguente per verificare che il certificato stesso sia attivo prima di eseguirne il deployment nel bilanciatore del carico. Tieni presente che possono trascorrere fino a diverse ore prima che lo stato del certificato diventi ACTIVE.

    gcloud certificate-manager certificates describe CERTIFICATE_NAME
    

    Sostituisci CERTIFICATE_NAME con il nome del certificato gestito da Google creato in precedenza.

    Lo strumento gcloud restituisce un output simile al seguente:

    certificatePem: myPEM
    createTime: '2021-10-20T12:19:53.370778666Z'
    expireTime: '2022-05-07T05:03:49Z'
    managed:
      authorizationAttemptInfo:
      - domain: example.com
        state: AUTHORIZED
      dnsAuthorizations:
      - projects/my-project/locations/global/dnsAuthorizations/myAuth
      domains:
      - example.com
      state: ACTIVE
    name: projects/myProject/locations/global/certificates/myCert
    scope: myScope
    sanDnsnames:
    - example.com
    updateTime: '2021-10-20T12:19:55.083385630Z'
    

    Se lo strumento gcloud restituisce un output diverso, consulta la sezione Risoluzione dei problemi di Gestore certificati.

Crea una mappa dei certificati

  1. Crea una mappa certificato:

    gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
    

    Sostituisci CERTIFICATE_MAP_NAME con un nome univoco che descrive la mappa dei certificati.

  2. Crea una voce della mappa dei certificati e associala al certificato e alla mappa dei certificati precedenti:

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME \
        --certificates=CERTIFICATE_NAME \
        --set-primary
    

    Sostituisci quanto segue:

    • CERTIFICATE_MAP_ENTRY_NAME è un nome univoco che descrive questa voce della mappa dei certificati.
    • CERTIFICATE_MAP_NAME è il nome della mappa dei certificati a cui rimanda questa voce della mappa dei certificati.
    • CERTIFICATE_NAME è il nome del certificato che vuoi associare a questa voce della mappa dei certificati.

    Puoi aggiungere il flag --set-primary per assicurarti che il certificato venga utilizzato come certificato predefinito se non viene specificato un nome di dominio.

  3. Verifica che la mappa dei certificati sia attiva.

    Utilizza il comando seguente per verificare che la voce della mappa dei certificati sia attiva prima di collegare la mappa dei certificati corrispondente al proxy di destinazione:

    gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME
    

    Sostituisci quanto segue:

    • CERTIFICATE_MAP_ENTRY_NAME è il nome della voce della mappa del certificato rilasciato in precedenza.
    • CERTIFICATE_MAP_NAME è il nome della mappa del certificato a cui rimanda questa voce della mappa dei certificati.

    Lo strumento gcloud restituisce un output simile al seguente:

    createTime: '2021-09-06T10:01:56.229472109Z'
    name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
    state: ACTIVE
    updateTime: '2021-09-06T10:01:58.277031787Z'
    

Per ulteriori informazioni sull'utilizzo di Gestore certificati, consulta Come funziona Gestore certificati.

Configura Cloud Load Balancing

Dopo aver ottenuto un certificato gestito da Google, puoi sostituire il tuo dominio personalizzato App Engine con un servizio di frontend Cloud Load Balancing.

Il seguente diagramma mostra un bilanciatore del carico HTTPS con un singolo servizio di backend e NEG serverless.

Distribuzione del traffico verso un'app App Engine

Le regole di forwarding instradano le richieste in entrata da indirizzi IP esterni e le richieste dirette al proxy HTTPS di destinazione. I bilanciatori del carico HTTPS utilizzano le mappe URL per indirizzare le richieste al servizio di backend, che contengono un NEG serverless per il servizio App Engine.

Prenotare un indirizzo IP esterno

Prima di configurare Cloud Load Balancing, devi configurare un indirizzo IP esterno statico e globale per consentire agli utenti di raggiungere il bilanciatore del carico.

Console

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

    Vai a Indirizzi IP esterni

  2. Fai clic su Prenota indirizzo statico per prenotare un indirizzo IPv4.

  3. Assegna un nome all'indirizzo statico, ad esempio appengine-external-ip.

  4. Imposta il livello di rete su Premium.

  5. Imposta la versione IP su IPv4.

  6. Imposta il Tipo su Globale.

  7. Fai clic su Prenota.

gcloud

  1. Crea prenotazione indirizzo IP esterno:

    gcloud compute addresses create EXTERNAL_IP \
        --network-tier=PREMIUM \
        --ip-version=IPV4 \
        --global
    

    EXTERNAL_IP è il nome degli indirizzi da creare.

  2. Prendi nota dell'indirizzo IPv4 riservato:

    gcloud compute addresses describe EXTERNAL_IP \
        --format="get(address)" \
        --global
    

Configura il servizio di backend per App Engine

Un gruppo di endpoint di rete (NEG) viene utilizzato per specificare un gruppo di endpoint di backend per un bilanciatore del carico. Per specificare un backend che punta a un servizio App Engine, configura il NEG serverless, quindi configura il servizio di backend, le regole di routing e il servizio di frontend in Cloud Load Balancing.

  1. Crea un NEG serverless per l'app App Engine.

    gcloud compute network-endpoint-groups create APP_ENGINE_NEG \
    --network-endpoint-type=serverless \
    --app-engine-app \
    --region=APP_ENGINE_REGION
    

    Sostituisci quanto segue:

    • APP_ENGINE_NEG è il nome del gruppo di endpoint di rete.
    • APP_ENGINE_REGION è l'area geografica impostata in App Engine.

    Puoi aggiungere il flag --app-engine-app riportato sopra per utilizzare il routing predefinito, invece di indirizzare a un servizio App Engine specifico. Se utilizzi il routing predefinito, le richieste verranno inviate al servizio predefinito (https://PROJECT_ID.REGION_ID.r.appspot.com) e tutte le regole di routing che definisci nel file dispatch.yaml verranno seguite. Si tratta dello stesso comportamento dei domini personalizzati configurati utilizzando App Engine.

  2. Crea il servizio di backend:

    gcloud compute backend-services create APP_ENGINE_BACKEND \
      --global \
      --load-balancing-scheme=EXTERNAL_MANAGED
    

    Sostituisci APP_ENGINE_BACKEND con il nome del servizio di backend da creare.

  3. Aggiungi il NEG serverless al servizio di backend App Engine:

    gcloud compute backend-services add-backend APP_ENGINE_BACKEND \
    --global --network-endpoint-group=APP_ENGINE_NEG \
    --network-endpoint-group-region=APP_ENGINE_REGION
    

    Sostituisci quanto segue:

    • APP_ENGINE_BACKEND è il nome del servizio di backend precedente.
    • APP_ENGINE_NEG è il nome del gruppo di endpoint di rete.
    • APP_ENGINE_REGION è la regione impostata in App Engine.
  4. Crea una mappa URL per instradare le richieste in entrata al servizio di backend:

    gcloud compute url-maps create URL_MAP_NAME \
          --default-service APP_ENGINE_BACKEND
    

    Sostituisci quanto segue:

    • URL_MAP_NAME è un nome univoco per la risorsa mappa URL che definisce la mappatura degli URL ai servizi di backend.
    • APP_ENGINE_BACKEND è il nome del servizio di backend precedente.
  5. Crea un proxy HTTPS di destinazione per instradare le richieste alla tua mappa URL:

    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --certificate-map=CERTIFICATE_MAP_NAME \
          --url-map=URL_MAP_NAME
    

    Sostituisci quanto segue:

    • TARGET_HTTPS_PROXY_NAME è un nome univoco che scegli per descrivere il tuo proxy HTTPS.
    • CERTIFICATE_MAP_NAME è il nome della mappa del certificato che fa riferimento alla voce della mappa del certificato e al certificato associato.
    • URL_MAP_NAME è il nome della mappa URL precedente.
  6. Crea una regola di forwarding per instradare le richieste in entrata al proxy:

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --network-tier=PREMIUM \
          --address=EXTERNAL_IP \
          --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
          --global \
          --ports=443
    

    Sostituisci quanto segue:

    • HTTPS_FORWARDING_RULE_NAME è un nome univoco che descrive la regola di forwarding per indirizzare il traffico di rete al proxy HTTPS.
    • TARGET_HTTPS_PROXY_NAME è un nome del proxy HTTPS creato in precedenza.
    • EXTERNAL_IP è il nome dell'indirizzo IPv4 creato in precedenza.

Testa il bilanciatore del carico

Ora che hai configurato il bilanciatore del carico, puoi iniziare a inviare traffico all'indirizzo IP del bilanciatore per eseguire il test prima di eseguire la migrazione del dominio.

  1. Vai alla pagina Bilanciamento del carico nella console Google Cloud.
    Vai a Bilanciamento del carico
  2. Fai clic sul bilanciatore del carico appena creato.
  3. Prendi nota dell'indirizzo IP del bilanciatore del carico.
  4. Per un bilanciatore del carico HTTPS, puoi testare il bilanciatore del carico utilizzando un browser web visitando la pagina https://IP_ADDRESS. Sostituisci IP_ADDRESS con l'indirizzo IP del bilanciatore del carico, ad esempio 30.90.80.100.

    • Se il problema persiste e utilizzi un certificato gestito da Google, verifica che il tuo certificato sia ACTIVE e che la mappa del certificato sia ACTIVE.
    • Se utilizzi un certificato autofirmato per il test, il browser mostra un avviso. Devi chiedere esplicitamente al browser di accettare un certificato autofirmato. Fai clic sull'avviso per visualizzare la pagina effettiva.

    Per ulteriori opzioni di configurazione, consulta la pagina Configurare un bilanciatore del carico HTTP(S) esterno globale con piattaforme serverless.

Collegare il dominio al bilanciatore del carico

Dopo aver creato il bilanciatore del carico, prendi nota dell'indirizzo IP associato al bilanciatore del carico, ad esempio 30.90.80.100. Per indirizzare il tuo dominio al bilanciatore del carico, crea un record A utilizzando il servizio di registrazione del dominio. Se hai aggiunto più domini al certificato SSL, devi aggiungere un record A per ciascuno, indirizzando tutti all'indirizzo IP del bilanciatore del carico. Ad esempio, per creare record A per www.example.com e example.com, utilizza quanto segue:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Se utilizzi Google Domains, visita la Guida di Google Domains per ulteriori informazioni.

Elimina la mappatura dei domini personalizzati di App Engine

Nella console Google Cloud:

  1. Vai alla scheda Domini personalizzati della pagina Impostazioni di App Engine.

    Vai a Domini personalizzati

  2. Seleziona il nome di dominio personalizzato e fai clic su Elimina.

In alternativa, puoi utilizzare i comandi gcloud o l'API amministrativa per eliminare il dominio personalizzato.

Configura il controllo in entrata per consentire l'accesso solo tramite Cloud Load Balancing

Dopo aver testato il bilanciatore del carico, ti consigliamo di aggiornare l'app App Engine per accettare il traffico solo da Cloud Load Balancing. Per scoprire come configurare i controlli di Ingress internal-and-cloud-load-balancing, consulta Impostazioni di Ingress.