Introduzione al bilanciamento del carico HTTP(S) per API Gateway

Questo tutorial mostra come creare un bilanciatore del carico HTTP(S) esterno di Google Cloud per instradare le richieste ad API Gateway. Il processo di configurazione segue gli stessi passaggi utilizzati per configurare l'integrazione di Cloud Load Balancing con altri prodotti serverless come Cloud Run, Cloud Functions e App Engine.

Sebbene non sia necessario un bilanciatore del carico per il funzionamento di API Gateway, consente al gateway di sfruttare diversi vantaggi di Cloud Load Balancing. Ad esempio, l'utilizzo di Cloud Load Balancing con API Gateway ti consente di:

  • Utilizzare domini personalizzati.
  • Sfrutta Google Cloud Armor come servizio di sicurezza di rete.
  • Gestisci il bilanciamento del carico in modo efficiente tra gateway in più località.
  • Implementa la gestione avanzata del traffico.

Prima di iniziare

  1. Se non lo hai già fatto, scarica e installa Google Cloud CLI.

    Scarica gcloud CLI

  2. Aggiorna gcloudcomponenti:

    gcloud components update
  3. Segui la guida rapida del gateway API per eseguire il deployment di un servizio Cloud Run e creare un gateway che rimandi a quel servizio.

  4. Configura le autorizzazioni.

  5. Aggiungi una risorsa del certificato SSL.

Esegui il deployment di un servizio Cloud Run e di un'istanza API Gateway

In questo tutorial, eseguirai il deployment di un servizio "hello-world" in Cloud Run, creerai un gateway che instrada al servizio Cloud Run e configurerai un bilanciatore del carico HTTP(S) per instradare le richieste a un dominio personalizzato.

Sebbene questo tutorial utilizzi Cloud Run come servizio di backend per API Gateway, questi passaggi si applicano anche a qualsiasi servizio di backend supportato da API Gateway.

Una volta completata correttamente la guida rapida di API Gateway, dovresti aver eseguito il deployment di un URL gateway che punta al servizio Cloud Run.

Configura le autorizzazioni

In questo tutorial, creerai un gruppo di endpoint di rete (NEG) serverless e creerai un bilanciatore del carico HTTP(S) esterno in un progetto Cloud. Ciò richiede un ruolo di proprietario o editor del progetto oppure i seguenti ruoli IAM di Compute Engine:

Attività Ruolo richiesto
Crea componenti di networking e del bilanciatore del carico Amministratore di rete
Creare e modificare NEG Amministratore istanze Compute
Crea e modifica i certificati SSL Amministratore sicurezza

Creazione di una risorsa del certificato SSL

Per creare un bilanciatore del carico HTTP(S), è necessario aggiungere una risorsa del certificato SSL al front-end del bilanciatore del carico. Crea una risorsa del certificato SSL utilizzando un certificato SSL gestito da Google o un certificato SSL autogestito.

  • Certificati gestiti da Google. È consigliabile utilizzare certificati gestiti da Google perché Google Cloud li recupera, gestisce e rinnova automaticamente. Per creare un certificato gestito da Google, devi disporre di un dominio e dei record DNS per quel dominio affinché venga eseguito il provisioning del certificato. Se non hai ancora un dominio, puoi riceverne uno da Google Domains. Inoltre, dovrai aggiornare il record A DNS del dominio in modo che rimandi all'indirizzo IP del bilanciatore del carico creato in un passaggio successivo. Per istruzioni dettagliate, consulta Utilizzo dei certificati gestiti da Google.

  • Certificati autofirmati. Se al momento non vuoi configurare un dominio, puoi utilizzare un certificato SSL autofirmato per i test.

Questo tutorial presuppone che tu abbia già creato una risorsa del certificato SSL.

Se vuoi testare questo processo senza creare una risorsa del certificato SSL (o un dominio come richiesto dai certificati gestiti da Google), puoi comunque utilizzare le istruzioni in questa pagina per configurare un bilanciatore del carico HTTP.

