Implemente o Apache Guacamole no GKE e no Cloud SQL

Last reviewed 2025-01-09 UTC

Este documento descreve como implementar o Apache Guacamole no GKE e no Cloud SQL.

Estas instruções destinam-se a administradores e engenheiros de servidores que querem alojar o Guacamole no GKE e no Cloud SQL. Este documento pressupõe que tem experiência na implementação de cargas de trabalho no Kubernetes e no Cloud SQL para MySQL. Recomendamos que também se familiarize com a gestão de identidade e acesso e o Google Compute Engine.

Arquitetura

O diagrama seguinte mostra como um Google Cloud equilibrador de carga é configurado com o IAP para proteger uma instância do cliente Guacamole em execução no GKE:

Arquitetura para o balanceador de carga Google Cloud configurado com o IAP.

O cliente Guacamole liga-se ao serviço de back-end guacd, que negoceia ligações de ambiente de trabalho remoto a uma ou mais VMs do Compute Engine. Os scripts também implementam uma instância do Cloud SQL para gerir dados de configuração do Guacamole.

Para obter detalhes, consulte o artigo Apache Guacamole no GKE e Cloud SQL.

Objetivos

  • Implemente a infraestrutura através do Terraform.
  • Crie uma base de dados do Guacamole no Cloud SQL.
  • Implemente o Guacamole num cluster do GKE através do Skaffold.
  • Teste uma ligação a uma VM através do Guacamole.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Antes de começar

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Activate Cloud Shell

    Implemente a infraestrutura

    Nesta secção, vai usar o Terraform para implementar os seguintes recursos:

    • Nuvem virtual privada
    • Uma regra de firewall
    • Um cluster do GKE
    • Um repositório do Artifact Registry
    • Cloud SQL para MySQL
    • Uma VM para gerir a base de dados MySQL
    • Contas de serviço

    A configuração do Terraform também permite a utilização de CAs no seu projeto.

    1. No Cloud Shell, clone o repositório do GitHub:

      git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
      
    2. Implemente a infraestrutura necessária através do Terraform:

      cd guacamole-on-gcp/tf-infra
      unset GOOGLE_CLOUD_QUOTA_PROJECT
      terraform init -upgrade
      terraform apply
      
    3. Siga as instruções para introduzir o seu Google Cloud ID do projeto.

    4. Para aprovar o pedido do Terraform para implementar recursos no seu projeto, introduza yes.

      A implementação de todos os recursos demora vários minutos.

    Implemente a base de dados do Guacamole

    Nesta secção, cria a base de dados e as tabelas do Guacamole no Cloud SQL para MySQL e preenche a base de dados com as informações do utilizador administrador.

    1. No Cloud Shell, defina as variáveis de ambiente e encontre a palavra-passe de raiz da base de dados:

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

      Tome nota da palavra-passe de raiz da base de dados. Vai precisar dela nos passos seguintes.

      O script lê as 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
      
    2. Copie os ficheiros de script create-schema.sql e insert-admin-user.sql para a VM de gestão da base de dados e, em seguida, ligue-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 da consola para a VM de gestão de bases de dados através do Cloud Shell já está estabelecida.

    3. Instale as ferramentas de cliente do MySQL:

      sudo apt-get update
      sudo apt-get install -y mariadb-client
      
    4. Associe-se ao Cloud SQL e crie a base de dados. Quando lhe for pedido uma palavra-passe, use a palavra-passe de raiz que anotou anteriormente nesta secçã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
      
    5. Conceda as autorizações do utilizador da base de dados na base de dados recém-criada:

      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. Depois de os comandos MySQL terminarem a execução, saia da sessão SSH da VM:

      exit
      

    Implemente o Guacamole no GKE através do Skaffold

    Nesta secção, implementa a aplicação Guacamole no cluster do GKE através do Skaffold. O Skaffold processa o fluxo de trabalho para criar, enviar e implementar as imagens do Guacamole nos clusters do GKE.

    1. No Cloud Shell, implemente a configuração do GKE através do Terraform:

      cd tf-k8s
      terraform init -upgrade
      terraform apply -parallelism=1
      
    2. Obtenha credenciais para o cluster do GKE:

      gcloud container clusters get-credentials \
          --region $REGION $GKE_CLUSTER
      
    3. Execute o Skaffold a partir 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 contentores para o Guacamole através do Google Cloud Build (a linha de comandos inclui uma flag que especifica para que repositório enviar as imagens). A ferramenta também executa um passo kustomize para gerar ConfigMaps e Secrets do Kubernetes com base no resultado da execução do Terraform.

    4. Verifique se o certificado foi aprovisionado:

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

      O aprovisionamento do certificado pode demorar até 60 minutos.

    5. Assim que o certificado for aprovisionado, pode visitar o seu URL num navegador.

      1. Veja o URL na saída do Terraform:

        echo $GUACAMOLE_URL
        
      2. Numa janela do navegador, introduza o URL que obteve no passo anterior.

      3. Quando o IAP lhe pedir, inicie sessão com as suas credenciais Google.

        Depois de iniciar sessão, tem sessão iniciada no Guacamole com privilégios administrativos, com base no script insert-admin-user.sql que executou anteriormente neste procedimento.

    Agora, pode adicionar utilizadores adicionais com base no respetivo endereço de email através da interface do utilizador do Guacamole. Para ver detalhes, consulte o artigo Administração na documentação do Guacamole. Estes utilizadores adicionais também requerem autorizações através do Google IAM, com a função IAP-secured Web App User.

    Teste uma ligação a uma VM

    Depois de implementar, configurar e iniciar sessão com êxito no Guacamole, pode criar uma VM do Windows e estabelecer ligação à VM recém-criada através do Guacamole.

    Crie uma VM

    1. No Cloud Shell, crie uma VM do Windows para testar as ligações 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
      

      Depois de executar o comando, pode ter de aguardar alguns minutos para que o Windows termine a inicialização antes de avançar para o passo seguinte.

    2. Reponha a palavra-passe do Windows para a VM que acabou de criar:

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

    Adicione uma nova ligação à VM

    1. Numa janela do navegador, introduza o URL da instância do Guacamole a partir do artigo Implemente o Guacamole no GKE com o Skaffold e, em seguida, inicie sessão através do IAP.
    2. Na IU do Guacamole, clique no seu nome de utilizador e, de seguida, em Definições.
    3. No separador Associações, clique em Nova associação.
      1. No campo Nome, introduza um nome para a associação.
      2. No campo Localização, introduza a localização da ligação.
      3. Na lista pendente Protocolo, selecione RDP.
    4. Em Rede, no campo Nome do anfitrião, introduza o nome da VM que criou, windows-vm.

      O DNS do seu projeto resolve este nome do anfitrião para o endereço IP interno da instância.

    5. Na secção Autenticação, defina os seguintes campos:

      1. Nome de utilizador: admin
      2. Palavra-passe: a palavra-passe que recebeu quando repôs a palavra-passe da VM
      3. Modo de segurança: NLA (autenticação ao nível da rede)
      4. Ignorar certificado do servidor: selecione a caixa de verificação

        As VMs do Windows do Compute Engine são aprovisionadas com um certificado autoassinado para os Serviços de ambiente de trabalho remoto, pelo que tem de dar instruções ao Guacamole para ignorar os problemas de validação de certificados.

    6. Clique em Guardar.

    7. Clique no seu nome de utilizador e selecione Casa.

    8. Clique na associação que acabou de criar para testar a conetividade. Após alguns segundos, deve ver o ambiente de trabalho da instância de VM.

    Para mais detalhes sobre a configuração do Guacamole, consulte o manual do Apache Guacamole.

    Limpar

    Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste procedimento, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

    Elimine o projeto

    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.

    Elimine os novos recursos

    Em alternativa à eliminação de todo o projeto, pode eliminar os recursos individuais criados durante este procedimento. Tenha em atenção que a configuração do ecrã de consentimento OAuth não pode ser removida de um projeto, apenas modificada.

    • No Cloud Shell, use o Terraform para eliminar 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
      

    O que se segue?

    Colaboradores

    Autor: Richard Grime | Principal Architect, UK Public Sector

    Outros colaboradores: