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 obtener una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza 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.
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. 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.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes Acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Después de inicializar la gcloud CLI, actualízala y, luego, 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. 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.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes Acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Después de inicializar la gcloud CLI, actualízala y, luego, instala los componentes necesarios:
gcloud components update gcloud components install alpha beta
CLUSTER_NAMEes 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.Ve a la página Redes de VPC en la Google Cloud consola.
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/22o 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.
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.
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.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.
Inicia una sesión en tu VM:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_IDInstala smallproxy:
sudo apt install tinyproxyAbre el archivo de configuración de Tinyproxy:
sudo vi /etc/tinyproxy/tinyproxy.confEn el archivo, haz lo siguiente:
- Verifica que el puerto sea
8888. Busca la sección
Allow:/Allow 127Agrega 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 restartSal de la sesión:
exitObtén credenciales para el clúster:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=PROJECT_IDReemplaza lo siguiente:
CLUSTER_NAME: es 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: Es el ID del proyecto 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 nsEl resultado es una lista de espacios de nombres en el 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.
Borra el host de bastión que implementaste en este instructivo:
gcloud compute instances delete INSTANCE_NAME \ --zone=COMPUTE_ZONEBorra el clúster:
gcloud container clusters delete CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATIONBorra la subred:
gcloud compute networks subnets delete SUBNET_NAME \ --region=CONTROL_PLANE_LOCATION
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:
Console
Crea una subred de nube privada virtual
Cree un clúster privado
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:
Console
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.
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:
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.