Questo documento descrive come eseguire il deployment di Apache Guacamole su GKE e Cloud SQL.
Queste istruzioni sono rivolte agli amministratori di server e agli ingegneri che vogliono ospitare Guacamole su GKE e Cloud SQL. Il documento presuppone che tu conosca il deployment di carichi di lavoro in Kubernetes e Cloud SQL per MySQL. Ti consigliamo di acquisire familiarità anche con Identity and Access Management e Google Compute Engine.
Architettura
Il seguente diagramma mostra come un bilanciatore del carico Google Cloud è 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 media le connessioni desktop remote con una o più VM di Compute Engine. Gli script eseguono anche 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.
- Crea un database Guacamole in Cloud SQL.
- Esegui il deployment di Guacamole in un cluster GKE utilizzando Skaffold.
- Testa 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.
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
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Resource Manager, Service Usage, Artifact Registry, and Compute Engine.
-
Nella console Google Cloud, 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
- Account di servizio
La configurazione Terraform consente inoltre l'uso di IAP nel progetto.
In Cloud Shell, clona il repository GitHub:
git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
Esegui il deployment dell'infrastruttura richiesta utilizzando Terraform:
cd guacamole-on-gcp/tf-infra unset GOOGLE_CLOUD_QUOTA_PROJECT terraform init -upgrade terraform apply
Segui le istruzioni per inserire l'ID progetto Google Cloud.
Per approvare la richiesta di Terraform per il deployment di 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 in Cloud SQL per MySQL e completerai il database con le informazioni utente amministratore.
In Cloud Shell, imposta le variabili di ambiente e trova la password radice del database:
cd .. source bin/read-tf-output.sh
Prendi nota della password root del database; ti servirà nei passaggi seguenti.
Lo script legge le variabili di output dall'esecuzione di Terraform e imposta le seguenti variabili di ambiente, utilizzate nell'intera procedura:
CLOUD_SQL_INSTANCE ZONE REGION DB_MGMT_VM PROJECT_ID GKE_CLUSTER GUACAMOLE_URL SUBNET
Copia i file di script
create-schema.sql
einsert-admin-user.sql
nella VM di gestione del 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
Viene ora stabilita una sessione della console alla VM Database Management tramite Cloud Shell.
Installa gli strumenti client MySQL:
sudo apt-get update sudo apt-get install -y mariadb-client
Connettiti a Cloud SQL e crea il database. Quando ti viene chiesta 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 -p
Concedi al database le autorizzazioni utente per il 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
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 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=1
Ottieni le credenziali per il cluster GKE:
gcloud container clusters get-credentials \ --region $REGION $GKE_CLUSTER
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 a quale repository inviare le immagini). Lo strumento esegue anche un passaggio kustomize per generare oggetti ConfigMap e secret di Kubernetes in base all'output dell'esecuzione Terraform.
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.
Una volta eseguito il provisioning del certificato, puoi visitare l'URL in un browser.
Visualizza l'URL dall'output Terraform:
echo $GUACAMOLE_URL
In una finestra del browser, inserisci l'URL ottenuto nel passaggio precedente.
Quando ti viene richiesto da IAP, accedi con le tue credenziali Google.
Dopo aver eseguito l'accesso, verrà eseguito l'accesso a Guacamole con privilegi amministrativi, 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 Amministrazione nella documentazione di Guacamole.
Questi utenti aggiuntivi richiedono anche le autorizzazioni tramite Google
IAM, con il ruolo IAP-secured Web App User
.
Testa una connessione a una VM
Dopo 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-boot
Dopo aver eseguito il comando, potresti dover attendere alcuni minuti per il completamento dell'inizializzazione di Windows prima di andare al passaggio successivo.
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
- In una finestra del browser, inserisci l'URL dell'istanza Guacamole da eseguire il deployment di Guacamole in GKE utilizzando Skaffold, quindi accedi tramite IAP.
- Nell'interfaccia utente di Guacamole, fai clic sul tuo nome utente, quindi su Settings (Impostazioni).
- Nella scheda Connessioni, fai clic su Nuova connessione.
- Nel campo Nome, inserisci un nome per la connessione.
- Nel campo Location (Posizione), 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 tuo 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
(autenticazione a livello di rete) 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 Desktop remoto, quindi è necessario chiedere a Guacamole di ignorare i problemi di convalida dei certificati.
- Nome utente:
Fai clic su Salva.
Fai clic sul tuo nome utente e seleziona Home.
Fai clic sulla connessione appena creata per testare la connettività. Dopo qualche secondo, dovresti vedere il desktop dell'istanza VM.
Per ulteriori dettagli sulla configurazione di Guacamole, consulta il 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 elimina le singole risorse.
Elimina il progetto
- Nella console Google Cloud, 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 del progetto e 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 soltanto 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
- Rivedi le indicazioni di GKE su Rafforzamento della sicurezza del cluster.
- Consulta Crittografia dei secret a livello di applicazione per scoprire come potenziare la sicurezza per i secret, ad esempio le credenziali del database e le credenziali OAuth.
- Consulta le condizioni IAM per scoprire come offrire un controllo più granulare sull'accesso degli utenti a Guacamole.
- Per saperne di più su come funziona l'integrazione IAP, esamina il provider di autenticazione personalizzata nel repository GitHub.
- Per ulteriori architetture di riferimento, diagrammi e best practice, esplora il Cloud Architecture Center.