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.
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
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Update and install
gcloud
components:gcloud components update
gcloud components install alpha beta -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Update and install
gcloud
components: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
Ve a la página Redes de VPC en la consola de Google Cloud.
Haz clic en la red predeterminada.
En la sección Subredes, haz clic en Agregar subred.
En el cuadro de diálogo Agregar una subred, especifica lo siguiente:
- Nombre: es un nombre para la subred nueva.
- Región: es una región para la subred. Debe ser la misma que la región del clúster.
- 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. - En Acceso privado a Google, selecciona la opción Activado.
Haga clic en Agregar.
Crea un clúster privado
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
Haz clic en
Crear.Haz clic en Configurar para GKE Autopilot.
Especifica un Nombre y una Región para el clúster nuevo. La región debe ser la misma que la subred.
En la sección Herramientas de redes, selecciona la opción Clúster privado.
Desmarca la casilla de verificación Permitir el acceso al plano de control mediante su dirección IP externa.
En la lista desplegable Subred del nodo, selecciona la subred que creaste.
De manera opcional, configura otros parámetros para el clúster.
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 VMCOMPUTE_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
Ve a la página Instancias de VM en la consola de Google Cloud.
Haga clic en Crear instancia.
Especifique lo siguiente:
- Nombre: el nombre de tu VM.
- Región y Zona: la región y la zona de la VM. Usa la misma región que tu clúster.
- Tipo de máquina: un tipo de máquina. Elige un tipo de máquina pequeño, como
e2-micro
. - En Interfaces de red, selecciona la misma subred y red de VPC que el clúster.
- De manera opcional, configura otros parámetros para la instancia.
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.
Inicia una sesión en tu VM:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
Instala smallproxy:
sudo apt install tinyproxy
Abre el archivo de configuración de Tinyproxy:
sudo vi /etc/tinyproxy/tinyproxy.conf
En el archivo, haz lo siguiente:
- Verifica que el puerto sea
8888
. Busca la sección
Allow
:/Allow 127
Agrega la siguiente línea a la sección
Allow
:Allow localhost
- Verifica que el puerto sea
Guarda el archivo y reinicia Tinyproxy:
sudo service tinyproxy restart
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:
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.
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"
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra los recursos individuales
Borra el host de bastión que implementaste en este instructivo:
gcloud compute instances delete INSTANCE_NAME \ --zone=COMPUTE_ZONE
Borra el clúster:
gcloud container clusters delete CLUSTER_NAME \ --region=COMPUTE_REGION
Borra la subred:
gcloud compute networks subnets delete SUBNET_NAME \ --region=COMPUTE_REGION