Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Configurazione di Cloud NAT con GKE

Questa pagina mostra come configurare una configurazione Cloud NAT di esempio con Google Kubernetes Engine (GKE). Prima di configurare Cloud NAT, leggi la panoramica di Cloud NAT.

Prerequisiti

Devi seguire questi passaggi prima di configurare Cloud NAT.

Ottieni autorizzazioni IAM

Il ruolo roles/compute.networkAdmin ti concede le autorizzazioni per creare un gateway NAT sul router Cloud, prenotare e assegnare indirizzi IP NAT e specificare subnet (subnet) il cui traffico deve usare la traduzione degli indirizzi di rete da parte del gateway NAT.

Configurare Google Cloud

Prima di iniziare, configura i seguenti elementi in Google Cloud.

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Installa e inizializza Google Cloud CLI.
  5. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  7. Installa e inizializza Google Cloud CLI.

Configurazione dell'esempio di GKE

Utilizza questo esempio se vuoi vedere una semplice configurazione di Cloud NAT con GKE.

Passaggio 1: crea una rete e una subnet VPC

Se hai già una rete e una subnet, puoi saltare questo passaggio.

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai alla pagina Reti VPC

  2. Fai clic su Crea rete VPC.

  3. Inserisci un Nome: custom-network1.

  4. In Subnet, imposta Modalità di creazione subnet su Personalizzata.

  5. In Nuova subnet, inserisci un Nome di subnet-us-east-192.

  6. In Regione, seleziona us-east4.

  7. Inserisci un intervallo di indirizzi IP di 192.168.1.0/24.

  8. Fai clic su Fine, quindi su Crea.

gcloud

  1. Crea una nuova rete VPC in modalità personalizzata nel progetto:

    gcloud compute networks create custom-network1 \
        --subnet-mode custom

    Output:

    NAME             MODE     IPV4_RANGE   GATEWAY_IPV4
    custom-network1  custom

  2. Specifica il prefisso della subnet per la prima regione. In questo esempio, assegniamo 192.168.1.0/24 alla regione us-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

Terraform

Puoi utilizzare un modulo Terraform per creare una rete VPC e una subnet personalizzate.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 6.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "custom-network1"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "subnet-us-east-192"
      subnet_ip     = "192.168.1.0/24"
      subnet_region = "us-east4"
    }
  ]
}

Passaggio 2: crea un cluster privato

Console

  1. Nella console Google Cloud, vai alla pagina Cluster Kubernetes.

    Vai alla pagina Cluster di Kubernetes

  2. Fai clic su Crea cluster.

  3. In Nome, inserisci nat-test-cluster.

  4. Imposta il Tipo di località su A livello di zona.

  5. Imposta la Zona su us-east4-c.

  6. Nel riquadro di navigazione, fai clic su Networking.

  7. Seleziona Cluster privato.

  8. Deseleziona la casella di controllo Accedi al piano di controllo utilizzando l'indirizzo IP esterno.

  9. Inserisci un intervallo IP piano di controllo di 172.16.0.0/28.

  10. Imposta Rete su custom-network1.

  11. Per creare e avviare il cluster, fai clic su Crea.

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.

resource "google_container_cluster" "primary" {
  project            = var.project_id
  name               = "nat-test-cluster"
  location           = "us-east4-c"
  initial_node_count = 3
  network            = var.network # Replace with a reference or self link to your network, in quotes
  subnetwork         = var.subnet  # Replace with a reference or self link to your subnet, in quotes
  private_cluster_config {
    master_ipv4_cidr_block  = "172.16.0.0/28"
    enable_private_endpoint = true
    enable_private_nodes    = true
  }
  ip_allocation_policy {
  }
  master_authorized_networks_config {
  }
}

Passaggio 3: crea una regola firewall che consenta le connessioni SSH

Console

  1. Nella console Google Cloud, vai alla pagina Firewall.

    Vai alla pagina Firewall

  2. Fai clic su Crea regola firewall.

  3. Inserisci un Nome: allow-ssh.

  4. Specifica una Rete custom-network1.

  5. Imposta Direzione del traffico su In entrata.

  6. Imposta Azione in caso di corrispondenza su Consenti.

  7. Imposta Destinazioni su Tutte le istanze nella rete.

  8. Imposta Filtro di origine su Intervalli IP.

  9. Imposta Intervalli IP di origine su 35.235.240.0/20.

  10. Imposta Protocolli e porte su Protocolli e porte specificati.

  11. Seleziona la casella di controllo tcp e inserisci la porta 22.

  12. Fai clic su Crea.

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.

resource "google_compute_firewall" "rules" {
  project = var.project_id
  name    = "allow-ssh"
  network = var.network
  allow {
    protocol = "tcp"
    ports    = ["22"]
  }
  source_ranges = ["35.235.240.0/20"]
}

Passaggio 4: crea le autorizzazioni SSH IAP per uno dei tuoi nodi

In un passaggio successivo, utilizza IAP per connetterti al nodo.

