Esegui il deployment di Apache Guacamole su GKE e Cloud SQL

Last reviewed 2023-11-15 UTC

Questo documento descrive come eseguire il deployment di Apache Guacamole su GKE e Cloud SQL.

Queste istruzioni sono rivolte agli amministratori e agli ingegneri di server che vogliono ospitare Guacamole su GKE e Cloud SQL. Il documento presuppone che tu abbia familiarità con il deployment di carichi di lavoro in Kubernetes e Cloud SQL per MySQL. Ti consigliamo inoltre di avere familiarità con Identity and Access Management e Google Compute Engine.

Architettura

Il seguente diagramma mostra come viene eseguito il bilanciamento del carico di Google Cloud configurato con IAP, per proteggere un'istanza in esecuzione su GKE:

Architettura per il bilanciatore del carico Google Cloud configurato con IAP.

Il client Guacamole si connette al servizio di backend guacd, che gestisce le connessioni da desktop remoto a una o più VM Compute Engine. Gli script eseguire il deployment di un'istanza Cloud SQL per gestire i dati di configurazione per Guacamole.

Per maggiori dettagli, consulta Apache Guacamole su GKE e Cloud SQL.

Obiettivi

  • Eseguire il deployment dell'infrastruttura con Terraform.
  • Creare un database Guacamole in Cloud SQL.
  • Eseguire il deployment di Guacamole in un cluster GKE utilizzando Skaffold.
  • Testa una connessione a una VM tramite Guacamole.

Costi

In questo documento utilizzi 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 potrebbero essere idonei per una prova gratuita.

Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.

Prima di iniziare

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the Resource Manager, Service Usage, Artifact Registry, and Compute Engine APIs.

    Enable the APIs

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

Esegui il deployment dell'infrastruttura

In questa sezione utilizzerai Terraform per eseguire il deployment delle seguenti risorse:

  • Virtual Private Cloud
  • Una regola firewall
  • Un cluster GKE
  • un repository Artifact Registry
  • Cloud SQL per MySQL
  • Una VM per la gestione del database MySQL
  • Account di servizio

La configurazione Terraform abilita inoltre l'uso di IAP nel tuo progetto.

  1. In Cloud Shell, clona il repository GitHub:

    git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
    
  2. Esegui il deployment dell'infrastruttura richiesta utilizzando Terraform:

    cd guacamole-on-gcp/tf-infra
    unset GOOGLE_CLOUD_QUOTA_PROJECT
    terraform init -upgrade
    terraform apply
    
  3. Segui le istruzioni per inserire l'ID progetto Google Cloud.

  4. Per approvare la richiesta di Terraform di eseguire il deployment delle risorse nel tuo progetto, inserisci yes.

    Il deployment di tutte le risorse richiede diversi minuti.

esegui il deployment del database Guacamole

In questa sezione creerai il database e le tabelle Guacamole Cloud SQL per MySQL e compila il database con l'utente amministratore informazioni.

  1. In Cloud Shell, imposta le variabili di ambiente e trova la password di root del database:

    cd ..
    source bin/read-tf-output.sh
    

    Prendi nota della password root del database, che ti servirà nei passaggi seguenti.

    Lo script legge le variabili di output dall'esecuzione di Terraform e imposta la classe le seguenti variabili di ambiente, utilizzate in questa procedura:

    CLOUD_SQL_INSTANCE
    ZONE
    REGION
    DB_MGMT_VM
    PROJECT_ID
    GKE_CLUSTER
    GUACAMOLE_URL
    SUBNET
    
  2. Copia i file di script create-schema.sql e insert-admin-user.sql alla VM di gestione dei database e poi connettiti alla VM:

    gcloud compute scp \
        --tunnel-through-iap \
        --zone=$ZONE \
        create-schema.sql \
        insert-admin-user.sql \
        $DB_MGMT_VM:
    
    gcloud compute ssh $DB_MGMT_VM \
        --zone=$ZONE \
        --tunnel-through-iap
    

    Ora è stata stabilita una sessione della console con la VM di gestione del database tramite Cloud Shell.

  3. Installa gli strumenti del client MySQL:

    sudo apt-get update
    sudo apt-get install -y mariadb-client
    
  4. Connettiti a Cloud SQL e crea il database. Quando richiesto per la password, usa la password root che hai annotato in precedenza in questa sezione.

    export CLOUD_SQL_PRIVATE_IP=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/cloud_sql_ip -H "Metadata-Flavor: Google")
    mysql -h $CLOUD_SQL_PRIVATE_IP -u root -p
    
  5. Concedi le autorizzazioni utente al database sul database appena creato:

    CREATE DATABASE guacamole;
    USE guacamole;
    GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole.* TO 'guac-db-user';
    FLUSH PRIVILEGES;
    SOURCE create-schema.sql;
    SOURCE insert-admin-user.sql;
    quit
    
  6. Al termine dell'esecuzione dei comandi MySQL, esci dalla sessione SSH della VM:

    exit
    

Esegui il deployment di Guacamole in GKE utilizzando Skaffold

