Utilizzare Public NAT con GKE
Questa pagina mostra come configurare una configurazione NAT pubblica di esempio con Google Kubernetes Engine (GKE). Prima di configurare Public NAT, leggi la panoramica di Public NAT.
Prerequisiti
Prima di configurare NAT pubblico, devi eseguire le seguenti operazioni.
Ottieni autorizzazioni IAM
Il ruolo roles/compute.networkAdmin ti concede le autorizzazioni per creare un gateway NAT su router Cloud, riservare e assegnare indirizzi IP NAT e specificare le subnet il cui traffico deve utilizzare la Network Address Translation tramite il gateway NAT.
Configura Google Cloud
Prima di iniziare, configura i seguenti elementi in 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Nella console Google Cloud , vai alla pagina Reti VPC.
Fai clic su Crea rete VPC.
Inserisci un nome di
custom-network1
.In Subnet, imposta Modalità di creazione subnet su Personalizzata.
In Nuova subnet, inserisci un Nome di
subnet-us-east-192
.In Regione, seleziona us-east4.
Inserisci un intervallo di indirizzi IP di
192.168.1.0/24
.Fai clic su Fine, quindi su Crea.
Crea una nuova rete Virtual Private Cloud (VPC) in modalità personalizzata nel tuo progetto:
gcloud compute networks create custom-network1 \ --subnet-mode custom
Output:
NAME MODE IPV4_RANGE GATEWAY_IPV4 custom-network1 custom
Specifica il prefisso della subnet per la prima regione. In questo esempio, assegniamo
192.168.1.0/24
alla regioneus-east4
.gcloud compute networks subnets create subnet-us-east-192 \ --network custom-network1 \ --region us-east4 \ --range 192.168.1.0/24
Output:
NAME REGION NETWORK RANGE subnet-us-east-192 us-east4 custom-network1 192.168.1.0/24
Nella console Google Cloud , vai alla pagina Cluster Kubernetes.
Fai clic su Crea cluster.
In Nome, inserisci
nat-test-cluster
.Imposta Tipo di località su A livello di zona.
Imposta la zona su us-east4-c.
Nel riquadro di navigazione, fai clic su Networking.
Seleziona Cluster privato.
Deseleziona la casella di controllo Accedi al control plane utilizzando l'indirizzo IP esterno.
Inserisci un intervallo IP del control plane di
172.16.0.0/28
.Imposta Rete su
custom-network1
.Per creare e avviare il cluster, fai clic su Crea.
Nella console Google Cloud , vai alla pagina Policy firewall.
Fai clic su Crea regola firewall.
Inserisci un nome di
allow-ssh
.Specifica una rete di
custom-network1
.Imposta Direzione del traffico su In entrata.
Imposta Azione in caso di corrispondenza su Consenti.
Imposta Destinazioni su Tutte le istanze nella rete.
Imposta Filtro di origine su Intervalli IPv4.
Imposta Intervalli IP di origine su
35.235.240.0/20
.Imposta Protocolli e porte su Protocolli e porte specificati.
Seleziona la casella di controllo tcp e inserisci la porta
22
.Fai clic su Crea.
Nella console Google Cloud , vai alla pagina Identity-Aware Proxy.
Seleziona la scheda Risorse SSH e TCP.
Seleziona la casella di controllo accanto al primo nodo dell'elenco in Tutte le risorse tunnel > us-east4-c. Il nome sarà simile a
gke-nat-test-cluster-default-pool-b50db58d-075t
.Annota il nome del nodo, che utilizzerai in seguito per testare la connettività.
Nel riquadro a destra, fai clic su Aggiungi entità.
Per concedere a utenti, gruppi o service account l'accesso alle risorse, nel campo Nuove entità, specifica i loro indirizzi email.
Se stai solo testando questa funzionalità, puoi inserire il tuo indirizzo email.
Per concedere alle entità l'accesso alle risorse tramite la funzionalità di forwarding TCP di Cloud IAP, seleziona Cloud IAP > Utente del tunnel con protezione IAP nell'elenco a discesa Ruolo.
Fai clic su Salva.
Nella console Google Cloud , vai alla pagina Istanze VM.
Trova il nodo per cui hai creato le autorizzazioni SSH IAP. Nella colonna Connetti, fai clic sulla Freccia giù ▼ del menu a discesa SSH e seleziona Apri nella finestra del browser.
Se è la prima volta che ti connetti all'istanza,Google Cloud genera le chiavi SSH per te.
Dal prompt del nodo, trova l'ID processo del container
kube-dns
:pgrep '^kube-dns$'
Accedi al container:
sudo nsenter --target PROCESS_ID --net /bin/bash
Da
kube-dns
, prova a connetterti a internet:curl example.com
Non dovresti ottenere alcun risultato. In questo caso, potresti non aver creato il cluster come cluster privato o potrebbe esserci qualche altro problema. Per la risoluzione dei problemi, consulta la sezione Le VM possono raggiungere internet in modo imprevisto senza NAT pubblico.
Per terminare il comando, potresti dover inserire
Ctrl+C
.Trova il nome di uno dei nodi del cluster:
gcloud compute instances list
Il nome di un nodo ha un aspetto simile a
gke-nat-test-cluster-default-pool-1a4cbd06-3m8v
. Prendi nota del nome del nodo e utilizzalo ovunque vediNODE_NAME
nei seguenti comandi.Connettiti al nodo:
gcloud compute ssh NODE_NAME \ --zone us-east4-c \ --tunnel-through-iap
Dal prompt del nodo, trova l'ID processo del container
kube-dns
:pgrep '^kube-dns$'
Accedi al container:
sudo nsenter --target PROCESS_ID --net /bin/bash
Da
kube-dns
, prova a connetterti a internet:curl example.com
Non dovresti ottenere alcun risultato.Per terminare il comando, potresti dover inserire
Ctrl+C
.Nella Google Cloud console, vai alla pagina Cloud NAT.
Fai clic su Inizia o Crea gateway NAT.
Inserisci un nome gateway di
nat-config
.Imposta la rete VPC su
custom-network1
.Imposta Regione su us-east4.
In Router Cloud, seleziona Crea nuovo router.
- Inserisci un nome di
nat-router
. - Fai clic su Crea.
- Inserisci un nome di
Fai clic su Crea.
Crea un router Cloud:
gcloud compute routers create nat-router \ --network custom-network1 \ --region us-east4
Aggiungi una configurazione al router:
gcloud compute routers nats create nat-config \ --router-region us-east4 \ --router nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
- Configura un gateway Public NAT.
- Crea una configurazione Compute Engine di esempio.
Configurazione dell'esempio GKE
Utilizza questo esempio se vuoi vedere una semplice configurazione Public NAT che funziona con GKE.
Passaggio 1: crea una rete VPC e una subnet
Se hai già una rete e una subnet, puoi saltare questo passaggio.
Console
gcloud
Terraform
Puoi utilizzare un modulo Terraform per creare una rete e una subnet Virtual Private Cloud personalizzate.
Passaggio 2: crea un cluster privato
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
Puoi utilizzare una risorsa Terraform per creare un cluster privato.
Passaggio 3: crea una regola firewall che consenta le connessioni SSH
Console
gcloud
gcloud compute firewall-rules create allow-ssh \ --network custom-network1 \ --source-ranges 35.235.240.0/20 \ --allow tcp:22
Terraform
Puoi utilizzare una risorsa Terraform per creare una regola firewall.
Passaggio 4: crea le autorizzazioni SSH IAP per uno dei tuoi nodi
In un passaggio successivo, utilizza IAP per connetterti al nodo.
Console
gcloud
Per questo passaggio, segui le istruzioni per la console.
Passaggio 5: accedi al nodo e verifica che non possa connettersi a internet
Console
gcloud
Passaggio 6: crea una configurazione NAT utilizzando router Cloud
Devi creare router Cloud nella stessa regione delle istanze che utilizzano NAT pubblico. NAT pubblico viene utilizzato solo per inserire informazioni NAT nelle VM. Non viene utilizzato come parte del gateway NAT effettivo.
Questa configurazione consente a tutte le istanze nella regione di utilizzare NAT pubblico per tutti gli intervalli IP primari e alias. Inoltre, alloca automaticamente gli indirizzi IP esterni per il gateway NAT. Per altre opzioni, consulta la documentazione di Google Cloud CLI.
Console
gcloud
Terraform
Puoi utilizzare una risorsa Terraform per creare un router Cloud.
Puoi utilizzare un modulo Terraform per creare una configurazione NAT.
Passaggio 7: prova a connetterti di nuovo a internet
La propagazione della configurazione NAT potrebbe richiedere fino a tre minuti, quindi attendi almeno un minuto prima di riprovare ad accedere a internet.
Se non hai ancora eseguito l'accesso a kube-dns
, riconnettiti seguendo la procedura
nel passaggio 5. Dopo aver eseguito l'accesso, esegui di nuovo il comando curl
:
curl example.com
Dovresti vedere un output contenente i seguenti contenuti:
<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>