Présentation
Dans cet atelier, vous allez créer un cluster standard qui utilise des adresses IP internes RFC 1918, ajouter un réseau autorisé pour que les API puissent y accéder, puis configurer une règle de réseau pour sécuriser les pods.
Remarque : Pour cet atelier, vous allez utiliser le mode GKE Standard. Cet atelier porte sur les règles de réseau de clusters, qui sont activées par défaut dans GKE Autopilot.
Objectifs
Dans cet atelier, vous allez apprendre à :
- créer et tester un cluster standard qui utilise des adresses IP internes RFC 1918 ;
- configurer un cluster pour permettre à un réseau d'accéder au plan de contrôle ;
- configurer la règle de réseau d'un cluster.
Préparation
Pour chaque atelier, nous vous attribuons un nouveau projet Google Cloud et un nouvel ensemble de ressources pour une durée déterminée, sans frais.
-
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 Cloud
- Le temps restant
- Les identifiants temporaires que vous devez utiliser pour cet atelier
- Des informations complémentaires vous permettant d'effectuer l'atelier
-
Cliquez sur Ouvrir la console Google Cloud (ou effectuez un clic droit et sélectionnez Ouvrir le lien dans la fenêtre de navigation privée si vous utilisez le navigateur Chrome).
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.
-
Si nécessaire, copiez le nom d'utilisateur ci-dessous et collez-le dans la boîte de dialogue Se connecter.
{{{user_0.username | "Username"}}}
Vous trouverez également le nom d'utilisateur dans le panneau Détails concernant l'atelier.
-
Cliquez sur Suivant.
-
Copiez le mot de passe ci-dessous et collez-le dans la boîte de dialogue Bienvenue.
{{{user_0.password | "Password"}}}
Vous trouverez également le mot de passe dans le panneau Détails concernant l'atelier.
-
Cliquez sur Suivant.
Important : Vous devez utiliser les identifiants fournis pour l'atelier. Ne saisissez pas ceux de votre compte Google Cloud.
Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
-
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 à des essais sans frais.
Après quelques instants, la console Cloud s'ouvre dans cet onglet.
Remarque : Pour afficher un menu contenant la liste des produits et services Google Cloud, cliquez sur le menu de navigation en haut à gauche, ou saisissez le nom du service ou du produit dans le champ Recherche.
Une fois la connexion initiale effectuée, le tableau de bord du projet s'affiche.
Activer Google Cloud Shell
Google Cloud Shell est une machine virtuelle qui contient de nombreux 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 vous permet d'accéder à vos ressources Google Cloud grâce à une ligne de commande.
-
Dans la barre d'outils située en haut à droite dans la console Cloud, cliquez sur le bouton "Ouvrir Cloud Shell".

-
Cliquez sur Continuer.
Le provisionnement et la connexion à l'environnement prennent quelques instants. Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET. Par exemple :

gcloud est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.
- Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
gcloud auth list
Résultat :
Credentialed accounts:
- @.com (active)
Exemple de résultat :
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project
Résultat :
[core]
project =
Exemple de résultat :
[core]
project = qwiklabs-gcp-44776a13dea667a6
Remarque : Pour consulter la documentation complète sur gcloud, accédez au guide de présentation de la gcloud CLI.
Tâche 1 : Créer un cluster standard
Dans cette tâche, vous allez créer un cluster standard qui utilise des adresses IP internes RFC 1918.
Les nœuds de calcul du cluster ne disposeront que d'adresses IP internes RFC 1918. Ainsi, leurs charges de travail seront isolées de l'Internet public et n'auront pas d'adresse IP publique.
Configurer un cluster standard
- Dans le menu de navigation (
), cliquez sur Kubernetes Engine > Clusters.
- Cliquez sur Créer, puis sélectionnez Passer au mode standard pour le cluster.
- Nommez le cluster
standard-cluster.
- Sélectionnez comme zone.
- Dans le volet de gauche, dans Pools de nœuds, cliquez sur default-pool.
- Dans Nombre de nœuds, saisissez 2.

- Dans le volet de gauche, dans Cluster, cliquez sur Mise en réseau.
- Vérifiez que Activer les réseaux autorisés n'est pas sélectionné.
- Cochez la case Remplacer le sous-réseau du point de terminaison privé par défaut du plan de contrôle.
- Pour Sous-réseau du point de terminaison privé, sélectionnez Par défaut.

