Cette page explique comment activer un port SSL (Secure Sockets Layer) lors du déploiement d'Extensible Service Proxy (ESP) avec Google Kubernetes Engine, Kubernetes ou Compute Engine. Vous pouvez activer un port SSL pour votre service Endpoints déployé dans certains cas d'utilisation. Par exemple, si vous utilisez la fonctionnalité de transcodage de gRPC, vous souhaitez peut-être que votre service reçoive à la fois des requêtes HTTP 1.1 et gRPC sur le même port.
Avant de commencer, assurez-vous d'avoir déjà consulté les tutoriels sur le type de service et l'environnement que vous avez choisis, et que vous savez comment déployer ESP sans SSL.
Configurer vos clés et certificats SSL
Pour configurer votre port SSL afin qu'il diffuse les requêtes HTTPS, procédez comme suit :
Assurez-vous que votre fichier de clé SSL est nommé
nginx.key
et que votre fichier de certificat s'appellenginx.crt
. Pour les tests, vous pouvez générer des fichiers autosignésnginx.key
etnginx.cert
à l'aide d'OpenSSL à l'aide de la commande suivante :openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./nginx.key -out ./nginx.crt
Indiquez à la fois
CN
etsubjectAltName
dans votre certificat de serveur. La valeur de ces attributs doit correspondre au DNS ou à l'adresse IP utilisés par les clients pour appeler votre service. Sinon, le handshake SSL échouera.
Activer SSL pour ESP sur Kubernetes
Pour activer le port SSL pour ESP sur Kubernetes, procédez comme suit :
Créez un secret Kubernetes contenant la clé et le certificat SSL :
kubectl create secret generic nginx-ssl \ --from-file=./nginx.crt --from-file=./nginx.key
Modifiez les fichiers de configuration Kubernetes, par exemple
esp_echo_gke.yaml
, comme illustré dans l'extrait suivant :Remarque : L'exemple de configuration affiche les lignes à modifier. Le fichier de configuration complet est nécessaire au déploiement du fichier sur Cloud Endpoints.
Installez les codes secrets Kubernetes créés en tant que volumes, à l'aide des instructions de la page relative aux Volumes Kubernetes.
Démarrez ESP comme décrit sur la page Spécifier des options de démarrage pour ESP. N'oubliez pas d'ajouter l'indicateur de démarrage
--ssl_port
pour activer le port SSL. (Le port SSL par défaut est le 443.)Démarrez le service avec le fichier de configuration Kubernetes mis à jour à l'aide de
kubectl
.kubectl apply -f esp_echo_gke.yaml
Mettre à jour les certificats SSL
Il est important de mettre régulièrement à jour vos certificats SSL. Pour mettre à jour vos certificats SSL, procédez comme suit :
- Créez des certificats, comme décrit à l'étape 1 ci-dessus.
- Installez les nouveaux certificats sur les secrets Kubernetes, comme décrit à l'étape 3 ci-dessus.
- Mettez à jour le déploiement ESP Kubernetes, comme décrit à l'étape 5 ci-dessus.
Activer SSL pour ESP sur Compute Engine
Pour activer SSL sur Compute Engine, commencez par copier les fichiers nginx.key
et nginx.crt
dans le dossier /etc/nginx/ssl
de l'instance Compute Engine, comme suit :
Exécutez la commande suivante et remplacez INSTANCE_NAME par le nom de l'instance Compute Engine :
gcloud compute scp nginx.* INSTANCE-NAME
Connectez-vous à l'instance via
ssh
.gcloud compute ssh INSTANCE-NAME
Dans la zone d'instance de VM, créez le répertoire et copiez-y les fichiers :
sudo mkdir -p /etc/esp/ssl
sudo cp server.* /etc/esp/ssl/
Suivez les instructions applicables à votre type de service pour effectuer un déploiement avec Docker. Lorsque vous exécutez le conteneur Docker d'ESP, utilisez la commande suivante :
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
Par rapport à la commande non SSL
docker run
, la version SSL de la commande crée une configuration différente. Par exemple, la commande SSL :- installe le dossier contenant les fichiers de clé et CRT dans le conteneur en utilisant
--volume
; - utilise
--ssl_port=443
pour indiquer à ESP d'activer SSL sur le port443
; - modifie l'option de mappage de port
--publish
.
- installe le dossier contenant les fichiers de clé et CRT dans le conteneur en utilisant
Mettre à jour les certificats SSL
Il est important de mettre régulièrement à jour vos certificats SSL. Pour mettre à jour vos certificats SSL, procédez comme suit:
- Créez des certificats et copiez-les dans des instances de VM, comme décrit à l'étape 1 ci-dessus.
- Copiez les nouveaux certificats dans le répertoire
/etc/esp/ssl
, comme décrit à l'étape 3 ci-dessus. - Arrêtez et redémarrez le conteneur ESP à l'aide de la commande
sudo docker run
, comme décrit à l'étape 4 ci-dessus.
Tester le port SSL
Pour faciliter les tests, définissez les variables d’environnement suivantes :
Définissez IP_ADDRESS sur l'adresse IP de l'instance Compute Engine avec le nouveau certificat SSL.
Définissez ENDPOINTS_KEY sur une clé API valide.
Une fois le port SSL activé, vous pouvez utiliser HTTPS pour envoyer des requêtes à Extensible Service Proxy. Si votre certificat est autosigné, utilisez -k
pour activer l'option non sécurisée dans la commande curl
:
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY
Vous pouvez également générer le certificat au format pem
et vous servir de l'option --cacert
pour utiliser le certificat autosigné dans le fichier curl
, comme indiqué ci-dessous :
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