Questo tutorial mostra come accedere a un cluster privato in Google Kubernetes Engine (GKE) su internet utilizzando un bastion host.
Puoi creare cluster GKE privati senza accesso client all'endpoint pubblico. Questa opzione di accesso migliora la sicurezza del cluster impedendo l'accesso a internet al control plane. Tuttavia, la disattivazione dell'accesso all'endpoint pubblico ti impedisce di interagire con il cluster da remoto, a meno che tu non aggiunga l'indirizzo IP del client remoto come rete autorizzata.
Questo tutorial mostra come configurare un bastion host, ovvero una macchina host per scopi speciali progettata per resistere agli attacchi. L'host bastion utilizza Tinyproxy per inoltrare il traffico client al cluster. Utilizzi Identity-Aware Proxy (IAP) per accedere in modo sicuro all'bastion hostn dal client remoto.
Obiettivi
- Crea un cluster privato senza accesso all'endpoint pubblico.
- Esegui il deployment di una macchina virtuale (VM) Compute Engine da utilizzare come bastion host nella subnet del cluster.
- Utilizza IAP per connettere un client remoto al cluster tramite internet.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
- 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.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Dopo aver inizializzato gcloud CLI, aggiornala e installa i componenti richiesti:
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.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Dopo aver inizializzato gcloud CLI, aggiornala e installa i componenti richiesti:
gcloud components update gcloud components install alpha beta
CLUSTER_NAME: il nome del nuovo cluster.CONTROL_PLANE_LOCATION: la regione di Compute Engine del control plane del tuo cluster.SUBNET_NAME: il nome della nuova subnet in cui vuoi posizionare il cluster.Vai alla pagina Reti VPC nella console Google Cloud .
Fai clic sulla rete predefinita.
Nella sezione Subnet, fai clic su Aggiungi subnet.
Nella finestra di dialogo Aggiungi una subnet, specifica quanto segue:
- Nome: un nome per la nuova subnet.
- Regione: una regione per la subnet. Deve corrispondere alla regione del cluster.
- Intervallo di indirizzi IP: specifica
10.2.204.0/22o un altro intervallo che non sia in conflitto con altri intervalli nella rete VPC. - Per Accesso privato Google, seleziona l'opzione On.
Fai clic su Aggiungi.
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Fai clic su Crea.
Fai clic su Configura per GKE Autopilot.
Specifica un nome e una regione per il nuovo cluster. La regione deve essere la stessa della subnet.
Nella sezione Networking, seleziona l'opzione Cluster privato.
Deseleziona la casella di controllo Accedi al control plane utilizzando l'indirizzo IP esterno.
Dall'elenco a discesa Subnet nodo, seleziona la subnet che hai creato.
(Facoltativo) Configura altre impostazioni per il cluster.
Fai clic su Crea.
INSTANCE_NAME: il nome della VM.COMPUTE_ZONE: la zona Compute Engine per la VM. Posiziona questo valore nella stessa regione del cluster.SUBNET_NAME: la subnet in cui vuoi inserire la VM.Nella console Google Cloud , vai alla pagina Istanze VM.
Fai clic su Crea istanza.
Specifica quanto segue:
- Nome: il nome della VM.
- Regione e zona: la regione e la zona della tua VM. Utilizza la stessa regione del cluster.
- Tipo di macchina: un tipo di macchina. Scegli un tipo di macchina piccolo, ad esempio
e2-micro. - In Interfacce di rete, seleziona la stessa rete VPC e la stessa subnet del cluster.
- (Facoltativo) Configura altre impostazioni per l'istanza.
Fai clic su Crea.
Avvia una sessione nella VM:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_IDInstalla Tinyproxy:
sudo apt install tinyproxyApri il file di configurazione di Tinyproxy:
sudo vi /etc/tinyproxy/tinyproxy.confNel file, procedi nel seguente modo:
- Verifica che la porta sia
8888. Cerca la sezione
Allow:/Allow 127Aggiungi la seguente riga alla sezione
Allow:Allow localhost
- Verifica che la porta sia
Salva il file e riavvia Tinyproxy:
sudo service tinyproxy restartEsci dalla sessione:
exitRecupera le credenziali per il cluster:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=PROJECT_IDSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster privato.CONTROL_PLANE_LOCATION: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.PROJECT_ID: l'ID del Google Cloud progetto del cluster.
Crea un tunnel al bastion host utilizzando IAP:
gcloud compute ssh INSTANCE_NAME \ --tunnel-through-iap \ --project=PROJECT_ID \ --zone=COMPUTE_ZONE \ --ssh-flag="-4 -L8888:localhost:8888 -N -q -f"Specifica il proxy:
export HTTPS_PROXY=localhost:8888 kubectl get nsL'output è un elenco di spazi dei nomi nel cluster privato.
- 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 l'bastion host che hai deployment in questo tutorial:
gcloud compute instances delete INSTANCE_NAME \ --zone=COMPUTE_ZONEElimina il cluster:
gcloud container clusters delete CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATIONElimina la subnet:
gcloud compute networks subnets delete SUBNET_NAME \ --region=CONTROL_PLANE_LOCATION
Creare un cluster privato
Crea un nuovo cluster privato senza accesso client all'endpoint pubblico. Posiziona il cluster nella propria subnet. Puoi farlo utilizzando Google Cloud CLI o la console Google Cloud .
gcloud
Esegui questo 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
Sostituisci quanto segue:
Console
Crea una subnet Virtual Private Cloud
Creare un cluster privato
Puoi anche utilizzare un cluster GKE Standard con il
flag --master-ipv4-cidr
specificato.
Crea una VM bastion host
Crea una VM di Compute Engine all'interno della rete interna del cluster privato che funga da bastion host in grado di gestire il cluster.
gcloud
Crea una VM di 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
Sostituisci quanto segue:
Console
Crea regola firewall
Per consentire a IAP di connettersi alla VM bastion host, crea una regola firewall.
Esegui il deployment del proxy
Con l'bastion host e il cluster privato configurati, devi eseguire il deployment di un daemon proxy nell'host per inoltrare il traffico al control plane del cluster. Per questo tutorial, installa Tinyproxy.
Connettiti al cluster dal client remoto
Dopo aver configurato Tinyproxy, devi configurare il client remoto con le credenziali del cluster e specificare il proxy. Sul client remoto, procedi nel seguente modo:
Interrompere l'ascolto sul client remoto
Se vuoi ripristinare la modifica sul client remoto in qualsiasi momento, devi terminare il processo di listener sulla porta TCP 8888. Il comando per farlo varia in base al sistema operativo del client.
netstat -lnpt | grep 8888 | awk '{print $7}' | grep -o '[0-9]\+' | sort -u | xargs sudo kill
Risoluzione dei problemi
Limitazioni del firewall nelle reti aziendali
Se ti trovi su una rete aziendale con un firewall rigoroso, potresti non riuscire
a completare questo tutorial senza richiedere un'eccezione. Se richiedi un'eccezione, l'intervallo IP di origine per l'bastion host è 35.235.240.0/20 per impostazione predefinita.
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.