Extensible Service Proxy (ESP) è un proxy basato su NGINX che consente a Cloud Endpoints di fornire funzionalità di gestione delle API. Configuri
ESP specificando le opzioni all'avvio del container
Docker ESP. Quando viene avviato il container ESP, viene eseguito uno script
denominato start_esp, che scrive il file di configurazione NGINX utilizzando le
opzioni specificate e avvia ESP.
Specifichi le opzioni di avvio di ESP nel comando docker run, ad esempio:
sudo docker run \
--detach \
DOCKER_ARGUMENTS \
gcr.io/endpoints-release/endpoints-runtime:1 \
--service=SERVICE_NAME \
--rollout_strategy=managed \
--backend=YOUR_API_CONTAINER_NAME:8080
Se esegui il deployment di ESP su Kubernetes, specifica le opzioni di avvio
nel file manifest di deployment nel campo args, ad esempio:
containers:
- name: esp
image: gcr.io/endpoints-release/endpoints-runtime:1
args: [
"--http_port=8081",
"--backend=127.0.0.1:8080",
"--service=SERVICE_NAME",
"--rollout_strategy=managed"
]
La tabella seguente descrive le opzioni di avvio dell'ESP.
| Opzione breve | Opzione lunga | Descrizione |
|---|---|---|
-s SERVICE_NAME |
--service SERVICE_NAME |
Imposta il nome del servizio Endpoints. |
-R ROLLOUT_STRATEGY |
--rollout_strategy ROLLOUT_STRATEGY |
Disponibile in ESP versione 1.7.0 e successive. Specifica |
-v CONFIG_ID |
--version CONFIG_ID |
Imposta l'ID configurazione del servizio da utilizzare con ESP. Consulta
Recuperare il nome del servizio
e l'ID configurazione per le informazioni necessarie per impostare questa opzione.
Quando specifichi --rollout_strategy=fixed o quando non includi l'opzione --rollout_strategy, devi includere l'opzione --version e specificare un ID configurazione. In questo caso,
ogni volta che esegui il deployment di una nuova configurazione di Endpoints, devi
riavviare ESP con il nuovo ID configurazione.
|
-p HTTP1_PORT |
--http_port HTTP1_PORT |
Imposta le porte che ESP espone per le connessioni HTTP/1.x.1 |
-P HTTP2_PORT |
--http2_port HTTP2_PORT |
Imposta le porte esposte da ESP per le connessioni HTTP/2.1 |
-S SSL_PORT |
--ssl_port SSL_PORT |
Imposta le porte che ESP espone per le connessioni HTTPS.1 |
-a BACKEND |
--backend BACKEND |
Imposta l'indirizzo del server di backend dell'applicazione HTTP/1.x. Il valore predefinito per l'indirizzo backend è http://127.0.0.1:8081.Puoi specificare un prefisso del protocollo, ad esempio: --backend=https://127.0.0.1:8000Se non specifichi un prefisso del protocollo, il valore predefinito è http.Se il server di backend è in esecuzione su Compute Engine in un container, puoi specificare il nome del container e la porta, ad esempio: --backend=my-api-container:8000 |
-N STATUS_PORT |
--status_port STATUS_PORT |
Imposta la porta di stato (valore predefinito: 8090).
|
| nessuno | --disable_cloud_trace_auto_sampling |
Per impostazione predefinita, ESP campiona 1 richiesta ogni 1000 o 1 richiesta ogni 10 secondi è abilitata con Cloud Trace. Imposta questo flag per disattivare il campionamento automatico. Cloud Trace può comunque essere attivato dalle intestazioni HTTP delle richieste con contesto di traccia indipendentemente dal valore di questo flag. Per ulteriori informazioni, consulta la sezione Tracciamento dell'API. |
-n NGINX_CONFIG |
--nginx_config NGINX_CONFIG |
Imposta la posizione del file di configurazione NGINX personalizzato. Se specifichi questa opzione, ESP recupera il file di configurazione specificato e poi avvia immediatamente NGINX con il file di configurazione personalizzato fornito. Per saperne di più, consulta Utilizzo di una configurazione nginx personalizzata per GKE. |
-k SERVICE_ACCOUNT_KEY |
--service_account_key SERVICE_ACCOUNT_KEY |
Imposta il file JSON delle credenziali dell'account di servizio. Se fornito, ESP utilizza il account di servizio per generare un token di accesso per chiamare le API Service Infrastructure. L'unica volta in cui devi specificare questa opzione è quando ESP viene eseguito su piattaforme diverse da Google Cloud, ad esempio il tuo desktop locale, Kubernetes o un altro provider cloud. Per saperne di più, vedi Creazione di un service account. |
-z HEALTHZ_PATH |
--healthz HEALTHZ_PATH |
Definisci un endpoint di controllo di integrità sulle stesse porte del backend dell'applicazione. Ad esempio, -z healthz fa in modo che il fornitore di servizi email restituisca il codice 200 per la località /healthz, anziché inoltrare la richiesta al backend. Impostazione predefinita: non utilizzato.
|
| nessuno | --dns DNS_RESOLVER |
Specifica un resolver DNS. Ad esempio, --dns 169.254.169.254 utilizza
il server di metadati GCP come resolver DNS. Se non specificato, il valore predefinito è
8.8.8.8.
|
1 Queste porte sono facoltative e devono essere distinte tra loro.
Se non specifichi alcuna opzione di porta, ESP accetta connessioni HTTP/1.x sulla porta 8080.
Per le connessioni HTTPS, ESP prevede che i segreti TLS si trovino in /etc/nginx/ssl/nginx.crt e /etc/nginx/ssl/nginx.key.
Esempi di chiamate della riga di comando
Gli esempi seguenti mostrano come utilizzare alcuni degli argomenti della riga di comando:
Per avviare ESP per gestire le richieste in arrivo sulla porta HTTP/1.x 80
e sulla porta HTTPS 443 e inviare le richieste al backend API all'indirizzo
127.0.0.1:8000:
sudo docker run \
--detach \
DOCKER_ARGUMENTS \
gcr.io/endpoints-release/endpoints-runtime:1
--service=echo-api.endpoints.example-project-12345.cloud.goog \
--rollout_strategy=managed \
--http_port=80 \
--ssl_port=443 \
--backend=127.0.0.1:8000
Per avviare ESP con una configurazione NGINX personalizzata utilizzando il file delle credenziali del account di servizio per recuperare la configurazione del servizio e connettersi al controllo del servizio:
sudo docker run \
--detach \
--volume=$HOME/Downloads:/esp \
DOCKER_ARGUMENTS \
gcr.io/endpoints-release/endpoints-runtime:1 \
--service=echo-api.endpoints.example-project-12345.cloud.goog \
--rollout_strategy=managed \
--service_account_key=/esp/serviceaccount.json \
--nginx_config=/esp/nginx.conf
Tieni presente che devi utilizzare i flag Docker --volume o --mount per montare il file JSON contenente la chiave privata per il account di servizio e il file di configurazione NGINX personalizzato come volumi all'interno del container Docker di ESP. L'esempio
precedente mappa la directory $HOME/Downloads sul computer locale alla directory esp nel container. Quando salvi il file della chiave privata per il account di servizio, in genere viene scaricato nella directory Downloads. Se vuoi, puoi copiare il file della chiave privata in un'altra directory. Per saperne di più, vedi
Gestire i dati in Docker.
Aggiunta del supporto CORS a ESP
Consulta la sezione Supporto di CORS per una descrizione delle opzioni di supporto CORS disponibili. Questa sezione descrive l'utilizzo dei flag di avvio di ESP per supportare CORS.
Per attivare il supporto CORS in ESP, includi l'opzione --cors_preset
e impostala su basic o cors_with_regex. Quando includi
--cors_preset=basic o --cors_preset=cors_with_regex, ESP:
- Suppone che tutti i percorsi delle posizioni abbiano la stessa policy CORS.
- Risponde sia alle richieste semplici sia a quelle di
preflight
HTTP OPTIONS. - Memorizza nella cache il risultato della richiesta preflight
OPTIONSper un massimo di 20 giorni (1.728.000 secondi). Imposta le intestazioni della risposta sui seguenti valori:
Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization Access-Control-Expose-Headers: Content-Length,Content-Range
Per sovrascrivere il valore predefinito di
Access-Control-Allow-Origin,
specifica una delle seguenti opzioni:
| Opzione | Descrizione |
|---|---|
--cors_allow_origin |
Utilizza --cors_preset=basic per impostare
Access-Control-Allow-Origin su un'origine specifica.Esempio:
--cors_preset=basic
|
--cors_allow_origin_regex |
Utilizza con --cors_preset=cors_with_regex. Consente di utilizzare un'espressione regolare per impostare Access-Control-Allow-Origin.Esempio:
--cors_preset=cors_with_regex
L'espressione regolare nell'esempio precedente consente un'origine con |
Dopo aver impostato --cors_preset=basic o --cors_preset=cors_with_regex per attivare
CORS, puoi ignorare i valori predefiniti delle altre intestazioni di risposta specificando una o più delle seguenti opzioni:
| Opzione | Descrizione |
|---|---|
--cors_allow_methods |
Imposta
Access-Control-Allow-Methods
sui metodi HTTP specificati. Specifica i metodi HTTP come stringa con ogni
metodo HTTP separato da una virgola.Esempio:
--cors_preset=basic
|
--cors_allow_headers |
Imposta
Access-Control-Allow-Headers
sulle intestazioni HTTP specificate. Specifica le intestazioni HTTP come stringa con ogni intestazione HTTP separata da una virgola.Esempio:
--cors_preset=basic
|
--cors_allow_credentials |
Include l'intestazione
Access-Control-Allow-Credentials
con il valore true nelle risposte. Per impostazione predefinita, l'intestazione
Access-Control-Allow-Credentials non è inclusa nelle risposte.Esempio:
--cors_preset=basic
|
--cors_expose_headers |
Imposta
Access-Control-Expose-Headers
sulle intestazioni specificate. Specifica le intestazioni che possono essere esposte come parte della
risposta come stringa con ogni intestazione separata da una virgola.Esempio:
--cors_preset=basic
|
Se le opzioni di avvio CORS di ESP non soddisfano le esigenze della tua
applicazione, puoi creare un file nginx.conf personalizzato con il supporto CORS
richiesto dalla tua applicazione. Per saperne di più, consulta Creazione di un nginx.conf personalizzato per supportare CORS.
Passaggi successivi
Scopri di più su:
- Deployment di ESP e del backend API in Google Cloud
- Esecuzione di ESP in locale o su un'altra piattaforma
- Lo script
start_espsu GitHub