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
Ve a la página Redes de VPC de la consola de Google Cloud .
Haz clic en la red predeterminada.
En la sección Subredes, haz clic en Añadir subred.
En el cuadro de diálogo Añadir una subred, especifica lo siguiente:
- Nombre: nombre de la nueva subred.
- Región: región de la subred. Debe ser la misma que la región del clúster.
- 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. - En Acceso privado de Google, selecciona la opción Activado.
Haz clic en Añadir.
Crear un clúster privado
Ve a la página Google Kubernetes Engine en la Google Cloud consola.
Haz clic en
Crear.Haz clic en Configurar en Autopilot de GKE.
Especifica un nombre y una región para el nuevo clúster. La región debe ser la misma que la de la subred.
En la sección Redes, selecciona la opción Clúster privado.
Desmarque la casilla Acceder al plano de control con su dirección IP externa.
En la lista desplegable Subred de nodos, selecciona la subred que has creado.
También puede configurar otros ajustes del clúster.
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
Ve a la página Instancias de VM de la Google Cloud consola.
Haz clic en Crear instancia.
Especifica lo siguiente:
- Nombre: el nombre de tu VM.
- Región y Zona: la región y la zona de tu 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 red VPC y subred que el clúster.
- También puede configurar otros ajustes de la instancia.
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.
Inicia una sesión en tu VM:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
Instala Tinyproxy:
sudo apt install tinyproxy
Abre el archivo de configuración de Tinyproxy:
sudo vi /etc/tinyproxy/tinyproxy.conf
En el archivo, haz lo siguiente:
- Comprueba que el puerto sea
8888
. Busca la sección
Allow
:/Allow 127
Añade la siguiente línea a la sección
Allow
:Allow localhost
- Comprueba que el puerto sea
Guarda el archivo y reinicia Tinyproxy:
sudo service tinyproxy restart
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:
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.
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"
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.