Acceder de forma remota a un clúster privado mediante un host bastion

.

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

Puedes crear clústeres privados de GKE sin acceso de cliente al endpoint público. Esta opción de acceso mejora la seguridad del clúster, ya que impide que se acceda al plano de control a través de Internet. Sin embargo, si inhabilitas el acceso al endpoint público, no podrás interactuar con tu clúster de forma remota, a menos que añadas la dirección IP de tu cliente remoto como red autorizada.

En este tutorial se explica cómo configurar un host bastion, que es un host de propósito especial diseñado para resistir ataques. El host bastion usa Tinyproxy para reenviar el tráfico del cliente al clúster. Utilizas Identity-Aware Proxy (IAP) para acceder de forma segura al host bastion desde tu cliente remoto.

Crear un clúster privado

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

gcloud

Ejecuta el siguiente comando:

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

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del nuevo clúster.
  • CONTROL_PLANE_LOCATION: la región de Compute Engine del plano de control de tu clúster.
  • SUBNET_NAME: el nombre de la nueva subred en la que quieres colocar el clúster.

Consola

Crear una subred de nube privada virtual

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

    Ir a redes de VPC

  2. Haz clic en la red predeterminada.

  3. En la sección Subredes, haz clic en Añadir subred.

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

    1. Nombre: nombre de la nueva subred.
    2. Región: región de la subred. Debe ser la misma que la región del clúster.
    3. Intervalo de direcciones IP: especifica 10.2.204.0/22 u otro intervalo que no entre en conflicto con otros intervalos de la red VPC.
    4. En Acceso privado de Google, selecciona la opción Activado.
  5. Haz clic en Añadir.

Crear un clúster privado

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

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. Haz clic en Configurar en Autopilot de GKE.

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

  5. En la sección Redes, selecciona la opción Clúster privado.

  6. Desmarque la casilla Acceder al plano de control con su dirección IP externa.

  7. En la lista desplegable Subred de nodos, selecciona la subred que has creado.

  8. También puede configurar otros ajustes del clúster.

  9. Haz clic en Crear.

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

Crear una VM de host bastion

Crea una VM de Compute Engine en la red interna del clúster privado para que actúe como host bastion que pueda gestionar 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

Haz los cambios siguientes:

  • INSTANCE_NAME: el nombre de la VM.
  • COMPUTE_ZONE: la zona de Compute Engine de la VM. Colócalo en la misma región que el clúster.
  • SUBNET_NAME: la subred en la que quieras colocar la VM.

Consola

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

    Ir a instancias de VM

  2. Haz clic en Crear instancia.

  3. Especifica lo siguiente:

    1. Nombre: el nombre de tu VM.
    2. Región y Zona: la región y la zona de tu 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 red VPC y subred que el clúster.
    5. También puede configurar otros ajustes de la instancia.
  4. Haz clic en Crear.

Crear regla de cortafuegos

Para permitir que IAP se conecte a tu VM de host bastion, crea una regla de cortafuegos.

Implementar el proxy

Una vez configurados el host bastion y el clúster privado, debes implementar un daemon proxy en el host para reenviar el tráfico al plano de control del clúster. En este tutorial, instalarás Tinyproxy.

  1. Inicia una sesión en tu VM:

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

    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. Comprueba que el puerto sea 8888.
    2. Busca la sección Allow:

        /Allow 127
      
    3. Añade la siguiente línea a la sección Allow:

        Allow localhost
      
  5. Guarda el archivo y reinicia Tinyproxy:

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

    exit
    

Conectarse al clúster desde el cliente remoto

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

  1. Obtén las credenciales del clúster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --project=PROJECT_ID
    

    Haz los cambios siguientes:

    • CLUSTER_NAME: el nombre del clúster privado.
    • CONTROL_PLANE_LOCATION: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.
    • PROJECT_ID: el ID del Google Cloud proyecto del clúster.
  2. Crea un túnel a la pasarela de aplicaciones 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 del clúster privado.

Dejar de escuchar en el cliente remoto

Si quieres deshacer el cambio en el cliente remoto en cualquier momento, debes finalizar el proceso de escucha en el puerto TCP 8888. El comando para hacerlo varía en función del sistema operativo del cliente.

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

Solución de problemas

Restricciones de cortafuegos en redes empresariales

Si estás en una red empresarial con un firewall estricto, es posible que no puedas completar este tutorial sin solicitar una excepción. Si solicitas una excepción, el intervalo de IPs de origen del host bastion es 35.235.240.0/20 de forma predeterminada.