In questa sezione eseguirai il deployment dell'applicazione Guacamole al cluster GKE, utilizzando Skaffold. Skaffold gestisce il flusso di lavoro per la compilazione, l'invio e il deployment delle immagini Guacamole nei cluster GKE.

  1. In Cloud Shell, esegui il deployment della configurazione GKE utilizzando Terraform:

    cd tf-k8s
    terraform init -upgrade
    terraform apply -parallelism=1
    
  2. Ottieni le credenziali per il cluster GKE:

    gcloud container clusters get-credentials \
        --region $REGION $GKE_CLUSTER
    
  3. Esegui Skaffold dalla radice del repository Git clonato:

    cd ..
    skaffold --default-repo $REGION-docker.pkg.dev/$PROJECT_ID/guac-repo run
    

    Lo strumento Skaffold crea immagini container per Guacamole tramite Google Cloud Build (la riga di comando include un flag che specifica il repository in cui eseguire il push delle immagini). Lo strumento esegue anche un passaggio kustomize per generare ConfigMap e secret Kubernetes in base all'output dell'esecuzione di Terraform.

  4. Verifica che sia stato eseguito il provisioning del certificato:

    kubectl get -w managedcertificates/guacamole-client-cert \
    -n guacamole \
    -o jsonpath="{.spec.domains[0]} is {.status.domainStatus[0].status}"
    

    Il provisioning del certificato può richiedere fino a 60 minuti.

  5. Una volta eseguito il provisioning del certificato, puoi visitare il tuo URL in un browser.

    1. Visualizza l'URL dall'output Terraform:

      echo $GUACAMOLE_URL
      
    2. In una finestra del browser, inserisci l'URL che hai ottenuto nel passaggio precedente.

    3. Quando IAP ti chiede, accedi con il tuo e credenziali.

      Dopo aver eseguito l'accesso, avrai eseguito l'accesso a Guacamole con il ruolo privilegiati, in base allo script insert-admin-user.sql che hai eseguito in precedenza in questa procedura.

Ora puoi aggiungere altri utenti in base al loro indirizzo email tramite l'interfaccia utente di Guacamole. Per maggiori dettagli, consulta la sezione Amministrazione nella documentazione di Guacamole. Questi utenti aggiuntivi richiedono anche autorizzazioni tramite Google IAM, con il ruolo IAP-secured Web App User.

Testare una connessione a una VM

Dopo aver eseguito il deployment, configurato e eseguito l'accesso a Guacamole, puoi creare una VM Windows e connetterti alla VM appena creata tramite Guacamole.

Crea una VM

  1. In Cloud Shell, crea una VM Windows per testare le connessioni per:

    export TEST_VM=windows-vm
    gcloud compute instances create $TEST_VM \
        --project=$PROJECT_ID \
        --zone=$ZONE \
        --machine-type=n1-standard-1 \
        --subnet=$SUBNET \
        --no-address \
        --image-family=windows-2019 \
        --image-project=windows-cloud \
        --boot-disk-size=50GB \
        --boot-disk-type=pd-standard \
        —-shielded-secure-boot
    

    Dopo aver eseguito il comando, potrebbe essere necessario attendere qualche minuto prima che Windows completa l'inizializzazione, prima di procedere con il passaggio successivo.

  2. Reimposta la password di Windows per la VM appena creata:

    gcloud compute reset-windows-password $TEST_VM \
        --user=admin \
        --zone=$ZONE
    

Aggiungi una nuova connessione alla VM

  1. In una finestra del browser, inserisci l'URL dell'istanza Guacamole da Esegui il deployment di Guacamole in GKE utilizzando Skaffold e poi accedi tramite IAP.
  2. Nell'interfaccia utente di Guacamole, fai clic sul tuo nome utente e poi su Impostazioni.
  3. Nella scheda Connessioni, fai clic su Nuova connessione.
    1. Nel campo Nome, inserisci un nome per la connessione.
    2. Nel campo Posizione, inserisci la posizione della connessione.
    3. Nell'elenco a discesa Protocollo, seleziona RDP.
  4. In Network (Rete), nel campo Hostname (Nome host), inserisci il nome della VM che hai creato, windows-vm.

    Il DNS del progetto risolve questo nome host all'indirizzo IP interno dell'istanza.

  5. Nella sezione Autenticazione, imposta i seguenti campi:

    1. Nome utente: admin
    2. Password: la password che hai ricevuto quando hai reimpostato la password per la VM
    3. Modalità di sicurezza:NLA (autenticazione a livello di rete)
    4. Ignora certificato server: seleziona la casella di controllo.

      Il provisioning delle VM Windows di Compute Engine viene eseguito con un certificato autofirmato per i servizi Remote Desktop, pertanto devi indicare a Guacamole di ignorare i problemi di convalida del certificato.

  6. Fai clic su Salva.

  7. Fai clic sul tuo nome utente e seleziona Home.

  8. Fai clic sulla connessione appena creata per verificare la connettività. Dopo alcuni secondi, dovresti vedere il desktop dell'istanza VM.

Per maggiori dettagli sulla configurazione di Guacamole, consulta Manuale di Apache Guacamole.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate. In questa procedura, elimina il progetto che contiene le risorse oppure mantieni il progetto ed eliminare le singole risorse.

Elimina il progetto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Elimina le nuove risorse

In alternativa a eliminare l'intero progetto, puoi eliminare il singolo a risorse create durante questa procedura. La schermata per il consenso OAuth configurazione non può essere rimossa da un progetto, ma solo modificata.

  • In Cloud Shell, utilizza Terraform per eliminare le risorse:

    cd ~/guacamole-on-gcp/tf-k8s
    terraform destroy
    
    cd ~/guacamole-on-gcp/tf-infra
    terraform destroy
    
    gcloud compute instances delete $TEST_VM -zone=$ZONE
    

Passaggi successivi