Introduzione al bilanciamento del carico per API Gateway
Questo tutorial mostra come creare un bilanciatore del carico delle applicazioni esterno globale per inoltrare le richieste ad API Gateway. Il processo di configurazione segue gli stessi passaggi utilizzati per configurare l'integrazione del bilanciatore del carico delle applicazioni esterno globale con altri prodotti serverless come Cloud Run, Funzioni di Cloud Run e App Engine.
Sebbene un bilanciatore del carico non sia necessario per il funzionamento di API Gateway, consente al tuo gateway di sfruttare i vantaggi di un bilanciatore del carico. Ad esempio, l'utilizzo di un bilanciatore del carico delle applicazioni esterno globale con API Gateway ti consente di:
- Utilizza domini personalizzati.
- Utilizza Google Cloud Armor come servizio di sicurezza di rete.
- Gestisci un bilanciamento del carico efficiente tra i gateway in più località.
- Implementa la gestione avanzata del traffico.
Prima di iniziare
Se non l'hai ancora fatto, scarica e installa Google Cloud CLI.
Aggiorna i componenti
gcloud
:gcloud components update
Segui la guida rapida di API Gateway per eseguire il deployment di un servizio Cloud Run e creare un gateway che punti a quel servizio.
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 le richieste al servizio Cloud Run e configurerai un bilanciatore del carico delle applicazioni esterno globale per instradare le richieste a un dominio personalizzato.
Anche se in questo tutorial viene utilizzato Cloud Run come servizio di backend per API Gateway, questi passaggi si applicano anche a qualsiasi servizio di backend supportato da API Gateway.
Dopo aver completato la guida rapida di API Gateway, dovresti avere un URL del gateway di cui è stato eseguito il deployment che punta al servizio Cloud Run.
Configura autorizzazioni
In questo tutorial, creerai un gruppo di endpoint di rete (NEG) serverless e un bilanciatore del carico delle applicazioni esterno globale in un progetto Cloud. È necessario che sia il proprietario o il Editor o il seguente Ruoli IAM di Compute Engine:
Attività | Ruolo richiesto |
---|---|
Crea bilanciatori del carico e componenti di rete | Amministratore rete |
Creare e modificare i NEG | Amministratore istanze Compute |
Crea e modifica i certificati SSL | Amministratore della sicurezza |
Crea una risorsa del certificato SSL
Per creare un bilanciatore del carico delle applicazioni esterno globale, è necessario aggiungere una risorsa del certificato SSL al frontend del bilanciatore del carico. Crea una risorsa del certificato SSL utilizzando un certificato SSL gestito da Google o un certificato SSL con gestione indipendente.
Certificati gestiti da Google. Ti consigliamo di utilizzare i certificati gestiti da Google perché Google Cloud li ottiene, li gestisce e li rinnova automaticamente. Per creare un certificato gestito da Google, devi avere un dominio e i relativi record DNS per poter del certificato di cui eseguire il provisioning. Se non hai ancora un dominio, puoi acquistarne uno da Google Domains. Inoltre, dovrai aggiornare il record DNS A del dominio in modo che indichi l'indirizzo IP del bilanciatore del carico creato in un passaggio successivo. Per istruzioni dettagliate, vedi Utilizzare i 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 questa procedura senza creare una risorsa del certificato SSL (o un dominio come richiesto dai certificati gestiti da Google), puoi comunque utilizzare le istruzioni riportate in questa pagina per configurare un bilanciatore del carico HTTP.
Crea il bilanciatore del carico delle applicazioni esterno globale
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:
Per creare un NEG serverless per il gateway, esegui il seguente 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
Crea un servizio di backend per definire la modalità di distribuzione del traffico da parte dell'Application Load Balancer esterno globale.
La configurazione del servizio di backend contiene un insieme di valori, come il protocollo utilizzato per la connessione ai backend, varie impostazioni di distribuzione e sessione, controlli di integrità e timeout, come illustrato nella figura seguente:
Per creare un servizio di backend, esegui il seguente 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 tuo 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 gruppo di elenchi di negazioni serverless creato nel passaggio precedente.
- REGION_ID è la regione di deployment del 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
Crea una mappa URL per instradare le richieste in entrata al servizio di backend, come mostrato nella figura seguente:
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
Questa mappa di URL di esempio ha come target un solo servizio di backend che rappresenta un singolo gateway, quindi non sono necessarie regole host o matcher di percorso. Se hai più di un servizio di backend, puoi utilizzare le regole host per indirizzare le richieste a servizi diversi in base al nome host. Utilizza i matcher di 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 corrispondenti dei percorsi, consulta la documentazione della mappa URL.
Crea un certificato SSL per il proxy di destinazione, come illustrato nella figura seguente:
Per creare un bilanciatore del carico delle applicazioni esterno globale, è necessaria una risorsa certificato SSL per il proxy di destinazione HTTP(S). Puoi creare un protocollo SSL di certificazione utilizzando un certificato SSL gestito da Google o un certificato SSL autogestito. Ti consigliamo di utilizzare i certificati gestiti da Google. Se stai testando questa procedura senza una risorsa di 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 autogestita:
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
Crea un proxy HTTP(S) di destinazione per instradare le richieste alla mappa URL, come come mostrato nella figura seguente:
Per creare il proxy target, utilizza il seguente comando, in cui:
- 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 in precedenza, 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 parametro TARGET_HTTP_PROXY_NAME per le relative controparti HTTP(S).Crea una regola di forwarding per instradare le richieste in entrata al proxy, come illustrato nella figura seguente:
Utilizza il seguente comando per creare la regola di inoltro, 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 in modo che il dominio indichi il nuovo indirizzo IP del servizio. È necessaria anche se hai creato un bilanciatore del carico delle applicazioni esterno globale con un certificato gestito da Google (che richiede un dominio). Si consiglia di allocare e utilizzare un indirizzo IP statico se utilizzato con il DNS. Le istruzioni specifiche per questo passaggio dipendono dal tuo provider DNS.
Per inviare il 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 inoltro globale, utilizza questo comando:
gcloud compute forwarding-rules list
Aggiorna il record DNS A o AAAA del dominio in modo che punti all'indirizzo IP del bilanciatore del carico, in modo che il traffico inviato all'URL del dominio personalizzato esistente venga instradato tramite il bilanciatore del carico. La propagazione di questa modifica al server DNS potrebbe richiedere da alcuni secondi a diverse ore.
Verifica che il gateway riceva traffico utilizzando
curl
o visitando l'URL nel browser. Ad esempio:https://my-app-domain
Dopo il test, dovresti vedere la risposta generata dal servizio Cloud Run. Ad esempio, potrebbe trattarsi di una pagina HTML "Hello World" o di un'altra risposta prevista generata direttamente dal servizio di backend. Ciò significa che la richiesta passa attraverso il bilanciatore del carico e il servizio di backend indica al bilanciatore del carico 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 seguente comando:
gcloud compute forwarding-rules list
Utilizza il comando curl per testare la risposta per vari URL dei tuoi servizi. Ad esempio:
curl https://HOST_URL/hello/
curl https://HOST_URL
Puoi utilizzare la console Cloud di API Gateway per verificare che le richieste stiano raggiungendo i servizi corretti.
Complimenti! Hai configurato correttamente il bilanciatore del carico delle applicazioni esterno globale per API GatewayPREVIEW.
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 loro progetto, puoi eliminare l'intero progetto. In caso contrario, puoi eliminare le risorse singolarmente.
Elimina il progetto
Esegui questo comando, sostituendo PROJECT_ID con il tuo ID progetto:
gcloud projects delete PROJECT_ID
Elimina singole risorse
Elimina ogni componente del bilanciatore del carico:
Elimina le regole di forwarding:
gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
Elimina gli indirizzi IP esterni globali:
gcloud compute addresses delete IP_ADDRESSES --global
Elimina il proxy di destinazione:
gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
Elimina la mappa URL:
gcloud compute url-maps delete URL_MAP_NAME
Elimina i servizi di backend:
gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
(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