- Cochez la case Activer les nœuds privés.
Remarque : Google Cloud utilise l'appairage VPC pour connecter le VPC du cluster à votre réseau VPC par défaut.
Vous devrez peut-être faire défiler la page vers le bas pour voir cette option.
Ce paramètre vous permet de définir la plage d'adresses qui peuvent accéder au cluster en externe. Quand cette case n'est pas cochée, kubectl est accessible uniquement à partir du réseau Google Cloud. Dans cet atelier, vous accéderez à kubectl à partir du réseau Google Cloud uniquement, mais vous modifierez ce paramètre ultérieurement.
- Cliquez sur Créer.
Remarque : Le déploiement du cluster prend quelques minutes.
Examiner le cluster
- Dans Cloud Shell, saisissez la commande suivante pour examiner les détails de votre nouveau cluster :
gcloud container clusters describe standard-cluster --zone {{{project_0.default_zone|ZONE}}}
Les valeurs suivantes ne s'affichent que sous le cluster :
- privateEndpoint : adresse IP interne. Les nœuds utilisent cette adresse IP interne pour communiquer avec le plan de contrôle du cluster.
- publicEndpoint : adresse IP externe. Les services externes et les administrateurs peuvent utiliser l'adresse IP externe pour communiquer avec le plan de contrôle du cluster.
Différentes options vous permettent de contrôler le degré de verrouillage du cluster :
- L'ensemble du cluster peut disposer d'un accès externe.
- L'ensemble du cluster peut disposer d'un accès interne.
- Les nœuds peuvent être internes tandis que le plan de contrôle du cluster peut être public. Vous pouvez alors limiter les réseaux externes autorisés à accéder au plan de contrôle du cluster.
Sans adresses IP publiques, le code exécuté sur les nœuds ne peut pas accéder à l'Internet public, à moins de configurer une passerelle NAT telle que Cloud NAT.
Vous pouvez utiliser un cluster avec accès interne pour fournir des services tels que des API internes, dont l'accès est réservé aux ressources internes du réseau. Par exemple, ces ressources peuvent être des outils privés, que seule votre entreprise utilise. Il peut aussi s'agir de services de backend utilisés par vos services de frontend, qui eux-mêmes peuvent être directement utilisés par des clients ou des utilisateurs externes. Dans de tels cas, ces clusters sont un bon moyen de réduire la surface d'exposition de l'application.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer un cluster standard
Tâche 2 : Ajouter un réseau autorisé à accéder au plan de contrôle du cluster
Une fois le cluster créé, vous aurez peut-être besoin de lui envoyer des commandes depuis un environnement extérieur à Google Cloud. Vous pouvez par exemple décider que seul le réseau de votre entreprise peut émettre des commandes vers le plan de contrôle du cluster. Cependant, lors de la création du cluster, vous n'avez pas spécifié de réseau autorisé.
Dans cette tâche, vous allez ajouter un réseau autorisé à accéder au plan de contrôle du cluster.
Remarque : Vous allez donc rendre l'API du plan de contrôle Kubernetes accessible à une plage d'adresses réseau donnée. En situation réelle, cette connexion servirait à l'équipe informatique et aux processus automatisés, mais pas aux utilisateurs finaux.
- Dans le menu de navigation (
) de la console Google Cloud, cliquez sur Kubernetes Engine > Clusters.
- Cliquez sur standard-cluster pour ouvrir la page d'informations sur le cluster.
- Dans l'onglet Détails, sous la section Mise en réseau du plan de contrôle, cliquez sur Modifier(
).
- Sélectionnez Activer les réseaux autorisés.
- Cliquez sur Ajouter un réseau autorisé.
- Dans le champ Nom, saisissez le nom du réseau, à savoir
Corporate.
- Dans le champ Réseau, saisissez la plage d'adresses CIDR que vous voulez ajouter à la liste d'autorisation permettant d'accéder au plan de contrôle du cluster. Vous pouvez par exemple indiquer
192.168.1.0/24.
- Cliquez sur OK.
- Assurez-vous que les paramètres suivants sont activés :
- Accès via l'adresse IP externe du plan de contrôle
- Accès via l'adresse IP interne du plan de contrôle depuis n'importe quelle région
- Forcer l'application des réseaux autorisés sur les points de terminaison internes du plan de contrôle
- Ajouter des adresses IP externes Google Cloud aux réseaux autorisés
Vous pouvez ajouter plusieurs réseaux si nécessaire, mais pas plus de 50 plages d'adresses CIDR.
Remarque : En situation réelle, il peut être pertinent de n'ajouter à la liste blanche que l'adresse publique externe du pare-feu de l'entreprise. Par exemple, si l'adresse IP du pare-feu de l'entreprise est 8.8.8.14, vous pouvez ajouter 8.8.8.14/32 à la liste blanche.
- Cliquez sur Enregistrer les modifications en bas du menu.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Ajouter un réseau autorisé à accéder au plan de contrôle du cluster
Tâche 3 : Créer une règle de réseau pour le cluster
Dans cette tâche, vous allez créer une règle de réseau pour le cluster, afin de limiter la communication entre les pods. Une zone zéro confiance empêche les attaques latérales dans le cluster lorsqu'un des pods est compromis.
Créer un cluster GKE
- Dans Cloud Shell, définissez les variables d'environnement correspondant à la zone et au nom du cluster en saisissant la commande suivante :
export my_zone={{{project_0.default_zone|ZONE}}}
export my_cluster=standard-cluster-1
- Dans Cloud Shell, configurez la complétion par tabulation pour kubectl :
source <(kubectl completion bash)
- Dans Cloud Shell, saisissez la commande suivante pour créer un cluster Kubernetes. Remarque : Cette commande ajoute l'option
--enable-network-policy aux paramètres que vous avez utilisés dans les ateliers précédents. Cette option permet à ce cluster d'appliquer les règles de réseau des clusters :
gcloud container clusters create $my_cluster --num-nodes 3 --enable-ip-alias --zone $my_zone --enable-network-policy
- Dans Cloud Shell, configurez l'accès de l'outil de ligne de commande kubectl à votre cluster en saisissant la commande suivante :
gcloud container clusters get-credentials $my_cluster --zone $my_zone
- Exécutez une application de serveur Web contenant l'étiquette
app=hello, puis exposez-la en interne dans le cluster :
kubectl run hello-web --labels app=hello \
--image=gcr.io/google-samples/hello-app:1.0 --port 8080 --expose
Limiter le trafic entrant vers les pods
Créons un exemple de fichier manifeste NetworkPolicy appelé hello-allow-from-foo.yaml. Ce fichier manifeste définit une règle d'entrée autorisant l'accès aux pods présentant le libellé app: hello depuis les pods contenant le libellé app: foo.
- Dans nano, créez et ouvrez un fichier nommé
hello-allow-from-foo.yaml à l'aide de la commande suivante :
nano hello-allow-from-foo.yaml
- Une fois nano ouvert, collez la commande suivante dans le fichier
hello-allow-from-foo.yaml :
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: hello-allow-from-foo
spec:
policyTypes:
- Ingress
podSelector:
matchLabels:
app: hello
ingress:
- from:
- podSelector:
matchLabels:
app: foo
-
Appuyez sur Ctrl+O, puis sur Entrée pour enregistrer les modifications.
-
Appuyez sur Ctrl+X pour quitter l'éditeur de texte nano.
-
Créez une règle d'entrée :
kubectl apply -f hello-allow-from-foo.yaml
- Vérifiez que la règle a bien été créée :
kubectl get networkpolicy
Résultat :
NAME POD-SELECTOR AGE
hello-allow-from-foo app=hello 7s
Valider la règle d'entrée
- Exécutez un pod temporaire nommé
test-1 contenant l'étiquette app=foo et ouvrez un shell dans le pod :
kubectl run test-1 --labels app=foo --image=alpine --restart=Never --rm --stdin --tty
Remarque : Il est important de noter les paramètres kubectl associés à la commande "run".
--stdin ( ou -i ) crée une session interactive associée à STDIN dans le conteneur.
--tty ( ou -t ) alloue un TTY à chaque conteneur du pod.
--rm indique à Kubernetes de traiter le pod comme temporaire et de le supprimer dès la tâche de démarrage terminée. Étant donné qu'il s'agit d'une session interactive, le pod sera supprimé lorsque l'utilisateur fermera la session.
--label ( ou -l ) ajoute un ensemble de libellés au pod.
--restart définit la règle de redémarrage du pod.
- Envoyez une requête au point de terminaison hello-web:8080 pour vérifier que le trafic entrant est autorisé :
wget -qO- --timeout=2 http://hello-web:8080
Résultat :
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web-8b44b849-k96lh
/ #
-
Saisissez exit et appuyez sur Entrée pour quitter le shell.
-
Vous allez maintenant exécuter un autre pod. Celui-ci portera le même nom, mais utilisera le libellé app=other, qui ne correspond pas au podSelector défini dans la règle de réseau active. Ce pod ne doit pas pouvoir accéder à l'application hello-web.
kubectl run test-1 --labels app=other --image=alpine --restart=Never --rm --stdin --tty
- Envoyez une requête au point de terminaison hello-web:8080 pour vérifier que le trafic entrant n'est pas autorisé :
wget -qO- --timeout=2 http://hello-web:8080
La requête expire.
Résultat :
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
wget: download timed out
/ #
- Saisissez exit et appuyez sur Entrée pour quitter le shell.
Limiter le trafic sortant des pods
Vous pouvez limiter le trafic sortant ("egress", ou de sortie) comme vous l'avez fait pour le trafic entrant. Toutefois, pour interroger des noms d'hôte internes (comme hello-web) ou des noms d'hôte externes (comme www.example.com), vous devez autoriser la résolution DNS dans vos règles de réseau de sortie. Le trafic DNS transite par le port 53, et utilise les protocoles TCP et UDP.
Créons un fichier manifeste NetworkPolicy foo-allow-to-hello.yaml. Ce fichier définit une règle qui permet aux pods contenant l'étiquette app: foo de communiquer avec les pods contenant l'étiquette app: hello, quel que soit le numéro de port. Il permet aussi aux pods contenant l'étiquette app: foo de communiquer avec tous les ordinateurs connectés au port 53 à l'aide du protocole UDP, qui est utilisé pour la résolution DNS. Si le port DNS n'est pas ouvert, vous ne pourrez pas résoudre les noms d'hôte.
- Dans nano, créez et ouvrez un fichier nommé
foo-allow-to-hello.yaml à l'aide de la commande suivante :
nano foo-allow-to-hello.yaml
- Une fois nano ouvert, collez la commande suivante dans le fichier
foo-allow-to-hello.yaml :
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: foo-allow-to-hello
spec:
policyTypes:
- Egress
podSelector:
matchLabels:
app: foo
egress:
- to:
- podSelector:
matchLabels:
app: hello
- to:
ports:
- protocol: UDP
port: 53
-
Appuyez sur Ctrl+O, puis sur Entrée pour enregistrer les modifications.
-
Appuyez sur Ctrl+X pour quitter l'éditeur de texte nano.
-
Créez une règle de sortie :
kubectl apply -f foo-allow-to-hello.yaml
- Vérifiez que la règle a bien été créée :
kubectl get networkpolicy
Résultat :
NAME POD-SELECTOR AGE
foo-allow-to-hello app=foo 7s
hello-allow-from-foo app=hello 5m
Valider la règle de sortie
- Déployez une nouvelle application Web appelée hello-web-2, puis exposez-la en interne dans le cluster :
kubectl run hello-web-2 --labels app=hello-2 \
--image=gcr.io/google-samples/hello-app:1.0 --port 8080 --expose
- Exécutez un pod temporaire contenant l'étiquette
app=foo et affichez une invite de shell à l'intérieur du conteneur :
kubectl run test-3 --labels app=foo --image=alpine --restart=Never --rm --stdin --tty
- Vérifiez que le pod peut établir des connexions avec hello-web:8080 :
wget -qO- --timeout=2 http://hello-web:8080
Résultat :
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web
/ #
- Vérifiez que le pod ne peut pas établir de connexion avec hello-web-2:8080 :
wget -qO- --timeout=2 http://hello-web-2:8080
Cela ne fonctionne pas, car aucune des règles que vous avez définies n'autorise le trafic vers les pods contenant l'étiquette app: hello-2.
- Vérifiez que le pod ne peut pas établir de connexion vers des sites Web externes tels que www.example.com :
wget -qO- --timeout=2 http://www.example.com
Cela ne fonctionne pas, car les règles de réseau n'autorisent pas le trafic HTTP externe (port TCP 80).
- Saisissez exit et appuyez sur Entrée pour quitter le shell.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Exécuter des applications de serveur Web
Terminer l'atelier
Une fois l'atelier terminé, cliquez sur Terminer l'atelier. Google Cloud Skills Boost supprime les ressources que vous avez utilisées, puis efface le compte.
Si vous le souhaitez, vous pouvez noter l'atelier. Sélectionnez un nombre d'étoiles, saisissez un commentaire, puis cliquez sur Envoyer.
Le nombre d'étoiles correspond à votre degré de satisfaction :
- 1 étoile = très insatisfait(e)
- 2 étoiles = insatisfait(e)
- 3 étoiles = ni insatisfait(e), ni satisfait(e)
- 4 étoiles = satisfait(e)
- 5 étoiles = très satisfait(e)
Si vous ne souhaitez pas donner votre avis, vous pouvez fermer la boîte de dialogue.
Pour soumettre des commentaires, suggestions ou corrections, veuillez accéder à l'onglet Assistance.
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.