Neste documento, descrevemos como implantar o Apache Guacamole no GKE e no Cloud SQL.
Estas instruções são destinadas a administradores e engenheiros de servidores que querem hospedar o Guacamole no GKE e no Cloud SQL. O documento pressupõe que você já conheça a implantação de cargas de trabalho no Kubernetes e no Cloud SQL para MySQL. Recomendamos que você também esteja familiarizado com o Identity and Access Management e o Google Compute Engine.
Arquitetura
O diagrama a seguir mostra como um balanceador de carga do Google Cloud é configurado com o IAP para proteger uma instância do cliente Guacamole em execução no GKE:
O cliente Guacamole se conecta ao serviço de back-end guacd, que intermedia as conexões da área de trabalho remota com uma ou mais VMs do Compute Engine. Os scripts também implantam uma instância do Cloud SQL para gerenciar dados de configuração do Guacamole.
Veja mais detalhes em Apache Guacamole no GKE e Cloud SQL.
Objetivos
- Implantar a infraestrutura usando o Terraform.
- Criar um banco de dados do Guacamole no Cloud SQL.
- Implantar o Guacamole em um cluster do GKE usando o Skaffold.
- Testar uma conexão com uma VM usando o Guacamole.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Resource Manager, Service Usage, Artifact Registry, and Compute Engine APIs.
-
In the Google Cloud console, activate Cloud Shell.
Implante a infraestrutura
Nesta seção, você usará o Terraform para implantar os seguintes recursos:
- Nuvem privada virtual
- uma regra de firewall
- Um cluster do GKE
- Um repositório do Artifact Registry
- Cloud SQL para MySQL
- Uma VM para gerenciar o banco de dados MySQL
- Contas de serviço
A configuração do Terraform também permite o uso do IAP no seu projeto.
No Cloud Shell, clone o repositório do GitHub.
git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
Implante a infraestrutura necessária usando o Terraform:
cd guacamole-on-gcp/tf-infra unset GOOGLE_CLOUD_QUOTA_PROJECT terraform init -upgrade terraform apply
Siga as instruções para inserir o ID do projeto do Google Cloud.
Para aprovar a solicitação do Terraform para implantar recursos no projeto, insira
yes
.A implantação de todos os recursos leva alguns minutos.
Implantar o banco de dados do Guacamole
Nesta seção, você cria o banco de dados e as tabelas do Guacamole no Cloud SQL para MySQL e preenche o banco de dados com as informações de usuário do administrador.
No Cloud Shell, defina variáveis de ambiente e encontre a senha raiz do banco de dados:
cd .. source bin/read-tf-output.sh
Anote a senha raiz do banco de dados. você precisará dele nas etapas a seguir.
O script lê variáveis de saída da execução do Terraform e define as seguintes variáveis de ambiente, que são usadas ao longo deste procedimento:
CLOUD_SQL_INSTANCE ZONE REGION DB_MGMT_VM PROJECT_ID GKE_CLUSTER GUACAMOLE_URL SUBNET
Copie os arquivos de script
create-schema.sql
einsert-admin-user.sql
para a VM de gerenciamento do banco de dados e conecte-se à 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
Uma sessão do console para a VM de gerenciamento de banco de dados por meio do Cloud Shell está estabelecida.
Instale as ferramentas de cliente do MySQL:
sudo apt-get update sudo apt-get install -y mariadb-client
Conecte-se ao Cloud SQL e crie o banco de dados. Quando uma senha for solicitada, use a senha raiz que você anotou anteriormente nesta seção.
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
Conceda ao usuário o banco de dados recém-criado:
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
Depois que os comandos do MySQL forem executados, saia da sessão SSH da VM:
exit
Implantar o Guacamole no GKE usando o Skaffold
Nesta seção, você implantará o aplicativo Guacamole no cluster do GKE usando o Skaffold. O Skaffold lida com o fluxo de trabalho para criar, enviar e implantar as imagens do Guacamole nos clusters do GKE.
No Cloud Shell, implante a configuração do GKE usando o Terraform:
cd tf-k8s terraform init -upgrade terraform apply -parallelism=1
Receba credenciais para o cluster do GKE:
gcloud container clusters get-credentials \ --region $REGION $GKE_CLUSTER
Execute o Skaffold da raiz do repositório git clonado:
cd .. skaffold --default-repo $REGION-docker.pkg.dev/$PROJECT_ID/guac-repo run
A ferramenta Skaffold cria imagens de contêiner para o Guacamole por meio do Google Cloud Build (a linha de comando inclui uma sinalização que especifica para qual repositório enviar as imagens). A ferramenta também executa uma etapa de kustomize para gerar ConfigMaps e Secrets do Kubernetes com base na saída da execução do Terraform.
Verifique se o certificado foi provisionado:
kubectl get -w managedcertificates/guacamole-client-cert \ -n guacamole \ -o jsonpath="{.spec.domains[0]} is {.status.domainStatus[0].status}"
O provisionamento do certificado pode levar até 60 minutos.
Depois que o certificado for provisionado, você poderá visitar seu URL em um navegador.
Veja o URL da saída do Terraform:
echo $GUACAMOLE_URL
Em uma janela do navegador, digite o URL da etapa anterior.
Quando solicitado pelo IAP, faça login com suas credenciais do Google.
Depois de fazer login, você entra no Guacamole com privilégios administrativos, com base no script
insert-admin-user.sql
que executou anteriormente neste procedimento.
Agora é possível adicionar outros usuários com base no endereço de e-mail deles na interface do usuário do Guacamole. Para mais detalhes, consulte
Administração na documentação do Guacamole.
Esses usuários adicionais também exigem permissões por meio do Google
IAM, com o papel IAP-secured Web App User
.
Testar uma conexão com uma VM
Depois de implantar, configurar e fazer login no Guacamole, é possível criar uma VM do Windows e se conectar à VM recém-criada pelo Guacamole.
Criar uma VM
No Cloud Shell, crie uma VM do Windows para testar as conexões:
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
Depois de executar o comando, talvez seja necessário aguardar alguns minutos para que o Windows conclua a inicialização antes de prosseguir para a próxima etapa.
Redefina a senha do Windows para a VM que você acabou de criar:
gcloud compute reset-windows-password $TEST_VM \ --user=admin \ --zone=$ZONE
Adicionar uma nova conexão à VM
- Em uma janela do navegador, insira o URL da instância do Guacamole de Implantar Guacamole no GKE usando Skaffold e faça login pelo IAP.
- Na IU do Guacamole, clique no seu nome de usuário e selecione Configurações.
- Na guia Conexões, clique em Nova conexão.
- No campo Nome, insira um nome para a rede.
- No campo Local, digite o local da conexão.
- Na lista suspensa Protocolo, selecione RDP.
Em Rede, no campo Nome do host, insira o nome da VM que você criou,
windows-vm
.O DNS do projeto resolve esse nome do host para o endereço IP interno da instância.
Na seção Autenticação, configure os seguintes campos:
- Nome de usuário:
admin
- Senha: a senha que você recebeu ao redefinir a senha da VM
- Modo de segurança:
NLA
(autenticação no nível da rede) Ignorar certificado do servidor: marque a caixa de seleção
As VMs do Windows do Compute Engine são provisionadas com um certificado autoassinado para os serviços de Área de trabalho remota. Portanto, você precisa instruir o Guacamole a ignorar problemas de validação de certificado.
- Nome de usuário:
Clique em Save.
Clique no seu nome de usuário e selecione Início.
Clique na conexão que você acabou de criar para testar a conectividade. Após alguns segundos, a área de trabalho da instância de VM será exibida.
Para mais detalhes sobre como configurar o Guacamole, consulte o Manual do Apache Guacamole.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesse procedimento, exclua o projeto que contém eles ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
- 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.
Excluir os novos recursos
Como alternativa à exclusão de todo o projeto, é possível excluir os recursos individuais criados durante esse procedimento. Observe que a configuração da tela de permissão OAuth não pode ser removida de um projeto, apenas modificada.
No Cloud Shell, use o Terraform para excluir os recursos:
cd ~/guacamole-on-gcp/tf-k8s terraform destroy cd ~/guacamole-on-gcp/tf-infra terraform destroy gcloud compute instances delete $TEST_VM –-zone=$ZONE
A seguir
- Consulte as orientações do GKE sobre Como melhorar a segurança do seu cluster.
- Consulte Criptografar secrets na camada do aplicativo para saber como aumentar a segurança dos secrets, como credenciais de banco de dados e OAuth.
- Analise as Condições do IAM para saber como fornecer controle mais granular sobre o acesso do usuário ao Guacamole.
- Para saber mais sobre como a integração do IAP funciona, analise o provedor de autenticação personalizado no repositório do GitHub.
- Para mais arquiteturas de referência, diagramas e práticas recomendadas, confira a Central de arquitetura do Cloud.