Ejemplo de configuración de GKE

Introducción

En esta página, se muestra cómo configurar una configuración de Cloud NAT de muestra con Google Kubernetes Engine. Antes de configurar Cloud NAT, lee la Descripción general de Cloud NAT.

Requisitos

Permisos de IAM

  • La función roles/compute.networkAdmin puede crear una puerta de enlace NAT en Cloud Router, reservar/asignar IP de NAT y especificar subredes cuyo tráfico debe usar traducción NAT por la puerta de enlace NAT.

Configura Google Cloud

Antes de comenzar, configura los siguientes elementos en Google Cloud.

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Instala e inicializa el SDK de Cloud.
  gcloud config set project PROJECT_ID

También puedes ver un ID del proyecto que ya está configurado:

  gcloud config list --format='text(core.project)'

Ejemplo de configuración de GKE

Paso 1: Crea una subred y una red de VPC

Si ya tienes una red y una subred, puedes omitir este paso.

Console

  1. Ve a la página de redes de VPC en Google Cloud Console.
    Ir a la página de redes de VPC
  2. Haz clic en Crear red de VPC
  3. Ingresa un Nombre de custom-network1.
  4. En Subredes, configura el Modo de creación de subred como Custom.
  5. Ingresa un Nombre de subnet-us-east-192.
  6. Selecciona una Región de us-east4.
  7. Ingresa un rango de direcciones IP de 192.168.1.0/24.
  8. Haga clic en Listo.
  9. Haz clic en Crear.

gcloud

  1. Crea una nueva red de VPC en modo personalizado en tu proyecto.

    gcloud compute networks create custom-network1 \
        --subnet-mode custom
    NAME            MODE   IPV4_RANGE GATEWAY_IPV4
    custom-network1 custom
  2. Especifica el prefijo de subred para tu primera región. En este ejemplo, asignaremos 192.168.1.0/24 a la región us-east4.

    gcloud compute networks subnets create subnet-us-east-192 \
       --network custom-network1 \
       --region us-east4 \
       --range 192.168.1.0/24
    NAME                  REGION      NETWORK         RANGE
    subnet-us-east-192    us-east4 custom-network1 192.168.1.0/24

Paso 2: Crea un clúster privado

Console

  1. Vaya a la página Kubernetes Engine.

    Vaya a la página Kubernetes Engine

  2. Haz clic en el botón Crear clúster.
  3. Especifica un Nombre de nat-test-cluster para tu clúster.
  4. Establece el Tipo de ubicación en Zonal.
  5. Establece la Zona en us-east4-c.
  6. En el panel de navegación, en Clúster, haz clic en Herramientas de redes.
  7. Selecciona Clúster privado.
  8. Desmarca la casilla de verificación Acceder a la instancia principal mediante su dirección IP externa.
  9. Ingresa un Rango de IP de instancia principal de 172.16.0.0/28.
  10. Configura Red como custom-network1.
  11. Haz clic en el botón Crear para crear y, luego, iniciar el clúster.

gcloud

gcloud container clusters create "nat-test-cluster" \
    --zone "us-east4-c" \
    --username "admin" \
    --cluster-version "latest" \
    --machine-type "n1-standard-1" \
    --image-type "COS" \
    --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-cloud-logging \
    --enable-cloud-monitoring \
    --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,KubernetesDashboard \
    --enable-autoupgrade \
    --enable-autorepair

Paso 3: Crea una regla de firewall que permita conexiones SSH

Console

  1. Ve a la página Firewall en Google Cloud Console.
    Ir a la página Firewall
  2. Haz clic en Crear regla de firewall.
  3. Ingresa un Nombre de allow-ssh.
  4. Especifica una Red de custom-network1.
  5. Establece Dirección del tráfico en ingress.
  6. Configura Acción en caso de coincidencia como allow.
  7. Configura Objetivos como All instances in the network.
  8. Establece Filtro fuente como IP ranges.
  9. Configura Rangos de IP de origen como 35.235.240.0/20.
  10. Configura Protocolos y puertos como Specified protocols and ports.
  11. Selecciona tcp y especifica el puerto 22.
  12. Haga clic en Crear.

gcloud

gcloud compute firewall-rules create allow-ssh \
    --network custom-network1 \
    --source-ranges 35.235.240.0/20 \
    --allow tcp:22

Paso 4: Crea permisos de SSH para IAP en uno de los nodos

En un paso posterior, usa IAP para conectarte a tu nodo.