Console

  1. Nella console Google Cloud, vai alla pagina Identity-Aware Proxy.

    Vai alla pagina Identity-Aware Proxy

  2. Seleziona la scheda Risorse SSH e TCP.

  3. 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.

  4. Prendi nota del nome del nodo e utilizzarlo in seguito per testare la connettività.

  5. Nel riquadro a destra, fai clic su Aggiungi entità.

  6. Per concedere a utenti, gruppi o account di servizio l'accesso alle risorse, specifica i loro indirizzi email nel campo Nuove entità.

    Se stai solo testando questa funzionalità, puoi inserire il tuo indirizzo email.

  7. Per concedere alle entità l'accesso alle risorse tramite la funzionalità di inoltro TCP di Cloud IAP, seleziona Cloud IAP > Utente del tunnel con protezione IAP dall'elenco Ruolo.

  8. Fai clic su Salva.

gcloud

Per questo passaggio, segui le istruzioni per la console.

Passaggio 5: accedi al nodo e verifica che non riesca a connettersi a Internet

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Trova il nodo per cui hai creato le autorizzazioni SSH IAP. Nella colonna Connetti, fai clic sulla freccia 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.

  3. Dal prompt del nodo, trova l'ID processo del container kube-dns:

    pgrep '^kube-dns$'
  4. Accedi al container:

    sudo nsenter --target PROCESS_ID --net /bin/bash
  5. Di kube-dns, prova a connetterti a Internet:

    curl example.com

    Non dovresti vedere nessun risultato. In tal caso, è possibile che tu non abbia creato il tuo cluster come cluster privato o che ci siano altri problemi. Per risolvere il problema, consulta Le VM possono connettersi a Internet in modo imprevisto senza Cloud NAT.

    Per terminare il comando, potresti dover inserire Ctrl+C.

gcloud

  1. Trova il nome di uno dei nodi del tuo cluster:

    gcloud compute instances list

    Il nome del nodo è simile a gke-nat-test-cluster-default-pool-1a4cbd06-3m8v. Prendi nota del nome del nodo e usalo ovunque vedi NODE_NAME nei comandi seguenti.

  2. Connettiti al nodo:

    gcloud compute ssh NODE_NAME \
        --zone us-east4-c \
        --tunnel-through-iap
  3. Dal prompt del nodo, trova l'ID processo del container kube-dns:

    pgrep '^kube-dns$'
  4. Accedi al container:

    sudo nsenter --target PROCESS_ID --net /bin/bash
  5. Di kube-dns, prova a connetterti a Internet:

    curl example.com

    Nessun risultato visualizzato.Per terminare il comando, potresti dover inserire Ctrl+C.

Passaggio 6: crea una configurazione NAT utilizzando il router Cloud

Devi creare il router Cloud nella stessa regione delle istanze che utilizzano Cloud NAT. Cloud NAT viene utilizzato solo per inserire informazioni NAT sulle VM. Non viene utilizzato come parte del gateway NAT effettivo.

Questa configurazione consente a tutte le istanze nella regione di utilizzare Cloud NAT per tutti gli intervalli IP alias e principali. Inoltre, alloca automaticamente gli indirizzi IP esterni per il gateway NAT. Per altre opzioni, consulta la documentazione di Google Cloud CLI.

Console

  1. Nella console Google Cloud, vai alla pagina Cloud NAT.

    Vai alla pagina Cloud NAT

  2. Fai clic su Inizia o Crea gateway NAT.

  3. Inserisci il Nome gateway di nat-config.

  4. Imposta Rete VPC su custom-network1.

  5. Imposta Area geografica su us-east4.

  6. In Router Cloud, seleziona Crea nuovo router.

    1. Inserisci un Nome: nat-router.
    2. Fai clic su Crea.
  7. Fai clic su Crea.

gcloud

  1. Crea un router Cloud:

    gcloud compute routers create nat-router \
        --network custom-network1 \
        --region us-east4
  2. 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

Terraform

Puoi utilizzare una risorsa Terraform per creare un router Cloud.

resource "google_compute_router" "router" {
  project = var.project_id
  name    = "nat-router"
  network = var.network
  region  = "us-east4"
}

Puoi utilizzare un modulo Terraform per creare una configurazione NAT.

module "cloud-nat" {
  source                             = "terraform-google-modules/cloud-nat/google"
  version                            = "~> 2.0"
  project_id                         = var.project_id
  region                             = "us-east4"
  router                             = google_compute_router.router.name
  name                               = "nat-config"
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
}

Passaggio 7: prova a connetterti di nuovo a Internet

La propagazione della configurazione NAT potrebbe richiedere fino a tre minuti. Attendi almeno un minuto prima di riprovare ad accedere a Internet.

Se non hai ancora eseguito l'accesso a kube-dns, riconnettiti utilizzando la procedura descritta nel Passaggio 5. Dopo aver effettuato l'accesso, esegui nuovamente il comando curl:

curl example.com

Dovresti vedere un output con 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>

Passaggi successivi