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.
Crea 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 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
Reemplaza lo siguiente:
CLUSTER_NAME
es el nombre del clúster nuevo.CONTROL_PLANE_LOCATION
: La región de Compute Engine del plano de control de tu 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.
Haz clic en Agregar.
Cree 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.
Haz 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.
Console
Ve a la página Instancias de VM en la Google Cloud consola.
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.
Haz clic en Crear.
Crear regla de firewall
Para permitir que IAP se conecte a tu VM de 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 \ --location=CONTROL_PLANE_LOCATION \ --project=PROJECT_ID
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre del clúster privado.CONTROL_PLANE_LOCATION
: Es 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
: Es el ID del Google Cloud proyecto 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.