Usar Public NAT con GKE
En esta página se muestra cómo configurar una configuración de NAT pública de ejemplo con Google Kubernetes Engine (GKE). Antes de configurar NAT público, consulta la descripción general de NAT público.
Requisitos previos
Debes hacer lo siguiente antes de configurar NAT público.
Obtener permisos de gestión de identidades y accesos
El rol roles/compute.networkAdmin te da permisos para crear una pasarela NAT en Cloud Router, reservar y asignar direcciones IP NAT, y especificar subredes cuyo tráfico debe usar la traducción de direcciones de red de la pasarela NAT.
Configurar Google Cloud
Antes de empezar, configura los siguientes elementos en 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.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
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.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
Asigne un Nombre de
custom-network1
.En Subredes, selecciona Personalizado en Modo de creación de subred.
En Nueva subred, introduce el Nombre
subnet-us-east-192
.En Región, selecciona us-east4.
Introduce un intervalo de direcciones IP de
192.168.1.0/24
.Haz clic en Hecho y, a continuación, en Crear.
Crea una red de nube privada virtual (VPC) en modo personalizado en tu proyecto:
gcloud compute networks create custom-network1 \ --subnet-mode custom
Resultado:
NAME MODE IPV4_RANGE GATEWAY_IPV4 custom-network1 custom
Especifica el prefijo de subred de tu primera región. En este ejemplo, asignamos
192.168.1.0/24
a la regiónus-east4
.gcloud compute networks subnets create subnet-us-east-192 \ --network custom-network1 \ --region us-east4 \ --range 192.168.1.0/24
Resultado:
NAME REGION NETWORK RANGE subnet-us-east-192 us-east4 custom-network1 192.168.1.0/24
En la Google Cloud consola, ve a la página Clústeres de Kubernetes.
Haz clic en Crear clúster.
En Nombre, escribe
nat-test-cluster
.En Tipo de ubicación, selecciona Zonal.
Define Zone (Zona) como us-east4-c.
En el panel de navegación, haz clic en Redes.
Selecciona Clúster privado.
Desmarque la casilla Acceder al plano de control con su dirección IP externa.
Introduce un intervalo de IPs del plano de control de
172.16.0.0/28
.Selecciona Red y, a continuación,
custom-network1
.Para crear e iniciar el clúster, haz clic en Crear.
En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Haz clic en Crear regla de cortafuegos.
Asigne un Nombre de
allow-ssh
.Especifica una red de
custom-network1
.En Dirección del tráfico, seleccione Entrada.
En Acción tras coincidencia, selecciona Permitir.
En Destinos, selecciona Todas las instancias de la red.
En Filtro de origen, elija Intervalos de IPv4.
Defina Intervalos de IP de origen como
35.235.240.0/20
.En Protocolos y puertos, selecciona Protocolos y puertos especificados.
Selecciona la casilla tcp e introduce el puerto
22
.Haz clic en Crear.
En la Google Cloud consola, ve a la página Identity-Aware Proxy.
Selecciona la pestaña Recursos SSH y TCP.
Marca la casilla situada junto al primer nodo de la lista de Todos los recursos de túnel > us-east4-c. Su nombre será similar a
gke-nat-test-cluster-default-pool-b50db58d-075t
.Anota el nombre del nodo. Más adelante, lo usarás para probar la conectividad.
En el panel de la derecha, haz clic en Añadir principal.
Para conceder acceso a los recursos a usuarios, grupos o cuentas de servicio, especifica sus direcciones de correo en el campo Principales nuevas.
Si solo quieres probar esta función, puedes introducir tu propia dirección de correo.
Para conceder a las entidades acceso a los recursos mediante la función de reenvío TCP de Cloud IAP, selecciona Cloud IAP > Usuario de túneles protegidos mediante IAP en la lista desplegable Rol.
Haz clic en Guardar.
En la consola de Google Cloud , ve a la página Instancias de VM.
Busca el nodo para el que has creado permisos de IAP SSH. En la columna Conectar, haz clic en la flecha desplegable SSH y, a continuación, selecciona Abrir en ventana del navegador.
Si es la primera vez que te conectas a la instancia,Google Cloud generará las claves SSH por ti.
En la petición del nodo, busca el ID de proceso del contenedor
kube-dns
:pgrep '^kube-dns$'
Accede al contenedor:
sudo nsenter --target PROCESS_ID --net /bin/bash
Desde
kube-dns
, intenta conectarte a Internet:curl example.com
No deberías obtener ningún resultado. Si es así, es posible que no hayas creado el clúster como privado o que haya algún otro problema. Para solucionar problemas, consulta Las VMs pueden acceder a Internet inesperadamente sin NAT público.
Para finalizar el comando, puede que tengas que introducir
Ctrl+C
.Busca el nombre de uno de los nodos del clúster:
gcloud compute instances list
El nombre de un nodo tiene un formato similar a este:
gke-nat-test-cluster-default-pool-1a4cbd06-3m8v
. Anota el nombre del nodo y úsalo en lugar deNODE_NAME
en los siguientes comandos.Conéctate al nodo:
gcloud compute ssh NODE_NAME \ --zone us-east4-c \ --tunnel-through-iap
En la petición del nodo, busca el ID de proceso del contenedor
kube-dns
:pgrep '^kube-dns$'
Accede al contenedor:
sudo nsenter --target PROCESS_ID --net /bin/bash
Desde
kube-dns
, intenta conectarte a Internet:curl example.com
No deberías obtener ningún resultado.Para finalizar el comando, puede que tengas que introducir
Ctrl+C
.En la Google Cloud consola, ve a la página Cloud NAT.
Haz clic en Empezar o en Crear pasarela NAT.
Introduzca un nombre de pasarela de
nat-config
.Define la red de VPC como
custom-network1
.En Region (Región), selecciona us-east4.
En Cloud Router, selecciona Crear router.
- Asigne un Nombre de
nat-router
. - Haz clic en Crear.
- Asigne un Nombre de
Haz clic en Crear.
Crea un router de Cloud Router:
gcloud compute routers create nat-router \ --network custom-network1 \ --region us-east4
Añade una configuración 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 una pasarela NAT pública.
- Crea una configuración de ejemplo de Compute Engine.
Configurar el ejemplo de GKE
Usa este ejemplo si quieres ver una configuración sencilla de NAT público que funcione con GKE.
Paso 1: Crea una red VPC y una subred
Si ya tiene una red y una subred, puede saltarse este paso.
Consola
gcloud
Terraform
Puedes usar un módulo de Terraform para crear una red y una subred de nube privada virtual personalizadas.
Paso 2: Crear un clúster privado
Consola
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
Puedes usar un recurso de Terraform para crear un clúster privado.
Paso 3: Crea una regla de cortafuegos que permita las conexiones SSH
Consola
gcloud
gcloud compute firewall-rules create allow-ssh \ --network custom-network1 \ --source-ranges 35.235.240.0/20 \ --allow tcp:22
Terraform
Puedes usar un recurso de Terraform para crear una regla de cortafuegos.
Paso 4: Crea permisos SSH de IAP para uno de tus nodos
En un paso posterior, usa IAP para conectarte a tu nodo.
Consola
gcloud
Para este paso, sigue las instrucciones de la consola.
Paso 5: Inicia sesión en el nodo y confirma que no puede acceder a Internet
Consola
gcloud
Paso 6: Crea una configuración de NAT con Cloud Router
Debes crear el Cloud Router en la misma región que las instancias que usan NAT pública. La NAT pública solo se usa para colocar información de NAT en las VMs. No se usa como parte de la pasarela NAT real.
Esta configuración permite que todas las instancias de la región usen NAT pública para todos los intervalos de IP de alias y principales. También asigna automáticamente las direcciones IP externas a la pasarela de NAT. Para ver más opciones, consulta la documentación de Google Cloud CLI.
Consola
gcloud
Terraform
Puedes usar un recurso de Terraform para crear un Cloud Router.
Puedes usar un módulo de Terraform para crear una configuración de NAT.
Paso 7: Intenta conectarte a Internet de nuevo
La configuración NAT puede tardar hasta tres minutos en propagarse, así que espera al menos un minuto antes de intentar acceder a Internet de nuevo.
Si aún no has iniciado sesión en kube-dns
, vuelve a conectarte siguiendo el procedimiento del paso 5. Una vez que hayas iniciado sesión, vuelve a ejecutar el comando curl
:
curl example.com
Debería ver un resultado que contenga lo siguiente:
<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>