Crea il bilanciatore del carico HTTP(S)

  1. Crea un NEG serverless per API Gateway.

    Un gruppo di endpoint di rete (NEG) specifica un gruppo di endpoint di backend per un bilanciatore del carico. Un NEG serverless è un backend che punta a un servizio come API Gateway, come mostrato nella figura seguente:

    diagramma del backend serverless neg as per i gateway multiregionali

    Per creare un NEG serverless per il gateway, esegui questo comando, dove:

    • SERVERLESS_NEG_NAME è il nome del NEG serverless da creare.
    • GATEWAY_ID specifica il nome del gateway.
    • REGION_ID è la regione di deployment per il NEG serverless (deve corrispondere alla regione del gateway).
    gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \
      --region=REGION_ID \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=GATEWAY_ID

    Ad esempio:

    gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg \
      --region=us-central1 \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=my-gateway
  2. Crea un servizio di backend per definire in che modo Cloud Load Balancing distribuisce il traffico.

    La configurazione del servizio di backend contiene un insieme di valori, come il protocollo utilizzato per connettersi ai backend, varie impostazioni di distribuzione e sessione, controlli di integrità e timeout, come mostrato nella figura seguente:

    diagramma del neg serverless come backend per un servizio di backend

    Per creare un servizio di backend, esegui questo comando:

    gcloud compute backend-services create BACKEND_SERVICE_NAME --global

    dove BACKEND_SERVICE_NAME è il nome del nuovo servizio di backend.

    Ad esempio:

    gcloud compute backend-services create api-gateway-backend-service --global

    Per aggiungere il NEG serverless come backend al servizio di backend, esegui questo comando, dove:

    • BACKEND_SERVICE_NAME è il nome del tuo servizio di backend.
    • SERVERLESS_NEG_NAME è il nome del NEG serverless creato nel passaggio precedente.
    • REGION_ID è la regione di deployment per il NEG serverless (deve corrispondere alla regione del gateway).
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --global \
      --network-endpoint-group=SERVERLESS_NEG_NAME \
      --network-endpoint-group-region=REGION_ID

    Ad esempio:

    gcloud compute backend-services add-backend api-gateway-backend-service \
      --global \
      --network-endpoint-group=api-gateway-serverless-neg \
      --network-endpoint-group-region=us-central1
  3. Crea una mappa URL per instradare le richieste in entrata al servizio di backend, come mostrato nella figura seguente:

    diagramma della mappa URL al servizio di backend

    Per creare la mappa URL, esegui questo comando, dove:

    • URL_MAP_NAME è il nome della mappa URL da creare.
    • BACKEND_SERVICE_NAME è il nome del tuo servizio di backend.
    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME

    Ad esempio:

    gcloud compute url-maps create api-gateway-url-map \
      --default-service api-gateway-backend-service

    La mappa URL di esempio ha come target un solo servizio di backend che rappresenta un singolo gateway, quindi non sono necessarie regole host o matcher del percorso. Se hai più di un servizio di backend, puoi utilizzare le regole dell'host per indirizzare le richieste a servizi diversi in base al nome host. Utilizza i matcher percorso per indirizzare le richieste a servizi diversi in base al percorso della richiesta.

    Ad esempio:

    gcloud compute url-maps add-path-matcher api-gateway-url-map \
      --path-matcher-name=my-pm2  \
      --default-service=my-host-default-backend \
      --path-rules="/video=video-service,/video/*=video-service" \
      --new-hosts my-hosts.com
    gcloud compute url-maps add-host-rule api-gateway-url-map \
      --hosts=my-app-domain \
      --path-matcher-name=my-app-path-matcher

    Per scoprire di più sulle regole host e sui matcher percorso, consulta la documentazione sulla mappa URL.

  4. Crea un certificato SSL per il proxy di destinazione, come illustrato nella figura seguente:

    diagramma del certificato SSL per il proxy di destinazione

    Per creare un bilanciatore del carico HTTP(S), è necessaria una risorsa del certificato SSL per il proxy di destinazione HTTP(S). Puoi creare una risorsa del certificato SSL utilizzando un certificato SSL gestito da Google o un certificato SSL autogestito. È consigliabile utilizzare certificati gestiti da Google. Se stai testando questo processo senza una risorsa del certificato SSL e vuoi configurare un bilanciatore del carico HTTP, puoi saltare questo passaggio.

    Per creare un certificato gestito da Google, devi avere un dominio. Se non hai un dominio, puoi utilizzare un certificato SSL autofirmato per i test.

    Per creare una risorsa del certificato SSL gestito da Google:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --domains DOMAIN

    Per creare una risorsa del certificato SSL autogestito:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate CRT_FILE_PATH \
      --private-key KEY_FILE_PATH
  5. Crea un proxy HTTP(S) di destinazione per instradare le richieste alla mappa URL, come mostrato nella figura seguente:

    diagramma della mappa del proxy HTTP all'URL

    Per creare il proxy di destinazione, utilizza il comando seguente, dove:

    • TARGET_HTTPS_PROXY_NAME è il nome del proxy HTTP(S) di destinazione da creare.
    • URL_MAP_NAME è il nome della mappa URL creata in un passaggio precedente.
    • (Facoltativo) SSL_CERT_NAME è il nome del certificato SSL creato.
    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
      --ssl-certificates=SSL_CERT_NAME \
      --url-map=URL_MAP_NAME

    Ad esempio:

    gcloud compute target-https-proxies create api-gateway-https-proxy \
      --ssl-certificates=hello-cert \
      --url-map=api-gateway-url-map

    Come indicato sopra, puoi creare un bilanciatore del carico HTTP senza creare una risorsa del certificato SSL. Per farlo, utilizza il seguente comando:

    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME

    Ad esempio:

    gcloud compute target-http-proxies create api-gateway-http-proxy \
      --url-map=api-gateway-url-map

    I comandi successivi per i proxy HTTP devono essere modificati per supportare il flag --target-http-proxy e il tuo TARGET_HTTP_PROXY_NAME per le relative controparti HTTP(S).

  6. Crea una regola di forwarding per instradare le richieste in arrivo al proxy, come mostrato nella figura seguente:

    diagramma della regola di forwarding al proxy HTTP

    Utilizza il seguente comando per creare la regola di forwarding, dove:

    • HTTPS_FORWARDING_RULE_NAME è il nome della regola da creare.
    • TARGET_HTTPS_PROXY_NAME è il nome del proxy di destinazione HTTP(S).
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
      --global \
      --ports=443

    Ad esempio:

    gcloud compute forwarding-rules create my-fw \
      --target-https-proxy=api-gateway-https-proxy \
      --global \
      --ports=443

