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.
Objetivos
- Crea un clúster privado sin acceso al endpoint público.
- Despliega una máquina virtual de Compute Engine para que actúe como host bastion en la subred del clúster.
- Usa IAP para conectar un cliente remoto al clúster a través de Internet.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Después de inicializar gcloud CLI, actualízala e instala los componentes necesarios:
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Después de inicializar gcloud CLI, actualízala e instala los componentes necesarios:
gcloud components update gcloud components install alpha beta
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.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.
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 nodo, selecciona la subred que has creado.
También puede configurar otros ajustes del clúster.
Haz clic en Crear.
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.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.
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
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.
- 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.
Elimina el host bastion que has implementado en este tutorial:
gcloud compute instances delete INSTANCE_NAME \ --zone=COMPUTE_ZONE
Elimina el clúster:
gcloud container clusters delete CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION
Elimina la subred:
gcloud compute networks subnets delete SUBNET_NAME \ --region=CONTROL_PLANE_LOCATION
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:
Consola
Crear una subred de nube privada virtual
Crear un clúster privado
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:
Consola
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.
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:
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 te encuentras 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.
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.