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 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
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
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.-
Instala 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 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.-
Instala 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 gcloud CLI, actualízala y, luego, instala los componentes necesarios:
gcloud components update gcloud components install alpha beta
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_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.
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/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.
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_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:
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_IDReemplaza 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 nsEl 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
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra los recursos individuales
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