Aggiorna i record DNS con l'indirizzo IP del bilanciatore del carico

Se hai un dominio personalizzato, questo passaggio è necessario per configurare le impostazioni DNS del dominio in modo che rimandino al nuovo indirizzo IP del servizio. È necessaria anche se hai creato un bilanciatore del carico HTTP(S) con un certificato gestito da Google (che richiede un dominio). L'allocazione e l'utilizzo di un indirizzo IP statico sono consigliati se utilizzati con il DNS. Le istruzioni specifiche per questo passaggio dipendono dal tuo provider DNS.

  1. Per inviare traffico al bilanciatore del carico, il record DNS del tuo dominio (in questo tutorial, my-app-domain) deve puntare agli indirizzi IP del bilanciatore del carico.

    Per trovare l'indirizzo IP della regola di forwarding globale, utilizza questo comando:

    gcloud compute forwarding-rules list
  2. Aggiorna il record DNS A o AAAA del tuo dominio in modo che rimandi all'indirizzo IP del bilanciatore del carico, in modo che il traffico inviato all'URL del dominio personalizzato esistente venga instradato attraverso il bilanciatore del carico. Potrebbero essere necessari alcuni secondi o diverse ore prima che il DNS propaghi questa modifica al server DNS.

  3. Verifica che il gateway riceva traffico utilizzando curl o visitando l'URL nel browser. Ad esempio: https://my-app-domain

    Al momento del test, dovresti vedere la risposta generata dal servizio Cloud Run. Potrebbe trattarsi, ad esempio, di una pagina HTML "Hello World" o di un'altra risposta prevista generata direttamente dal servizio di backend. Questo significa che la richiesta passa attraverso il bilanciatore del carico e il servizio di backend sta indicando a quest'ultimo di inviarla al gateway.

Testa la configurazione del bilanciatore del carico

Ora che hai configurato il bilanciatore del carico, puoi iniziare a inviare traffico all'indirizzo IP della regola di forwarding.

Per trovare l'indirizzo IP della regola di forwarding globale, utilizza il comando seguente:

gcloud compute forwarding-rules list

Utilizza il comando curl per testare la risposta di vari URL per i tuoi servizi. Ad esempio:

curl https://HOST_URL/hello/
curl https://HOST_URL

Puoi utilizzare la console Cloud del gateway dell'API per verificare che le richieste raggiungano i servizi corretti.

Complimenti! Hai configurato il bilanciamento del carico HTTP(S) per API GatewayANTEPRIMA.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa guida rapida, puoi eliminare le risorse di Cloud Load Balancing che hai creato. Se queste risorse sono state create all'interno del proprio progetto, puoi eliminare l'intero progetto. In caso contrario, puoi eliminare le risorse singolarmente.

Elimina il progetto

Esegui questo comando, sostituendo PROJECT_ID con l'ID progetto:

gcloud projects delete PROJECT_ID

Elimina singole risorse

Elimina ciascun componente nel bilanciatore del carico:

  1. Elimina le regole di forwarding:

    gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
  2. Elimina gli indirizzi IP esterni globali:

    gcloud compute addresses delete IP_ADDRESSES --global
  3. Elimina il proxy di destinazione:

    gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
  4. Elimina la mappa URL:

    gcloud compute url-maps delete URL_MAP_NAME
  5. Elimina i servizi di backend:

    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
  6. (Facoltativo) Elimina il certificato SSL:

    gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME

Elimina il NEG serverless:

gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION