Questa pagina spiega come abilitare una porta SSL (Secure Sockets Layer) quando esegui il deployment di Extensible Service Proxy (ESP) con Google Kubernetes Engine, Kubernetes o Compute Engine. Per alcuni casi d'uso potrebbe essere opportuno abilitare una porta SSL per il servizio Endpoints di cui hai eseguito il deployment. Ad esempio, se utilizzi la funzionalità di transcodifica gRPC, potresti volere che il tuo servizio riceva sia le richieste HTTP 1.1 sia le richieste gRPC sulla stessa porta.
Prima di iniziare, assicurati di aver già esaminato i tutorial per il tipo di servizio e l'ambiente selezionati e di sapere come eseguire il deployment di ESP senza SSL.
Configurazione di chiavi e certificati SSL
Per configurare la porta SSL in modo da gestire le richieste HTTPS, segui i passaggi riportati di seguito:
Verifica che il file della chiave SSL sia denominato
nginx.key
e che il file del certificato sia denominatonginx.crt
. Per i test, puoi generare un elementonginx.key
enginx.cert
autofirmato utilizzando OpenSSL con il seguente comando:openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./nginx.key -out ./nginx.crt
Specifica sia
CN
siasubjectAltName
nel certificato del server. Il valore di questi attributi deve corrispondere al DNS o all'IP utilizzato dai client per chiamare il tuo servizio, altrimenti l'handshake SSL non andrà a buon fine.
Abilitazione di SSL per ESP su Kubernetes
Per abilitare la porta SSL per ESP su Kubernetes:
Crea un secret Kubernetes con la chiave e il certificato SSL:
kubectl create secret generic nginx-ssl \ --from-file=./nginx.crt --from-file=./nginx.key
Modifica i file di configurazione di Kubernetes, ad esempio
esp_echo_gke.yaml
, come mostrato nello snippet seguente:Nota: l'esempio di configurazione mostra le righe che devono essere modificate. Per eseguire il deployment del file in Cloud Endpoints, è necessario il file di configurazione completo.
Monta i secret di Kubernetes che hai creato come volumi, seguendo le istruzioni riportate nella pagina Volumi di Kubernetes.
Avvia ESP come descritto in Specifica delle opzioni di avvio per ESP, ma assicurati di aggiungere il flag di avvio
--ssl_port
per abilitare la porta SSL. Tieni presente che la porta SSL predefinita è la 443.Avvia il servizio con il file di configurazione di Kubernetes aggiornato utilizzando
kubectl
.kubectl apply -f esp_echo_gke.yaml
Aggiorna i certificati SSL
È importante aggiornare i certificati SSL periodicamente. Per aggiornare i certificati SSL, devi eseguire le seguenti operazioni:
- Crea nuovi certificati, come descritto nel passaggio 1.
- Monta i nuovi certificati nei secret di Kubernetes, come descritto nel passaggio 3 precedente.
- Aggiorna il deployment di Kubernetes ESP, come descritto nel passaggio 5.
Abilitazione di SSL per ESP su Compute Engine
Per abilitare SSL su Compute Engine, prima copia i file nginx.key
e nginx.crt
nella cartella /etc/nginx/ssl
dell'istanza di Compute Engine, seguendo questi passaggi:
Esegui questo comando e sostituisci INSTANCE_NAME con il nome della tua istanza Compute Engine:
gcloud compute scp nginx.* INSTANCE-NAME
Connettiti all'istanza utilizzando
ssh
.gcloud compute ssh INSTANCE-NAME
Nella casella della VM dell'istanza, crea la directory e copia i file:
sudo mkdir -p /etc/esp/ssl
sudo cp server.* /etc/esp/ssl/
Segui le istruzioni relative al tuo tipo di servizio per eseguire il deployment con Docker. Quando esegui il container Docker ESP, utilizza questo comando:
sudo docker run --name=esp \ --detach \ --publish=443:443 \ --net=esp_net \ --volume=/etc/nginx/ssl:/etc/nginx/ssl \ --link=echo:echo \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=echo:8080 \ --ssl_port=443
Rispetto al comando
docker run
non SSL, la versione SSL del comando crea una configurazione diversa. Ad esempio, il comando SSL:- Monta la cartella con la chiave e i file CRT nel container utilizzando
--volume
- Utilizza
--ssl_port=443
per indicare a ESP di abilitare SSL sulla porta443
. - Modifica il flag di mappatura delle porte
--publish
.
- Monta la cartella con la chiave e i file CRT nel container utilizzando
Aggiorna i certificati SSL
È importante aggiornare i certificati SSL periodicamente. Per aggiornare i certificati SSL, devi eseguire le seguenti operazioni:
- Crea nuovi certificati e copiali in istanze VM, come descritto nel passaggio 1.
- Copia i nuovi certificati nella directory
/etc/esp/ssl
, come descritto nel passaggio 3. - Arresta e riavvia il container ESP utilizzando il comando
sudo docker run
, come descritto nel passaggio 4 precedente.
Test della porta SSL
Per semplificare i test, imposta le seguenti variabili di ambiente:
Imposta IP_ADDRESS sull'indirizzo IP dell'istanza Compute Engine con il nuovo certificato SSL.
Imposta ENDPOINTS_KEY su una chiave API valida.
Una volta abilitata la porta SSL, puoi utilizzare HTTPS per inviare richieste a Extensible Service Proxy. Se il tuo certificato è autofirmato, utilizza -k
per attivare l'opzione non sicura in curl
:
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY
In alternativa, genera il certificato in formato pem
e utilizza l'opzione --cacert
per utilizzare il certificato autofirmato in curl
, come mostrato di seguito:
openssl x509 -in nginx.crt -out nginx.pem -outform PEM
curl --cacert "./nginx.pem" -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY