Questa pagina spiega come attivare una porta Secure Sockets Layer (SSL) durante il deployment di Extensible Service Proxy V2 (ESPv2) con Google Kubernetes Engine, Kubernetes o Compute Engine. Per alcuni casi d'uso, potresti voler attivare una porta SSL per il servizio Endpoints di cui è stato eseguito il deployment.
Prima di iniziare, assicurati di aver già esaminato i tutorial per il tipo di servizio e l'ambiente scelti e di sapere come eseguire il deployment di ESPv2 senza SSL.
Configurazione di chiavi e certificati SSL
Per configurare la porta SSL in modo che gestisca le richieste HTTPS, segui questi passaggi:
Verifica che il file della chiave SSL si chiami
server.key
e che il file del certificato si chiamiserver.crt
. Per i test, puoi generare unserver.key
e unserver.crt
autofirmati utilizzando OpenSSL con il seguente comando:openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./server.key -out ./server.crt
Specifica sia
CN
siasubjectAltName
nel certificato server. Il valore di questi attributi deve corrispondere al DNS o all'IP utilizzato dai client per chiamare il servizio; in caso contrario, l'handshake SSL non andrà a buon fine.
Abilitazione di SSL per ESPv2 su Kubernetes
Per abilitare la porta SSL per ESPv2 su Kubernetes:
Crea un secret Kubernetes con la chiave e il certificato SSL:
kubectl create secret generic esp-ssl \ --from-file=./server.crt --from-file=./server.key
Modifica i file di configurazione di Kubernetes, ad esempio
echo-ssl.yaml
, come mostrato nel seguente snippet: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 Kubernetes che hai creato come volumi, seguendo le istruzioni nella pagina Volumi Kubernetes.
Avvia ESPv2 come descritto in Specifica delle opzioni di avvio per ESPv2, ma assicurati di aggiungere il flag di avvio
--ssl_server_cert_path
per specificare il percorso dei file di certificato montati.Avvia il servizio con il file di configurazione Kubernetes aggiornato utilizzando
kubectl
.kubectl apply -f echo-ssl.yaml
Genera il certificato radice per il client utilizzando il seguente comando OpenSSL:
openssl x509 -in ./server.crt -out ./client.pem -outform PEM
Se il client utilizza
curl
, il fileclient.pem
può essere utilizzato nel flag--caroot
. Per gRPC,client.pem
viene utilizzato come file di certificato radice della credenziale SSL per il canale gRPC.
Aggiorna i certificati SSL
È importante aggiornare periodicamente i certificati SSL. Per aggiornare i certificati SSL, devi svolgere i seguenti passaggi:
- Crea nuovi certificati, come descritto nel passaggio 1.
- Monta i nuovi certificati nei secret Kubernetes, come descritto nel passaggio 3 sopra.
- Aggiorna il deployment Kubernetes di ESPv2 come descritto nel passaggio 5 precedente.
- Rigenera il file del certificato radice client come descritto nel passaggio 6.
Abilitazione di SSL per ESPv2 su Compute Engine
Per abilitare SSL su Compute Engine, copia prima i file server.key
e server.crt
nella
cartella /etc/nginx/ssl
dell'istanza Compute Engine seguendo questi passaggi:
Esegui il comando seguente e sostituisci INSTANCE_NAME con il nome della tua istanza Compute Engine:
gcloud compute scp server.* 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 per il tuo tipo di servizio per eseguire il deployment con Docker. Quando esegui il container Docker ESPv2, utilizza questo comando:
sudo docker run --name=esp \ --detach \ --publish=443:9000 \ --net=esp_net \ --volume=/etc/esp/ssl:/etc/esp/ssl \ gcr.io/endpoints-release/endpoints-runtime:2 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=echo:8080 \ --ssl_server_cert_path=/etc/esp/ssl \ --listener_port=9000
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 i file della chiave e CRT nel container utilizzando
--volume
. - Utilizza
--ssl_server_cert_path=/etc/esp/ssl
per indicare a ESPv2 di trovare i file di certificato del serverserver.key
eserver.crt
nella cartella/etc/esp/ssl
. Modifica il flag di mappatura delle porte
--publish
. Le richieste in entrata alla porta HTTPS 443 vengono mappate alla porta ESPv2 9000.
- Monta la cartella con i file della chiave e CRT nel container utilizzando
Aggiorna i certificati SSL
È importante aggiornare periodicamente i certificati SSL. Per aggiornare i certificati SSL, devi svolgere i seguenti passaggi:
- Crea nuovi certificati e copiali nelle 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 ESPv2 utilizzando il comando
sudo docker run
, come descritto nel passaggio 4.
Test della porta SSL
Per semplificare il test della porta SSL, 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 attivata la porta SSL, puoi utilizzare HTTPS per inviare richieste a
Extensible Service Proxy. Se il 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 server.crt -out client.pem -outform PEM
curl --cacert "./client.pem" -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY