arrow_back

Déployer une application Web sur GKE avec redirection HTTPS à l'aide de Let's Encrypt

Déployer une application Web sur GKE avec redirection HTTPS à l'aide de Let's Encrypt

1 heure 5 crédits

GSP269

Google Cloud – Ateliers adaptés au rythme de chacun

Présentation

GKE ne fournissant pas d'offre HTTPS gérée, il peut être difficile d'essayer d'obtenir un certificat TLS valide sans une expérience préalable. Vous devrez trouver une autorité de certification fournissant un certificat reconnu par le navigateur et également disposer d'une méthode pour gérer ces certificats.

Avec Let's Encrypt, vous avez accès à une autorité de certification sans frais, automatisée et ouverte, destinée au public. Let's Encrypt fournit un certificat reconnu par le navigateur pour vos services Web. Combinées à cert-manager, un module complémentaire de Kubernetes, la gestion et l'émission de certificats TLS à partir de Let's Encrypt seront complètement automatisées.

GKE n'incluant pas de fonction de redirection HTTP vers HTTPS pour les équilibreurs de charge Google Cloud, un contrôleur d'entrée NGINX sera déployé pour la redirection HTTP vers HTTPS.

Objectifs de l'atelier

Dans cet atelier, vous allez déployer une application Web en conteneur dans un cluster GKE avec HTTPS en utilisant un certificat TLS reconnu par le navigateur et NGINX pour acheminer l'intégralité du trafic HTTP vers HTTPS. Google Cloud Endpoints est utilisé pour sa capacité à provisionner de manière dynamique les entrées DNS sous le domaine DNS cloud.goog.

Points abordés

Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :

  • Déployer une application Web en conteneur

  • Configurer un contrôleur d'entrée NGINX pour la redirection HTTP vers HTTPS

  • Installer un cert-manager dans un cluster pour automatiser l'obtention de certificats TLS/SSL

  • Déployer/Modifier un contrôleur d'entrée avec TLS activé

Prérequis

  • Une version récente de Chrome est recommandée.
  • Des connaissances de base de l'interface en ligne de commande (CLI) Linux et de gcloud sont nécessaires.

Cet atelier porte sur le déploiement et la gestion de GKE. Les concepts et les blocs de codes non pertinents ne sont pas abordés, et vous sont fournis afin que vous puissiez simplement les copier et les coller.

Prérequis

