Accede de forma remota a un clúster privado con un host de bastión


En este instructivo, se muestra cómo acceder a un clúster privado en Google Kubernetes Engine (GKE) a través de Internet mediante un host de bastión.

Puedes crear clústeres privados de GKE sin acceso de clientes al extremo público. Esta opción de acceso mejora la seguridad del clúster, ya que impide el acceso de Internet al plano de control. Sin embargo, inhabilitar el acceso al extremo público te impide interactuar con el clúster de forma remota, a menos que agregues la dirección IP de tu cliente remoto como una red autorizada.

En este instructivo, se muestra cómo configurar un host de bastión, que es una máquina anfitrión de propósito especial diseñada para resistir ataques. El host de bastión usa Tinyproxy para reenviar el tráfico de clientes al clúster. Usa Identity-Aware Proxy (IAP) para acceder de forma segura al host de bastión desde tu cliente remoto.

Objetivos

  • Crear un clúster privado sin acceso al extremo público.
  • Implementar una máquina virtual (VM) de Compute Engine a fin de que actúe como host de bastión en la subred del clúster.
  • Usar IAP para conectar un cliente remoto al clúster a través de Internet.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API de GKE, Compute Engine, Identity-Aware Proxy.

    Habilita las API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. Instala y actualiza los componentes de gcloud:
    gcloud components update
    gcloud components install alpha beta
  8. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  9. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  10. Habilita las API de GKE, Compute Engine, Identity-Aware Proxy.

    Habilita las API

  11. Instala Google Cloud CLI.
  12. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  13. Instala y actualiza los componentes de gcloud:
    gcloud components update
    gcloud components install alpha beta

Cree un clúster privado

Crear un nuevo clúster privado sin acceso del cliente al extremo público. Coloca el clúster en su propia subred. Puedes hacerlo con Google Cloud CLI o la consola de Google Cloud.

gcloud

Ejecuta el siguiente comando:

gcloud container clusters create-auto CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --create-subnetwork=name=SUBNET_NAME \
    --enable-master-authorized-networks \
    --enable-private-nodes \
    --enable-private-endpoint

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster nuevo.
  • COMPUTE_REGION: es la región de Compute Engine del clúster.
  • SUBNET_NAME: El nombre de la subred nueva en la que deseas colocar el clúster.

Console

Crea una subred de nube privada virtual

  1. Ve a la página Redes de VPC en la consola de Google Cloud.

    Ir a las redes de VPC

  2. Haz clic en la red predeterminada.

  3. En la sección Subredes, haz clic en Agregar subred.

  4. En el cuadro de diálogo Agregar una subred, especifica lo siguiente:

    1. Nombre: es un nombre para la subred nueva.
    2. Región: es una región para la subred. Debe ser la misma que la región del clúster.
    3. Rango de direcciones IP: especifica 10.2.204.0/22 o algún otro rango que no entre en conflicto con otros rangos en la red de VPC.
    4. En Acceso privado a Google, selecciona la opción Activado.
  5. Haga clic en Agregar.

Crea un clúster privado

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. Haz clic en Configurar para GKE Autopilot.

  4. Especifica un Nombre y una Región para el clúster nuevo. La región debe ser la misma que la subred.

  5. En la sección Herramientas de redes, selecciona la opción Clúster privado.

  6. Desmarca la casilla de verificación Permitir el acceso al plano de control mediante su dirección IP externa.

  7. En la lista desplegable Subred del nodo, selecciona la subred que creaste.

  8. De manera opcional, configura otros parámetros para el clúster.

  9. Haga clic en Crear.

También puedes usar un clúster de GKE Standard con la marca --master-ipv4-cidr especificada.

Crea una VM host de bastión

Crea una VM de Compute Engine dentro de la red interna del clúster privado para que actúe como un host de bastión que pueda administrar el clúster.

gcloud

Crea una VM de Compute Engine:

