Implantar o Apache Guacamole no GKE e no Cloud SQL

Last reviewed 2023-11-15 UTC

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:

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

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. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

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

  1. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Ative as APIs Resource Manager, Service Usage, Artifact Registry, and Compute Engine.

    Ative as APIs

  4. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o 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.

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

    git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
    
  2. Implante a infraestrutura necessária usando o Terraform:

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

  4. 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.

  1. 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
    
  2. Copie os arquivos de script create-schema.sql e insert-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.

  3. Instale as ferramentas de cliente do MySQL:

    sudo apt-get update
    sudo apt-get install -y mariadb-client
    
  4. 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
    
  5. 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
    
  6. 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.

  1. No Cloud Shell, implante a configuração do GKE usando o Terraform:

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

    gcloud container clusters get-credentials \
        --region $REGION $GKE_CLUSTER
    
  3. 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.

  4. 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.

  5. Depois que o certificado for provisionado, você poderá visitar seu URL em um navegador.

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

      echo $GUACAMOLE_URL
      
    2. Em uma janela do navegador, digite o URL da etapa anterior.

    3. 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

  1. 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.

  2. 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

  1. 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.
  2. Na IU do Guacamole, clique no seu nome de usuário e selecione Configurações.
  3. Na guia Conexões, clique em Nova conexão.
    1. No campo Nome, insira um nome para a rede.
    2. No campo Local, digite o local da conexão.
    3. Na lista suspensa Protocolo, selecione RDP.
  4. 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.

  5. Na seção Autenticação, configure os seguintes campos:

    1. Nome de usuário: admin
    2. Senha: a senha que você recebeu ao redefinir a senha da VM
    3. Modo de segurança: NLA (autenticação no nível da rede)
    4. 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.

  6. Clique em Save.

  7. Clique no seu nome de usuário e selecione Início.

  8. 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

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

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