Console

  1. Ve a la página Identity-Aware Proxy.

    Ir a la página de Identity-Aware Proxy

  2. Selecciona la pestaña Recursos de SSH y TCP.
  3. Selecciona la casilla de verificación junto al primer nodo de la lista en Todos los recursos de túnel > us-east4-c. Tendrá un nombre como gke-nat-test-cluster-default-pool-b50db58d-075t.
  4. Escribe el nombre del nodo. Lo usarás para probar la conectividad más adelante.
  5. Haz clic en Agregar miembro en el panel lateral derecho.
  6. Especifica a qué usuarios, grupos o cuentas de servicio les deseas otorgar acceso a los recursos. Para ello, especifica sus direcciones de correo electrónico en el campo Miembros nuevos.
    Si solo estás probando esta función, puedes ingresar tu propia dirección de correo electrónico.
  7. Otorga a los miembros acceso a los recursos a través de la función de redireccionamiento de TCP de Cloud IAP. Para ello, abre la lista desplegable Seleccionar una función y selecciona Cloud IAP > Usuario de túnel protegido por IAP.
  8. Haga clic en Save.

gcloud

Usa las instrucciones de Console para este paso.

Paso 5: Accede al nodo y confirma que no puede acceder a Internet

Console

  1. Ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Busca el nodo para el que creaste los permisos SSH de IAP. En la columna Conectar, haz clic en el botón SSH y selecciona Abrir en la ventana del navegador.

    Si es la primera vez que te conectas a la instancia, GCP genera las claves SSH por ti.

  3. En el mensaje del nodo, busca el ID del proceso del contenedor kube-dns:

    ps aux | grep -i "\s/kube-dns"

    La fila de salida tendrá un aspecto similar al siguiente. El ID del proceso es la segunda columna. En este ejemplo, el ID del proceso es 2387.

    root      2387  0.0  0.6  38812 24792 ?        Ssl  01:27   0:03 /kube-dns --domain=cluster.local. --dns-port=10053 --config-dir=/kube-dns-config --v=2
  4. Accede al contenedor:

    sudo nsenter --target PROCESS_ID --net /bin/bash
  5. Desde kube-dns, intenta conectarte a Internet:

    curl example.com

    No deberías obtener resultados. Si lo haces, es posible que no hayas creado tu clúster como un clúster privado o que haya otro problema. Consulta Las instancias pueden llegar a Internet sin Cloud NAT para solucionar problemas.

    Es posible que debas ingresar Ctrl-C para finalizar el comando.

gcloud

  1. Busca el nombre de uno de los nodos de tu clúster:

    gcloud compute instances list

    Un nombre de nodo será similar a gke-nat-test-cluster-default-pool-1a4cbd06-3m8v. Toma nota del nombre del nodo y úsalo en cualquier lugar que veas NODE_NAME en los comandos que se encuentran a continuación.

  2. Agrega una llave SSH de Compute Engine a tu host local.

    ssh-add ~/.ssh/google_compute_engine
    

  3. Conéctate al nodo:

    gcloud compute ssh NODE_NAME \
        --zone us-east4-c \
        --tunnel-through-iap
  4. En el mensaje del nodo, busca el ID del proceso del contenedor kube-dns:

    ps aux | grep -i "\s/kube-dns"

    La fila de salida tendrá un aspecto similar al siguiente. El ID del proceso es la segunda columna. En este ejemplo, el ID del proceso es 2387. Reemplaza PROCESS_ID por este número en los siguientes comandos.

    root      2387  0.0  0.6  38812 24792 ?        Ssl  01:27   0:03 /kube-dns --domain=cluster.local. --dns-port=10053 --config-dir=/kube-dns-config --v=2
  5. Accede al contenedor:

    sudo nsenter --target PROCESS_ID --net /bin/bash
  6. Desde kube-dns, intenta conectarte a Internet:

    curl example.com

    No deberías obtener resultados. Es posible que debas ingresar Ctrl-C para finalizar el comando.

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 Cloud NAT. Cloud NAT solo se usa para colocar información de NAT en las VM. No se usa como parte de la puerta de enlace NAT real.

Esta configuración les permite a todas las instancias de la región usar Cloud NAT para todos los rangos de IP principales y de alias de IP. También asigna de forma automática las direcciones IP externas de la puerta de enlace NAT. Consulta la documentación de la interfaz de línea de comandos de gcloud para obtener más opciones.

Console

  1. Ve a la página de Cloud NAT en Google Cloud Console.
    Ir a la página Cloud NAT
  2. Haz clic en Comenzar o Crear puerta de enlace de NAT.
  3. Ingresa un Nombre de puerta de enlace de nat-config.
  4. Establece la red de VPC en custom-network1.
  5. Establece la Región en us-east4.
  6. En Cloud Router, selecciona Create new router.
    1. Ingresa un Nombre de nat-router.
    2. Haga clic en Crear.
  7. Haga clic en Crear.

gcloud

Crea un Cloud Router

gcloud compute routers create nat-router \
    --network custom-network1 \
    --region us-east4

Agrega 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

Paso 7: Vuelve a conectarte a Internet

La configuración de NAT puede tardar hasta 3 minutos en propagarse, así que espera al menos un minuto antes de intentar acceder a Internet nuevamente.

Si aún no accediste a kube-dns, vuelve a conectarte mediante el procedimiento del Paso 5 anterior. Una vez que hayas accedido, vuelve a ejecutar el comando curl:

curl example.com

Deberías ver un resultado con el siguiente contenido:


<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 may 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>

Qué sigue