Ce tutoriel explique comment utiliser les règles de réseau des clusters pour contrôler les pods qui reçoivent le trafic réseau entrant, ainsi que ceux qui peuvent envoyer du trafic sortant. Pour plus d'informations, consultez la page Créer une règle de réseau pour un cluster.
Les règles de réseau vous permettent de limiter les connexions entre les pods. Par conséquent, l'utilisation de règles de réseau offre une sécurité supérieure en réduisant le risque de problème de sécurité.
Notez que les règles de réseau déterminent si une connexion est autorisée et n'offrent pas de fonctionnalités de niveau supérieur, telles que l'autorisation ou le transport sécurisé (comme les certificats SSL/TLS).
Objectifs
Dans ce tutoriel, vous allez apprendre à effectuer les opérations suivantes :- Créer des clusters avec l'application de règles de réseau
- Limiter le trafic entrant vers les pods à l'aide de libellés
- Limiter le trafic sortant des pods à l'aide de libellés
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
Pour activer l'API Kubernetes Engine, procédez comme suit :- Accédez à la page Kubernetes Engine dans la console Google Cloud.
- Créez ou sélectionnez un projet.
- Patientez le temps de l'activation de l'API et des services associés. Cette opération peut prendre plusieurs minutes.
-
Make sure that billing is enabled for your Google Cloud project.
Installez les outils de ligne de commande suivants utilisés dans ce tutoriel :
-
gcloud
permet de créer et de supprimer des clusters Kubernetes Engine.gcloud
est inclus dans la CLIgcloud
. -
kubectl
permet de gérer Kubernetes, le système d'orchestration de clusters utilisé par Kubernetes Engine. Vous pouvez installerkubectl
avecgcloud
:gcloud components install kubectl
Clonez l'exemple de code depuis GitHub :
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/networking/network-policies
Définir des valeurs par défaut pour l'outil de ligne de commande gcloud
Pour gagner du temps lors de la saisie de vos options d'ID de projet et de zone Compute Engine dans l'outil de ligne de commande gcloud
, vous pouvez définir les valeurs par défaut suivantes :gcloud config set project project-id gcloud config set compute/zone compute-zone
Créer un cluster GKE avec l'application de règles de réseau
Pour créer un cluster de conteneurs avec l'application de règles de réseau, exécutez la commande suivante :
gcloud container clusters create test --enable-network-policy
Limiter le trafic entrant vers les pods
Les ressources NetworkPolicy
Kubernetes vous permettent de configurer des règles d'accès au réseau pour les pods. Les objets NetworkPolicy
contiennent les informations suivantes :
Les pods auxquels s'appliquent les règles de réseau, généralement désignés par un sélecteur de libellés
Le type de trafic affecté par la règle de réseau : Ingress pour le trafic entrant, Egress pour le trafic sortant, ou les deux
Pour les règles d'entrée, les pods qui peuvent se connecter aux pods spécifiés
Pour les règles de sortie, les pods auxquels les pods spécifiés peuvent se connecter
Commencez par exécuter une application simple de serveur Web associée à l'étiquette app=hello
, puis exposez-la en interne dans le cluster :
kubectl run hello-web --labels app=hello \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080 --expose
Configurez ensuite une règle de réseau (NetworkPolicy
) pour autoriser le trafic vers les pods hello-web
provenant uniquement des pods app=foo
. Le reste du trafic entrant provenant de pods qui ne portent pas ce libellé, le trafic externe et le trafic provenant de pods situés dans d'autres espaces de noms sont bloqués.
Le fichier manifeste suivant sélectionne les pods portant l'étiquette app=hello
et spécifie une règle d'entrée pour autoriser le trafic provenant seulement des pods portant l'étiquette app=foo
:
Pour appliquer cette règle au cluster, exécutez la commande suivante :
kubectl apply -f hello-allow-from-foo.yaml
Valider la règle d'entrée
Tout d'abord, exécutez un pod temporaire portant l'étiquette app=foo
, puis obtenez une interface système dans le pod :
kubectl run -l app=foo --image=alpine --restart=Never --rm -i -t test-1
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
Hello, world! Version: 1.0.0 Hostname: hello-web-2258067535-vbx6z / # exit
Le trafic depuis le pod app=foo
vers les pods app=hello
est activé.
Exécutez ensuite un pod temporaire associé à une autre étiquette (app=other
), puis obtenez une interface système à l'intérieur du pod :
kubectl run -l app=other --image=alpine --restart=Never --rm -i -t test-1
Envoyez la même requête pour constater que le trafic n'est pas autorisé et que, par conséquent, la demande expire, puis quittez l'interface système du pod :
/ # wget -qO- --timeout=2 http://hello-web:8080
wget: download timed out / # exit
Limiter le trafic sortant des pods
Vous pouvez limiter le trafic sortant comme vous le feriez pour le trafic entrant.
Toutefois, pour pouvoir interroger des noms d'hôte internes tels que hello-web
ou des noms d'hôte externes tels que www.example.com
, vous devez autoriser la résolution DNS (Domain Name System) dans vos règles de réseau de sortie. Le trafic DNS se produit sur le port 53 à l'aide des protocoles TCP et UDP.
Pour appliquer les règles de réseau de sortie, déployez une ressource NetworkPolicy
contrôlant le trafic sortant des pods portant l'étiquette app=foo
, tout en n'autorisant le trafic que vers les pods portant l'étiquette app=hello
ainsi que le trafic DNS.
Le fichier manifeste suivant spécifie une règle de réseau contrôlant le trafic de sortie des pods portant l'étiquette app=foo
avec deux destinations autorisées :
- Les pods situés dans le même espace de noms et portant l'étiquette
app=hello
- Les pods du cluster ou les points de terminaison externes sur le port 53 (UDP et TCP).
Pour appliquer cette règle au cluster, exécutez la commande suivante :
kubectl apply -f foo-allow-to-hello.yaml
Valider la règle de sortie
Commencez par déployer une nouvelle application Web nommée hello-web-2
, puis exposez-la en interne dans le cluster :
kubectl run hello-web-2 --labels app=hello-2 \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080 --expose
Exécutez ensuite un pod temporaire portant l'étiquette app=foo
, puis ouvrez une interface système à l'intérieur du conteneur :
kubectl run -l app=foo --image=alpine --rm -i -t --restart=Never test-3
Confirmez que le pod peut établir des connexions à hello-web:8080
:
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web-2258067535-vbx6z
Confirmez que le pod ne peut pas établir de connexions à hello-web-2:8080
:
/ # wget -qO- --timeout=2 http://hello-web-2:8080
wget: download timed out
Confirmez que le pod ne peut pas établir de connexions à des sites Web externes tels que www.example.com
, puis quittez l'interface système du pod.
/ # wget -qO- --timeout=2 http://www.example.com
wget: download timed out
/ # exit
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimez le cluster de conteneurs : cette étape supprime les ressources qui constituent le cluster de conteneurs, telles que les instances de calcul, les disques et les ressources réseau.
gcloud container clusters delete test