Utiliser Public NAT avec GKE
Cette page vous explique comment configurer un exemple de configuration Public NAT avec Google Kubernetes Engine (GKE). Avant de configurer Public NAT, consultez la présentation de Public NAT.
Prérequis
Vous devez effectuer les opérations suivantes avant de configurer Public NAT.
Obtenir des autorisations IAM
Le rôle roles/compute.networkAdmin vous permet de créer une passerelle NAT sur Cloud Router, de réserver et d'attribuer des adresses IP NAT et de spécifier les sous-réseaux dont le trafic doit utiliser la traduction d'adresse réseau assurée par la passerelle NAT.
Configurer Google Cloud
Avant de commencer, configurez les éléments suivants dans Google Cloud.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init Dans la console Google Cloud , accédez à la page Réseaux VPC.
Cliquez sur Créer un réseau VPC.
Spécifiez
custom-network1pour le paramètre Nom.Sous Sous-réseaux, définissez le paramètre Mode de création du sous-réseau sur Personnalisé.
Sous Nouveau sous-réseau, saisissez
subnet-us-east-192pour le paramètre Nom.Dans le champ Région, sélectionnez us-east4.
Définissez le paramètre Plage d'adresses IP sur
192.168.1.0/24.Cliquez sur OK, puis sur Créer.
Créez un réseau de cloud privé virtuel (VPC) en mode personnalisé dans votre projet :
gcloud compute networks create custom-network1 \ --subnet-mode customRésultat :
NAME MODE IPV4_RANGE GATEWAY_IPV4 custom-network1 custom
Spécifiez le préfixe de sous-réseau pour la première région. Dans cet exemple, nous attribuons
192.168.1.0/24à la régionus-east4.gcloud compute networks subnets create subnet-us-east-192 \ --network custom-network1 \ --region us-east4 \ --range 192.168.1.0/24
Résultat :
NAME REGION NETWORK RANGE subnet-us-east-192 us-east4 custom-network1 192.168.1.0/24
Dans la console Google Cloud , accédez à la page Clusters Kubernetes.
Cliquez sur Créer un cluster.
Dans le champ Nom, saisissez
nat-test-cluster.Définissez le paramètre Type d'emplacement sur Zonal.
Définissez le paramètre Zone sur us-east4-c.
Dans le volet de navigation, cliquez sur Mise en réseau.
Sélectionnez Cluster privé.
Décochez la case Accéder au plan de contrôle à l'aide de son adresse IP externe.
Saisissez
172.16.0.0/28pour le paramètre Plage d'adresses IP du plan de contrôle.Définissez le paramètre Réseau sur
custom-network1.Pour créer et démarrer le cluster, cliquez sur Créer.
Dans la console Google Cloud , accédez à la page Règles de pare-feu.
Cliquez sur Créer une règle de pare-feu.
Indiquez
allow-sshpour le paramètre Nom.Définissez le paramètre Réseau sur
custom-network1.Définissez le paramètre Sens du trafic sur Entrée.
Définissez Action en cas de correspondance sur Autoriser.
Définissez le paramètre Cibles sur Toutes les instances du réseau.
Définissez le paramètre Filtre source sur Plages IPv4.
Définissez le paramètre Plages d'adresses IP sources sur
35.235.240.0/20.Définissez le paramètre Protocoles et ports sur Protocoles et ports spécifiés.
Cochez la case tcp et spécifiez le port
22.Cliquez sur Créer.
Dans la console Google Cloud , accédez à la page Identity-Aware Proxy.
Sélectionnez l'onglet Ressources SSH et TCP.
Cochez la case située à côté du nom du premier nœud de la liste sous Toutes les ressources de tunnels > us-east4-c. Ce nom doit ressembler à ceci :
gke-nat-test-cluster-default-pool-b50db58d-075t.Notez le nom du nœud. Vous en aurez besoin pour tester la connectivité.
Dans le volet de droite, cliquez sur Ajouter un compte principal.
Pour accorder l'accès aux ressources à des utilisateurs, groupes ou comptes de service, spécifiez leur adresse e-mail dans le champ Nouveaux comptes principaux.
Si vous ne faites que tester cette fonctionnalité, vous pouvez saisir votre propre adresse e-mail.
Pour accorder aux comptes principaux l'accès aux ressources via la fonctionnalité de transfert TCP de Cloud IAP, dans la liste déroulante Rôle, sélectionnez Cloud IAP > Utilisateur de tunnels sécurisés par IAP.
Cliquez sur Enregistrer.
Dans la console Google Cloud , accédez à la page Instances de VM.
Recherchez le nœud pour lequel vous avez créé des autorisations SSH IAP. Dans la colonne Connecter, cliquez sur la flèche du menu déroulant SSH, puis sélectionnez Ouvrir dans une fenêtre du navigateur.
Si vous vous connectez pour la première fois à l'instance,Google Cloud génère les clés SSH.
À partir de l'invite du nœud, recherchez l'ID de processus du conteneur
kube-dns:pgrep '^kube-dns$'
Accédez au conteneur :
sudo nsenter --target PROCESS_ID --net /bin/bash
À partir de
kube-dns, essayez de vous connecter à Internet :curl example.com
Vous ne devriez obtenir aucun résultat. Dans le cas contraire, vous n'avez peut-être pas créé votre cluster en tant que cluster privé, ou il existe un autre problème. Pour résoudre le problème, consultez Les machines virtuelles peuvent accéder à Internet de façon inattendue, sans Cloud NAT.
Pour arrêter la commande, vous devrez peut-être saisir
Ctrl+C.Recherchez le nom de l'un de vos nœuds de cluster :
gcloud compute instances list
Un nom de nœud ressemble à ceci :
gke-nat-test-cluster-default-pool-1a4cbd06-3m8v. Notez le nom du nœud et utilisez-le à la place deNODE_NAMEdans les commandes suivantes.Connectez-vous au nœud :
gcloud compute ssh NODE_NAME \ --zone us-east4-c \ --tunnel-through-iapÀ partir de l'invite du nœud, recherchez l'ID de processus du conteneur
kube-dns:pgrep '^kube-dns$'
Accédez au conteneur :
sudo nsenter --target PROCESS_ID --net /bin/bash
À partir de
kube-dns, essayez de vous connecter à Internet :curl example.com
Vous ne devriez obtenir aucun résultat. Pour arrêter la commande, vous devrez peut-être appuyer sur
Ctrl+C.Dans la console Google Cloud , accédez à la page Cloud NAT.
Cliquez sur Premiers pas ou Créer une passerelle NAT.
Définissez le paramètre Nom de la passerelle sur
nat-config.Définissez le paramètre Réseau VPC sur
custom-network1.Définissez le paramètre Région sur us-east4.
Dans la section Cloud Router, sélectionnez Créer un routeur.
- Indiquez
nat-routerpour le paramètre Nom. - Cliquez sur Créer.
- Indiquez
Cliquez sur Créer.
Créez un routeur Cloud Router :
gcloud compute routers create nat-router \ --network custom-network1 \ --region us-east4Ajoutez une configuration au routeur :
gcloud compute routers nats create nat-config \ --router-region us-east4 \ --router nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips- Configurez une passerelle Public NAT.
- Créez un exemple de configuration Compute Engine.
Configurer l'exemple GKE
Utilisez cet exemple si vous souhaitez voir une configuration Public NAT simple qui utilise GKE.
Étape 1 : Créer un réseau VPC et un sous-réseau
Si vous disposez déjà d'un réseau et d'un sous-réseau, vous pouvez ignorer cette étape.
Console
gcloud
Terraform
Vous pouvez utiliser un module Terraform pour créer un réseau et un sous-réseau de cloud privé virtuel personnalisés.
Étape 2 : Créer un cluster privé
Console
gcloud
gcloud container clusters create "nat-test-cluster" \
--zone "us-east4-c" \
--username "admin" \
--cluster-version "latest" \
--machine-type "e2-medium" \
--disk-type "pd-standard" \
--disk-size "100" \
--scopes "https://www.googleapis.com/auth/compute","https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \
--num-nodes "3" \
--enable-private-nodes \
--enable-private-endpoint \
--master-ipv4-cidr "172.16.0.0/28" \
--enable-ip-alias \
--network "projects/PROJECT_ID/global/networks/custom-network1" \
--subnetwork "projects/PROJECT_ID/regions/us-east4/subnetworks/subnet-us-east-192" \
--max-nodes-per-pool "110" \
--enable-master-authorized-networks \
--addons HorizontalPodAutoscaling,HttpLoadBalancing \
--enable-autoupgrade \
--enable-autorepair
Terraform
Vous pouvez utiliser une ressource Terraform pour créer un cluster privé.
Étape 3 : Créer une règle de pare-feu qui autorise les connexions SSH
Console
gcloud
gcloud compute firewall-rules create allow-ssh \
--network custom-network1 \
--source-ranges 35.235.240.0/20 \
--allow tcp:22Terraform
Vous pouvez utiliser une ressource Terraform pour créer une règle de pare-feu.
Étape 4 : Créer des autorisations SSH IAP pour l'un de vos nœuds
Lors d'une prochaine étape, vous utiliserez IAP pour vous connecter à votre nœud.
Console
gcloud
Pour cette étape, suivez les instructions concernant la console.
Étape 5 : Se connecter au nœud et confirmer qu'il ne peut pas accéder à Internet
Console
gcloud
Étape 6 : Créer une configuration NAT à l'aide de Cloud Router
Vous devez créer le routeur Cloud Router dans la même région que les instances qui utilisent Public NAT. Public NAT sert uniquement à placer les informations NAT sur les VM. Ce service ne fait pas partie de la passerelle NAT.
Cette configuration permet à toutes les instances de la région d'utiliser Public NAT pour toutes les plages d'adresses IP primaires et d'adresses IP d'alias. De plus, elle attribue automatiquement les adresses IP externes pour la passerelle NAT. Pour plus d'options, consultez la documentation sur la Google Cloud CLI.
Console
gcloud
Terraform
Vous pouvez utiliser une ressource Terraform pour créer un routeur Cloud Router.
Vous pouvez utiliser un module Terraform pour créer une configuration NAT.
Étape 7 : Essayer de se connecter à Internet une nouvelle fois
La propagation de la configuration NAT peut prendre jusqu'à trois minutes. Attendez au moins une minute avant d'essayer d'accéder de nouveau à Internet.
Si vous n'êtes toujours pas connecté à kube-dns, reconnectez-vous en suivant la procédure décrite à l'étape 5. Une fois connecté, exécutez de nouveau la commande curl :
curl example.com
Le résultat devrait contenir ce qui suit :
<html>
<head>
<title>Example Domain</title>
...
...
...
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is established to be used for illustrative examples in documents. You can use this
domain in examples without prior coordination or asking for permission.</p>
<p><a href="http://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>