En esta página se explica cómo habilitar un puerto de Secure Sockets Layer (SSL) al desplegar Extensible Service Proxy (ESP) con Google Kubernetes Engine, Kubernetes o Compute Engine. En algunos casos prácticos, puede que quieras habilitar un puerto SSL para el servicio Endpoints implementado. Por ejemplo, si utilizas la función de transcodificación de gRPC, puede que quieras que tu servicio reciba solicitudes HTTP 1.1 y gRPC en el mismo puerto.
Antes de empezar, asegúrate de haber consultado los tutoriales del tipo de servicio y el entorno que hayas elegido, y de saber cómo implementar ESP sin SSL.
Configurar las claves y los certificados SSL
Para configurar el puerto SSL para que responda a solicitudes HTTPS, sigue estos pasos:
Comprueba que el archivo de clave SSL se llama
nginx.key
y el archivo de certificado,nginx.crt
. Para hacer pruebas, puedes generar unnginx.key
y unnginx.cert
autofirmados con OpenSSL mediante el siguiente comando:openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./nginx.key -out ./nginx.crt
Especifica tanto
CN
comosubjectAltName
en tu certificado de servidor. El valor de estos atributos debe coincidir con el DNS o la IP que usan los clientes para llamar a tu servicio. De lo contrario, se producirá un error en el handshake SSL.
Habilitar SSL para ESP en Kubernetes
Para habilitar el puerto SSL de ESP en Kubernetes, sigue estos pasos:
Crea un secreto de Kubernetes con tu clave y certificado SSL:
kubectl create secret generic nginx-ssl \ --from-file=./nginx.crt --from-file=./nginx.key
Edita los archivos de configuración de Kubernetes, por ejemplo,
esp_echo_gke.yaml
, como se muestra en el siguiente fragmento:Nota: En el ejemplo de configuración se muestran las líneas que se deben editar. Para desplegar el archivo en Cloud Endpoints, se necesita el archivo de configuración completo.
Monta los secretos de Kubernetes que has creado como volúmenes siguiendo las instrucciones de la página de volúmenes de Kubernetes.
Inicia ESP como se describe en Especificar opciones de inicio para ESP, pero asegúrate de añadir la marca de inicio
--ssl_port
para habilitar el puerto SSL. Ten en cuenta que el puerto SSL predeterminado es 443.Inicia el servicio con el archivo de configuración de Kubernetes actualizado mediante
kubectl
.kubectl apply -f esp_echo_gke.yaml
Actualizar certificados SSL
Es importante que actualices tus certificados SSL periódicamente. Para actualizar tus certificados SSL, debes seguir estos pasos:
- Crea nuevos certificados, tal como se describe en el paso 1 de este artículo.
- Monta los nuevos certificados en los secretos de Kubernetes, tal como se describe en el paso 3 anterior.
- Actualiza la implementación de Kubernetes de ESP, tal como se describe en el paso 5 anterior.
Habilitar SSL para ESP en Compute Engine
Para habilitar SSL en Compute Engine, primero copia los archivos nginx.key
y nginx.crt
en la carpeta /etc/nginx/ssl
de tu instancia de Compute Engine. Para ello, sigue estos pasos:
Ejecuta el siguiente comando y sustituye INSTANCE_NAME por el nombre de tu instancia de Compute Engine:
gcloud compute scp nginx.* INSTANCE-NAME
Conéctate a la instancia mediante
ssh
.gcloud compute ssh INSTANCE-NAME
En el cuadro de la VM de la instancia, crea el directorio y copia los archivos:
sudo mkdir -p /etc/esp/ssl
sudo cp server.* /etc/esp/ssl/
Sigue las instrucciones correspondientes a tu tipo de servicio para implementar con Docker. Cuando ejecutes el contenedor Docker de ESP, usa este 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
En comparación con el comando
docker run
no compatible con SSL, la versión compatible con SSL del comando crea una configuración diferente. Por ejemplo, el comando SSL:- Monta la carpeta con los archivos de clave y CRT en el contenedor mediante
--volume
- Usa
--ssl_port=443
para indicar a ESP que habilite SSL en el puerto443
. - Cambia la marca de asignación de puertos
--publish
.
- Monta la carpeta con los archivos de clave y CRT en el contenedor mediante
Actualizar certificados SSL
Es importante que actualices tus certificados SSL periódicamente. Para actualizar tus certificados SSL, debes seguir estos pasos:
- Crea certificados y cópialos en las instancias de VM, tal como se describe en el paso 1 de este artículo.
- Copia los nuevos certificados en el directorio
/etc/esp/ssl
, tal como se describe en el paso 3 anterior. - Detén y reinicia el contenedor ESP con el comando
sudo docker run
, tal como se describe en el paso 4 anterior.
Probar el puerto SSL
Para facilitar las pruebas, define las siguientes variables de entorno:
Define IP_ADDRESS como la dirección IP de la instancia de Compute Engine con el nuevo certificado SSL.
Asigna a ENDPOINTS_KEY una clave de API válida.
Una vez que se haya habilitado el puerto SSL, podrá usar HTTPS para enviar solicitudes al proxy de servicio extensible. Si tu certificado tiene firma automática, usa -k
para activar la opción no segura en curl
:
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY
También puedes generar el certificado en formato pem
y usar la opción --cacert
para usar el certificado autofirmado en curl
, como se muestra a continuación:
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