Accedere da remoto a un cluster privato utilizzando un bastion host


Questo tutorial mostra come accedere a un cluster privato in Google Kubernetes Engine (GKE) su internet utilizzando un bastion host.

Puoi creare cluster privati GKE senza accesso client all'endpoint pubblico. Questa opzione di accesso migliora la sicurezza del cluster impedendo completamente l'accesso a internet al piano di controllo. Tuttavia, la disabilitazione dell'accesso all'endpoint pubblico ti impedisce di interagire con il cluster da remoto, a meno che non aggiungi l'indirizzo IP del tuo client remoto come rete autorizzata.

Questo tutorial mostra come configurare un bastion host, una macchina host per uso speciale progettata per resistere agli attacchi. Il bastion host utilizza Tinyproxy per inoltrare il traffico del client al cluster. Puoi utilizzare Identity-Aware Proxy (IAP) per accedere in modo sicuro al bastion host dal client remoto.

Obiettivi

  • Crea un cluster privato senza accesso all'endpoint pubblico.
  • Esegui il deployment di una macchina virtuale (VM) Compute Engine che funga da 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. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API GKE, Compute Engine, Identity-Aware Proxy.

    Abilita le API

  5. Installa Google Cloud CLI.
  6. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  7. Aggiorna e installa i componenti di gcloud:
    gcloud components update
    gcloud components install alpha beta
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  10. Abilita le API GKE, Compute Engine, Identity-Aware Proxy.

    Abilita le API

  11. Installa Google Cloud CLI.
  12. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  13. Aggiorna e installa i componenti di gcloud:
    gcloud components update
    gcloud components install alpha beta

Creare un cluster privato

Crea un nuovo cluster privato senza accesso client all'endpoint pubblico. Colloca il cluster nella propria subnet. Per farlo, usa Google Cloud CLI o la console Google Cloud.

gcloud

Esegui questo comando:

gcloud container clusters create-auto CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --create-subnetwork=name=SUBNET_NAME \
    --enable-master-authorized-networks \
    --enable-private-nodes \
    --enable-private-endpoint

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del nuovo cluster.
  • COMPUTE_REGION: la regione di Compute Engine per il cluster.
  • SUBNET_NAME: il nome della nuova subnet in cui vuoi posizionare il cluster.

Console

Crea una subnet Virtual Private Cloud

  1. Vai alla pagina Reti VPC nella console Google Cloud.

    Vai a Reti VPC

  2. Fai clic sulla rete predefinita.

  3. Nella sezione Subnet, fai clic su Aggiungi subnet.

  4. Nella finestra di dialogo Aggiungi una subnet, specifica quanto segue:

    1. Nome: il nome della nuova subnet.
    2. Regione: una regione per la subnet. Deve essere uguale alla regione del cluster.
    3. Intervallo di indirizzi IP: specifica 10.2.204.0/22 o un altro intervallo che non sia in conflitto con altri intervalli nella rete VPC.
    4. Per l'accesso privato Google, seleziona l'opzione On.
  5. Fai clic su Aggiungi.

Crea un cluster privato

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic su Crea.

  3. Fai clic su Configura per GKE Autopilot.

  4. Specifica un nome e una regione per il nuovo cluster. La regione deve essere la stessa della subnet.

  5. Nella sezione Networking, seleziona l'opzione Cluster privato.

  6. Deseleziona la casella di controllo Accedi al piano di controllo utilizzando l'indirizzo IP esterno.

  7. Dall'elenco a discesa Subnet nodo, seleziona la subnet che hai creato.

  8. Facoltativamente, configura altre impostazioni per il cluster.

  9. Fai clic su Crea.

Puoi anche utilizzare un cluster GKE Standard con il flag --master-ipv4-cidr specificato.

Crea una VM bastion host

Creare una VM di Compute Engine all'interno della rete interna del cluster privato per fungere 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:

  • INSTANCE_NAME: il nome della VM.
  • COMPUTE_ZONE: la zona di Compute Engine per la VM. Posizionalo nella stessa regione del cluster.
  • SUBNET_NAME: la subnet in cui vuoi posizionare la VM.

Console

  1. Vai alla pagina Istanze VM nella console Google Cloud.

    Vai a Istanze VM

  2. Fai clic su Crea istanza.

  3. Specifica quanto segue:

    1. Nome: il nome della VM.
    2. Regione e Zona: la regione e la zona della VM. Utilizza la stessa regione del cluster.
    3. Tipo di macchina: un tipo di macchina. Scegli un tipo di macchina di piccole dimensioni, ad esempio e2-micro.
    4. In Interfacce di rete, seleziona la stessa rete VPC e la stessa subnet del cluster.
    5. Facoltativamente, configura altre impostazioni per l'istanza.
  4. Fai clic su Crea.

Crea regola firewall

Per consentire a IAP di connettersi alla VM bastion host, crea una regola firewall.

Esegui il deployment del proxy

Con il bastion host e il cluster privato configurati, devi eseguire il deployment di un daemon proxy nell'host per inoltrare il traffico al piano di controllo del cluster. Per questo tutorial, devi installare Tinyproxy.

  1. Avvia una sessione nella VM:

    gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
    
  2. Installa Tinyproxy:

    sudo apt install tinyproxy
    
  3. Apri il file di configurazione Tinyproxy:

    sudo vi /etc/tinyproxy/tinyproxy.conf
    
  4. Nel file, procedi nel seguente modo:

    1. Verifica che la porta sia 8888.
    2. Cerca la sezione Allow:

        /Allow 127
      
    3. Aggiungi la seguente riga alla sezione Allow:

        Allow localhost
      
  5. Salva il file e riavvia Tinyproxy:

    sudo service tinyproxy restart
    
  6. Esci dalla sessione:

    exit
    

Connettiti al cluster dal client remoto

Dopo aver configurato Tinyproxy, devi configurare il client remoto con le credenziali del cluster e specificare il proxy. Esegui le seguenti operazioni sul client remoto:

  1. Recupera le credenziali per il cluster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --project=PROJECT_ID
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster privato.
    • COMPUTE_REGION: la regione del cluster.
    • PROJECT_ID: l'ID del progetto Google Cloud del cluster.
  2. 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"
    
  3. Specifica il proxy:

    export HTTPS_PROXY=localhost:8888
    kubectl get ns
    

    L'output è un elenco di spazi dei nomi nel cluster privato.

Interrompi l'ascolto sul client remoto

Se vuoi ripristinare la modifica sul client remoto in qualsiasi momento, devi terminare il processo del listener sulla porta TCP 8888. Il comando per eseguire questa operazione è diverso a seconda del 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 usi una rete aziendale con un firewall rigido, potresti non essere in grado di completare questo tutorial senza richiedere un'eccezione. Se richiedi un'eccezione, l'intervallo IP di origine per il 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.

Elimina il progetto

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina singole risorse

  1. Elimina il bastion host di cui hai eseguito il deployment in questo tutorial:

    gcloud compute instances delete INSTANCE_NAME \
        --zone=COMPUTE_ZONE
    
  2. Elimina il cluster:

    gcloud container clusters delete CLUSTER_NAME \
        --region=COMPUTE_REGION
    
  3. Elimina la subnet:

    gcloud compute networks subnets delete SUBNET_NAME \
        --region=COMPUTE_REGION