Avant de cliquer sur le bouton Start Lab (Démarrer l'atelier)

Lisez ces instructions. Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Start Lab (Démarrer l'atelier), indique combien de temps les ressources Google Cloud resteront accessibles.

Cet atelier pratique Qwiklabs vous permet de suivre vous-même les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Des identifiants temporaires vous sont fournis pour vous permettre de vous connecter à Google Cloud le temps de l'atelier.

Conditions requises

Pour réaliser cet atelier, vous devez :

  • avoir accès à un navigateur Internet standard (nous vous recommandons d'utiliser Chrome) ;
  • disposer de suffisamment de temps pour réaliser l'atelier en une fois.

Remarque : Si vous possédez déjà votre propre compte ou projet Google Cloud, veillez à ne pas l'utiliser pour réaliser cet atelier.

Remarque : Si vous utilisez un appareil Chrome OS, exécutez cet atelier dans une fenêtre de navigation privée.

Démarrer l'atelier et se connecter à la console Google Cloud

  1. Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, un pop-up s'affiche pour vous permettre de sélectionner un mode de paiement. Sur la gauche, vous trouverez le panneau Détails concernant l'atelier, qui contient les éléments suivants :

    • Le bouton Ouvrir la console Google
    • Le temps restant
    • Les identifiants temporaires que vous devez utiliser pour cet atelier
    • Des informations complémentaires vous permettant d'effectuer l'atelier
  2. Cliquez sur Ouvrir la console Google. L'atelier lance les ressources, puis ouvre la page Se connecter dans un nouvel onglet.

    Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.

    Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
  3. Si nécessaire, copiez le nom d'utilisateur inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue Se connecter. Cliquez sur Suivant.

  4. Copiez le mot de passe inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue de bienvenue. Cliquez sur Suivant.

    Important : Vous devez utiliser les identifiants fournis dans le panneau de gauche. Ne saisissez pas vos identifiants Google Cloud Skills Boost. Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
  5. Accédez aux pages suivantes :

    • Acceptez les conditions d'utilisation.
    • N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
    • Ne vous inscrivez pas aux essais offerts.

Après quelques instants, la console Cloud s'ouvre dans cet onglet.

Remarque : Vous pouvez afficher le menu qui contient la liste des produits et services Google Cloud en cliquant sur le menu de navigation en haut à gauche. Icône du menu de navigation

Activer Google Cloud Shell

Google Cloud Shell est une machine virtuelle qui contient des outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud. Google Cloud Shell offre un accès en ligne de commande à vos ressources GCP.

  1. Dans la console GCP, dans la barre d'outils située en haut à droite, cliquez sur le bouton Ouvrir Cloud Shell.

    Icône Cloud Shell

  2. Cliquez sur Continue (Continuez):

    cloudshell_continue

Il faut quelques instants pour mettre en service et se connecter à l'environnement. Lorsque vous êtes connecté, vous êtes déjà authentifié et le projet est défini sur votre PROJECT_ID. Par exemple:

Terminal Cloud Shell

gcloud est l'outil de ligne de commande associé à Google Cloud Platform. Pré-installé sur Cloud Shell, il est également compatible avec la saisie semi-automatique via la touche de tabulation.

Vous pouvez répertorier les noms des comptes actifs à l'aide de cette commande :

gcloud auth list

Résultat :

ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
    $ gcloud config set account `ACCOUNT`
	

Pour répertorier les ID de projet, exécutez la commande suivante :

gcloud config list project
	

Résultat :

[core]
project = <ID_Projet>
	

Exemple de résultat :

[core]
project = qwiklabs-gcp-44776a13dea667a6
	

Télécharger le code source

Dans Cloud Shell, téléchargez le code source pour l'atelier :

curl -LO https://storage.googleapis.com/spls/gsp269/gke-tls-lab-2.tar.gz

Décompressez le fichier sur votre système local et accédez au répertoire du code source :

tar zxfv gke-tls-lab-2.tar.gz cd gke-tls-lab

Configurer Cloud Endpoints

Attribuer une adresse IP statique

Pour commencer, attribuez une adresse IP statique dans la région Google Cloud où réside notre cluster à l'aide de la commande suivante :

gcloud compute addresses create endpoints-ip --region us-central1

Vérifiez qu'une adresse est attribuée :

gcloud compute addresses list

L'adresse IP indiquée dans le résultat est l'adresse IP attribuée. Notez cette adresse IP, car vous allez l'utiliser tout au long de cet atelier.

Cliquez sur Vérifier ma progression pour valider l'objectif. Attribuer une adresse IP statique

Lancer l'éditeur de code Cloud Shell

Dans cet atelier, vous allez afficher et modifier des fichiers. Vous pouvez utiliser les éditeurs de script shell installés sur Cloud Shell, tels que nano ou vim, ou encore l'éditeur de code intégré de Cloud Shell. Cet atelier utilise l'éditeur de code intégré.

Lancez l'éditeur de code Cloud Shell en cliquant sur l'icône Ouvrir l'éditeur. Vous devrez peut-être cliquer sur le lien Ouvrir dans une nouvelle fenêtre pour lancer l'éditeur de code dans un nouvel onglet.

open_editor.png

Mettre à jour openapi.yaml

Dans le volet de gauche de l'éditeur de code, accédez à gke-tls-lab/openapi.yaml.

Remplacez [MY-STATIC-IP] par l'adresse IP attribuée.

Recherchez votre ID de projet dans la section Détails de connexion de l'atelier. Open_Google_Console_final.png

Dans le code, remplacez toutes les instances de [MY-PROJECT] par votre ID de projet, puis enregistrez le fichier.

Déployer Cloud Endpoints

Cliquez sur Ouvrir le terminal et exécutez la commande suivante pour déployer Cloud Endpoints :

gcloud endpoints services deploy openapi.yaml

Créer un cluster Kubernetes Engine

Exécutez la commande suivante dans la ligne de commande pour créer un cluster :

gcloud container clusters create cl-cluster --zone us-central1-f

Le processus de création peut prendre quelques minutes.

Identifiants d'authentification pour le cluster

Vous avez besoin d'identifiants d'authentification pour interagir avec le cluster.

Obtenez les identifiants d'authentification :

gcloud container clusters get-credentials cl-cluster --zone us-central1-f

Configurer le contrôle d'accès basé sur le rôle

Pour pouvoir déployer sur le cluster, vous avez besoin des autorisations appropriées.

Attribuez-vous le rôle cluster-admin à l'aide de la commande suivante :

kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole cluster-admin --user $(gcloud config get-value account)

Cliquez sur Vérifier ma progression pour valider l'objectif. Créer un cluster Kubernetes Engine

Ajouter un dépôt Helm

Helm est un gestionnaire de packages Kubernetes que vous allez utiliser dans cet atelier pour gérer plus facilement les applications Kubernetes permettant d'installer notre contrôleur d'entrée NGINX et Let's Encrypt.

Helm est préinstallé dans Cloud Shell ; ainsi, vous n'avez qu'à ajouter le dépôt qui contient le contrôleur d'entrée NGINX et les charts Let's Encrypt.

Ajoutez le dépôt de chart de la version stable de NGINX :

helm repo add nginx-stable https://helm.nginx.com/stable

Mettez maintenant à jour les dépôts de charts de Helm :

helm repo update

Installer le contrôleur d'entrée NGINX

Vous allez utiliser Hem pour déployer un contrôleur d'entrée NGINX qui gérera la redirection HTTP vers HTTPS. Cette redirection effectuée lors de la configuration de notre application Web pour HTTPS permet de garantir que l'utilisateur dispose toujours d'une connexion sécurisée à notre application.

Exécutez la commande suivante pour installer le contrôleur d'entrée NGINX à l'aide de Helm. Remplacez [MY-STATIC-IP] par l'adresse IP attribuée que vous avez consignée dans une section précédente.

helm install nginx-stable/nginx-ingress --set controller.service.loadBalancerIP="[MY-STATIC-IP]",rbac.create=true --generate-name

Remarque : Vous pouvez récupérer l'adresse IP attribuée à l'aide de la commande suivante :

gcloud compute addresses list

Cliquez sur Vérifier ma progression pour valider l'objectif. Installer le contrôleur d'entrée NGINX

Déployer l'application "Hello World"

Maintenant que le cluster est créé, vous pouvez déployer l'application Web "Hello World" en conteneur.

Mettre à jour configmap.yaml

Le fichier configmap.yaml contient la variable d'environnement utilisée par Cloud Endpoints.

Dans l'éditeur de code, accédez à configmap.yaml et remplacez [MY-PROJECT] par votre ID de projet.

Enregistrez le fichier.

Déployer l'application Web sur le cluster

Pour effectuer ce déploiement, saisissez la commande suivante :

kubectl apply -f configmap.yaml kubectl apply -f deployment.yaml

Vous devez maintenant exposer notre déploiement. Nous allons exposer notre application Web en associant d'abord un service NodePort à l'aide de la commande suivante :

kubectl apply -f service.yaml

Une fois notre service créé, nous pouvons déployer un contrôleur d'entrée pour créer un équilibreur de charge Google Cloud afin de permettre l'accès externe à notre service. Le contrôleur d'entrée inclura l'annotation suivante :

kubernetes.io/ingress.class: nginx

Cette annotation indique à Kubernetes de ne pas créer d'équilibreur de charge Google Cloud et d'utiliser à la place notre contrôleur d'entrée NGINX.

Mettre à jour ingress.yaml

Dans l'éditeur de code, accédez à ingress.yaml et remplacez toutes les instances de [MY-PROJECT] par votre ID de projet.

Enregistrez le fichier.

Appliquer le contrôleur d'entrée et tester l'application

Dans la ligne de commande, appliquez le contrôleur d'entrée :

kubectl apply -f ingress.yaml Remarque : Le provisionnement du contrôleur d'entrée peut prendre entre 5 et 10 minutes.

Testez l'application. Ouvrez une nouvelle fenêtre du navigateur et connectez-vous à l'adresse ci-dessous, en remplaçant [MY-PROJECT] par votre ID de projet :

http://api.endpoints.[MY-PROJECT].cloud.goog

Lorsque le déploiement de l'application Web est terminé, le message "Hello, world", la version et le nom d'hôte s'affichent dans le navigateur.

Nous pouvons maintenant configurer l'application Web pour HTTPS.

Cliquez sur Vérifier ma progression pour valider l'objectif. Déployer l'application "Hello World"

Configurer HTTPS

Nous allons installer cert-manager et configurer Let's Encrypt comme notre émetteur de certificat pour obtenir un certificat TLS reconnu par le navigateur qui permettra de sécuriser nos applications avec HTTPS. Nous allons également configurer notre contrôleur d'entrée esp-ingress existant pour qu'il gère uniquement les requêtes HTTPS.

Configurer Let's Encrypt

Nous allons utiliser Helm pour installer cert-manager à l'aide des commandes suivantes :

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.crds.yaml kubectl create namespace cert-manager helm repo add jetstack https://charts.jetstack.io helm repo update helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --version v1.8.0

Vérifiez que cert-manager a bien été installé à l'aide de la commande suivante :

kubectl get pods --namespace cert-manager

Le résultat doit se présenter comme suit :

NAME READY STATUS RESTARTS cert-manager-5c6866597-zw7kh 1/1 Running 0 cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0

Exécutez la commande suivante dans le terminal Cloud Shell pour configurer votre adresse e-mail en tant que variable d'environnement, en remplaçant <YOUR_QWIKLABS_ID> par le nom d'utilisateur indiqué dans le panneau "Détails de connexion" :

export EMAIL=<YOUR_QWIKLABS_ID>

Nous allons maintenant déployer l'émetteur Let's Encrypt pour émettre des certificats TLS. Déployez le fichier manifeste de l'émetteur à l'aide de la commande suivante :

cat letsencrypt-issuer.yaml | sed -e "s/email: ''/email: $EMAIL/g" | kubectl apply -f- L'installation complète de Cert Manager peut prendre quelques minutes. Si des erreurs liées aux composants Cert Manager s'affichent, patientez quelques minutes, puis relancez cette commande.

Cliquez sur Vérifier ma progression pour valider l'objectif. Configurer HTTPS

Mettre à jour certificate.yaml

Dans le volet de gauche de l'éditeur de code, accédez à gke-tls-lab/certificate.yaml.

Remplacez toutes les instances de [MY-PROJECT] par votre ID de projet :

Reconfigurer le contrôleur d'entrée pour HTTPS

Nous allons maintenant configurer notre contrôleur d'entrée esp-ingress existant avec TLS. Pour ce faire, nous allons déployer la version modifiée de notre fichier ingress.yaml, qui est ingress-tls.yaml.

Le fichier ingress-tls.yaml modifie le contrôleur d'entrée par les annotations supplémentaires et les modifications suivantes apportées à la clé spec :

annotations:

cert-manager.io/cluster-issuer: letsencrypt-prod

ingress.kubernetes.io/ssl-redirect: "true"

spec:

tls:

- hosts:

- api.endpoints.[MY-PROJECT].cloud.goog

secretName: esp-tls

Les annotations indiquent à cert-manager de commencer à automatiser le processus d'acquisition du certificat TLS requis à partir de Let's Encrypt. Elles indiquent également au contrôleur d'entrée NGINX de rediriger l'intégralité du trafic HTTP vers HTTPS. La clé spec inclura une clé "tls" contenant nos hôtes et secretName.

Mettre à jour ingress-tls.yaml

Accédez à ingress-tls.yaml. Remplacez toutes les instances de [MY-PROJECT] par votre ID de projet.

Ensuite, enregistrez le fichier ingress-tls.yaml.

Depuis la ligne de commande, appliquez les modifications à esp-ingress :

kubectl apply -f ingress-tls.yaml

Une fois encore, vous pouvez vérifier l'état à l'aide de la commande suivante :

kubectl describe ingress esp-ingress

La sortie obtenue doit ressembler à ceci :

Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CREATE 10m nginx-ingress-controller Ingress default/esp-ingress Normal UPDATE 23s (x2 over 10m) nginx-ingress-controller Ingress default/esp-ingress Remarque : Le provisionnement du contrôleur d'entrée peut prendre quelques minutes.

Testez l'application en vous connectant à l'adresse suivante, en remplaçant [MY-PROJECT] par votre ID de projet :

https://api.endpoints.[MY-PROJECT].cloud.goog

Examinez à présent la barre d'adresse. Vous pouvez constater que vous utilisez maintenant une connexion HTTPS chiffrée sécurisée avec un certificat reconnu par le navigateur.

2919ff837bd00bdd.png

Remarque : L'émission du certificat peut prendre quelques minutes. Si la connexion n'indique pas qu'elle est sécurisée avec un certificat Lets Encrypt, attendez quelques minutes avant d'actualiser la page.

Félicitations !

Vous avez déployé une application Web "Hello World" dans un cluster GKE avec HTTPS. Vous avez configuré l'application pour utiliser un certificat TLS reconnu par le navigateur et NGINX pour rediriger l'intégralité du trafic HTTP vers HTTPS.

Terminer votre quête

Solutions_Kubernetes_125.png website_web_app_quest_icon.png

Cet atelier d'auto-formation fait partie des quêtes Qwiklabs Kubernetes Solutions et Website and Web Applications. Une quête est une série d'ateliers associés qui constituent une formation. Si vous terminez cette quête, vous obtiendrez le badge ci-dessus attestant de votre réussite. Vous pouvez rendre publics les badges que vous recevez et ajouter leur lien dans votre CV en ligne ou sur vos comptes de réseaux sociaux. Inscrivez-vous à cette quête pour obtenir immédiatement les crédits associés à cet atelier si vous l'avez suivi. Découvrez les autres quêtes Qwiklabs disponibles.

Atelier suivant

Pour en savoir plus sur GKE, suivez l'atelier NGINX Ingress Controller sur Google Kubernetes Engine ou Exécuter des serveurs de jeu dédiés dans Google Kubernetes Engine.

Pour en savoir plus sur Kubernetes, inscrivez-vous à une quête. Si vous êtes un utilisateur avancé, essayez Kubernetes in the Google Cloud. Si vous êtes un utilisateur expert, choisissez Kubernetes Solutions.

Étapes suivantes et informations supplémentaires

Pour plus d'informations, consultez les ressources suivantes :

Pour en savoir plus sur NGINX, consultez le site web NGINX et le Blog NGINX.

Google Cloud Training & Certification

...helps you make the most of Google Cloud technologies. Our classes include technical skills and best practices to help you get up to speed quickly and continue your learning journey. We offer fundamental to advanced level training, with on-demand, live, and virtual options to suit your busy schedule. Certifications help you validate and prove your skill and expertise in Google Cloud technologies.

Dernière mise à jour du manuel : 15 juillet 2022
Dernier test de l'atelier : 15 juillet 2022

Copyright 2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.