gcloud compute instances create INSTANCE_NAME \
    --zone=COMPUTE_ZONE \
    --machine-type=e2-micro \
    --network-interface=no-address,network-tier=PREMIUM,subnet=SUBNET_NAME

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la VM
  • COMPUTE_ZONE: es la zona de Compute Engine para la VM. Coloca esto en la misma región que el clúster.
  • SUBNET_NAME: es la subred en la que deseas colocar la VM.

Consola

  1. Ve a la página Instancias de VM en la consola de Google Cloud.

    Ir a Instancias de VM

  2. Haga clic en Crear instancia.

  3. Especifique lo siguiente:

    1. Nombre: el nombre de tu VM.
    2. Región y Zona: la región y la zona de la VM. Usa la misma región que tu clúster.
    3. Tipo de máquina: un tipo de máquina. Elige un tipo de máquina pequeño, como e2-micro.
    4. En Interfaces de red, selecciona la misma subred y red de VPC que el clúster.
    5. De manera opcional, configura otros parámetros para la instancia.
  4. Haga clic en Crear.

Crear regla de firewall

Para permitir que IAP se conecte a tu VM del host de bastión, crea una regla de firewall.

Implementa el proxy

Con el host de bastión y el clúster privado configurados, debes implementar un daemon de proxy en el host para reenviar el tráfico al plano de control del clúster. Para este instructivo, debes instalar Tinyproxy.

  1. Inicia una sesión en tu VM:

    gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
    
  2. Instala smallproxy:

    sudo apt install tinyproxy
    
  3. Abre el archivo de configuración de Tinyproxy:

    sudo vi /etc/tinyproxy/tinyproxy.conf
    
  4. En el archivo, haz lo siguiente:

    1. Verifica que el puerto sea 8888.
    2. Busca la sección Allow:

        /Allow 127
      
    3. Agrega la siguiente línea a la sección Allow:

        Allow localhost
      
  5. Guarda el archivo y reinicia Tinyproxy:

    sudo service tinyproxy restart
    
  6. Sal de la sesión:

    exit
    

Conéctate a tu clúster desde el cliente remoto

Después de configurar Tinyproxy, debes configurar el cliente remoto con credenciales de clúster y especificar el proxy. Haz lo siguiente en el cliente remoto:

  1. Obtén credenciales para el clúster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --project=PROJECT_ID
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: es el nombre del clúster privado.
    • COMPUTE_REGION: es la región del clúster.
    • PROJECT_ID: es el ID del proyecto de Google Cloud del clúster.
  2. Crea un túnel para el host de bastión mediante IAP:

    gcloud compute ssh INSTANCE_NAME \
        --tunnel-through-iap \
        --project=PROJECT_ID \
        --zone=COMPUTE_ZONE \
        --ssh-flag="-4 -L8888:localhost:8888 -N -q -f"
    
  3. Especifica el proxy:

    export HTTPS_PROXY=localhost:8888
    kubectl get ns
    

    El resultado es una lista de espacios de nombres en el clúster privado.

Deja de escuchar en el cliente remoto

Si quieres revertir el cambio en el cliente remoto en cualquier momento, debes finalizar el proceso de escucha en el puerto TCP 8888. El comando para hacerlo es diferente según el sistema operativo del cliente.

netstat -lnpt | grep 8888 | awk '{print $7}' | grep -o '[0-9]\+' | sort -u | xargs sudo kill

Soluciona problemas

Restricciones de firewall en redes empresariales

Si estás en una red empresarial con un firewall estricto, es posible que no puedas completar este instructivo sin solicitar una excepción. Si solicitas una excepción, el rango de IP de origen para el host de bastión es 35.235.240.0/20 de forma predeterminada.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos individuales

  1. Borra el host de bastión que implementaste en este instructivo:

    gcloud compute instances delete INSTANCE_NAME \
        --zone=COMPUTE_ZONE
    
  2. Borra el clúster:

    gcloud container clusters delete CLUSTER_NAME \
        --region=COMPUTE_REGION
    
  3. Borra la subred:

    gcloud compute networks subnets delete SUBNET_NAME \
        --region=COMPUTE_REGION