Questo documento descrive come eseguire il deployment di Apache Guacamole su GKE e Cloud SQL.
Queste istruzioni sono destinate agli amministratori e agli ingegneri dei server che vogliono ospitare Guacamole su GKE e Cloud SQL. Il documento presuppone che tu abbia familiarità con il deployment dei carichi di lavoro su Kubernetes e Cloud SQL per MySQL. Ti consigliamo di avere familiarità anche con Identity and Access Management e Google Compute Engine.
Architettura
Il seguente diagramma mostra come un Google Cloud bilanciatore del carico è configurato con IAP per proteggere un'istanza del client Guacamole in esecuzione in GKE:
Il client Guacamole si connette al servizio di backend guacd, che gestisce le connessioni desktop remoto a una o più VM Compute Engine. Gli script eseguono anche il deployment di un'istanza Cloud SQL per gestire i dati di configurazione di Guacamole.
Per maggiori dettagli, vedi Apache Guacamole su GKE e Cloud SQL.
Obiettivi
- Eseguire il deployment dell'infrastruttura utilizzando Terraform.
- Creare un database Guacamole in Cloud SQL.
- Eseguire il deployment di Guacamole in un cluster GKE utilizzando Skaffold.
- Testare una connessione a una VM tramite Guacamole.
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
-
Nella Google Cloud console, nella pagina di selezione del progetto, seleziona o crea un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Selezionare un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
-
Creare un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'resourcemanager.projects.createautorizzazione. Scopri come concedere i ruoli.
-
Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.
-
Abilita le API Resource Manager, Service Usage, Artifact Registry e Compute Engine.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli. -
Nella Google Cloud console, attiva 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
- Service account
La configurazione di Terraform consente anche l'utilizzo di IAP nel tuo progetto.
In Cloud Shell, clona il repository GitHub:
git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.gitEsegui il deployment dell'infrastruttura richiesta utilizzando Terraform:
cd guacamole-on-gcp/tf-infra unset GOOGLE_CLOUD_QUOTA_PROJECT terraform init -upgrade terraform applySegui le istruzioni per inserire l'ID Google Cloud progetto.
Per approvare la richiesta di Terraform di eseguire il deployment delle risorse nel tuo progetto, inserisci
yes.Il completamento del deployment di tutte le risorse richiede alcuni minuti.
Esegui il deployment del database Guacamole
In questa sezione creerai il database e le tabelle Guacamole in Cloud SQL per MySQL e li popolerai con le informazioni dell'utente amministratore.
In Cloud Shell, imposta le variabili di ambiente e trova la password root del database:
cd .. source bin/read-tf-output.shPrendi nota della password root del database, ti servirà nei passaggi successivi.
Lo script legge le variabili di output dall'esecuzione di Terraform e imposta le seguenti variabili di ambiente, utilizzate in questa procedura:
CLOUD_SQL_INSTANCE ZONE REGION DB_MGMT_VM PROJECT_ID GKE_CLUSTER GUACAMOLE_URL SUBNETCopia i file di script
create-schema.sqleinsert-admin-user.sqlnella VM di gestione di database, quindi 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È stata stabilita una sessione della console alla VM di gestione del database tramite Cloud Shell.
Installa gli strumenti client MySQL:
sudo apt-get update sudo apt-get install -y mariadb-clientConnettiti a Cloud SQL e crea il database. Quando ti viene richiesta una password, utilizza 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 -pConcedi le autorizzazioni dell'utente del 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; quitAl termine dell'esecuzione dei comandi MySQL, esci dalla sessione SSH della VM:
exit
Esegui il deployment di Guacamole su GKE utilizzando Skaffold
In questa sezione, eseguirai il deployment dell'applicazione Guacamole nel cluster GKE utilizzando Skaffold. Skaffold gestisce il flusso di lavoro per la creazione, il push e il deployment delle immagini Guacamole nei cluster GKE.
In Cloud Shell, esegui il deployment della configurazione GKE utilizzando Terraform:
cd tf-k8s terraform init -upgrade terraform apply -parallelism=1Recupera le credenziali per il cluster GKE:
gcloud container clusters get-credentials \ --region $REGION $GKE_CLUSTEREsegui Skaffold dalla root del repository git clonato:
cd .. skaffold --default-repo $REGION-docker.pkg.dev/$PROJECT_ID/guac-repo runLo 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 di Kubernetes in base all'output dell' esecuzione di Terraform.
Verifica che il certificato sia stato sottoposto a provisioning:
kubectl get -w managedcertificates/guacamole-client-cert \ -n guacamole \ -o jsonpath="{.spec.domains[0]} is {.status.domainStatus[0].status}"Il completamento del provisioning del certificato può richiedere fino a 60 minuti.
Una volta eseguito il provisioning del certificato, puoi visitare l'URL in un browser.
Visualizza l'URL dall'output di Terraform:
echo $GUACAMOLE_URLIn una finestra del browser, inserisci l'URL che hai ottenuto nel passaggio precedente.
Quando ti viene richiesto da IAP, accedi con le tue credenziali Google.
Dopo aver eseguito l'accesso, accedi a Guacamole con i privilegi di amministratore, in base allo script
insert-admin-user.sqlche 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
Amministrazione nella documentazione di Guacamole.
Questi utenti aggiuntivi richiedono anche autorizzazioni tramite Google IAM, con il ruolo IAP-secured Web App User.
Testa una connessione a una VM
Dopo aver eseguito il deployment, la configurazione e l'accesso a Guacamole, puoi creare una VM Windows e connetterti alla VM appena creata tramite Guacamole.
Crea una VM
In Cloud Shell, crea una VM Windows per testare le connessioni a:
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-bootDopo aver eseguito il comando, potrebbe essere necessario attendere alcuni minuti prima che Windows completi l'inizializzazione, prima di procedere al passaggio successivo.
Reimposta la password di Windows per la VM che hai appena creato:
gcloud compute reset-windows-password $TEST_VM \ --user=admin \ --zone=$ZONE
Aggiungi una nuova connessione alla VM
- In una finestra del browser, inserisci l'URL dell'istanza Guacamole da Esegui il deployment di Guacamole su GKE utilizzando Skaffold, quindi accedi tramite IAP.
- Nell'interfaccia utente di Guacamole, fai clic sul tuo nome utente, quindi su Impostazioni.
- Nella scheda Connessioni, fai clic su Nuova connessione.
- Nel campo Nome, inserisci un nome per la connessione.
- Nel campo Località, inserisci la località della connessione.
- Nell'elenco a discesa Protocollo, seleziona RDP.
In Rete, nel campo Nome host, inserisci il nome della VM che hai creato,
windows-vm.Il DNS del progetto risolve questo nome host nell'indirizzo IP interno dell'istanza.
Nella sezione Autenticazione, imposta i seguenti campi:
- Nome utente:
admin - Password:la password che hai ricevuto quando hai reimpostato la password per la VM
- Modalità di sicurezza:
NLA(Network Level Authentication) Ignora certificato server:seleziona la casella di controllo
Le VM Windows Compute Engine vengono sottoposte a provisioning con un certificato autofirmato per Remote Desktop Services, quindi devi indicare a Guacamole di ignorare i problemi di convalida del certificato.
- Nome utente:
Fai clic su Salva.
Fai clic sul tuo nome utente e seleziona Home.
Fai clic sulla connessione che hai appena creato per testare la connettività. Dopo alcuni secondi, dovresti vedere il desktop dell'istanza VM.
Per maggiori dettagli sulla configurazione di Guacamole, consulta il manuale di Apache Guacamole.
Libera spazio
Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa procedura, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
Elimina le nuove risorse
In alternativa all'eliminazione dell'intero progetto, puoi eliminare le singole risorse create durante questa procedura. Tieni presente che la configurazione della schermata per il consenso OAuth 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
- Consulta le indicazioni di GKE su come proteggere il cluster.
- Consulta Crittografia dei secret a livello di applicazione per scoprire come aumentare la sicurezza dei secret, come le credenziali del database e le credenziali OAuth.
- Consulta Condizioni IAM per scoprire come fornire un controllo più granulare dell'accesso degli utenti a Guacamole.
- Scopri di più sul funzionamento dell'integrazione di IAP esaminando il provider di autenticazione personalizzato nel repository GitHub.
- Per ulteriori architetture di riferimento, diagrammi e best practice, esplora il Cloud Architecture Center.
Collaboratori
Autore: Richard Grime | Principal Architect, UK Public Sector
Altri collaboratori:
- Aaron Lind | Solution Engineer, Application Innovation
- Eyal Ben Ivri | Cloud Solutions Architect
- Ido Flatow | Cloud Solutions Architect