Conectar-se a uma VM

O Google Distributed Cloud (GDC) isolado usa a autenticação SSH baseada em chave para estabelecer conexões com instâncias de máquina virtual (VM). Por padrão, as senhas não são configuradas para usuários locais em VMs com um sistema operacional (SO).

Antes de começar

Antes de se conectar a uma VM, é preciso atender aos seguintes pré-requisitos:

  • Configure um recurso personalizado ProjectNetworkPolicy (PNP) no projeto em que a VM reside.
    • Ao configurar um PNP no projeto, é possível acessar a VM fora do projeto ou da organização.
    • Para diagnosticar se você não tem um PNP, pergunte ao operador de infraestrutura (IO).
  • Acesso de login ao cluster. Siga as etapas da CLI em Fazer login para fazer login no cluster.
  • Para usar os comandos da interface de linha de comando (CLI) gdcloud, verifique se você baixou, instalou e configurou a CLI gdcloud. Todos os comandos do Distributed Cloud usam a CLI gdcloud ou kubectl e exigem um ambiente de sistema operacional (SO).

    Extrair o caminho do arquivo kubeconfig

    Para executar comandos no servidor da API Management, verifique se você tem os seguintes recursos:

    1. Faça login e gere o arquivo kubeconfig para o servidor da API Management se você não tiver um.

    2. Use o caminho para o arquivo kubeconfig do servidor da API Management para substituir MANAGEMENT_API_SERVER nestas instruções.

    Solicitar permissões e acesso

    Para executar as tarefas listadas nesta página, você precisa ter o papel de administrador de máquina virtual do projeto. Siga as etapas para verificar se você tem o papel de administrador de máquina virtual do projeto (project-vm-admin) no namespace do projeto em que a VM reside.

    Para operações de VM usando o console do GDC ou a CLI gdcloud, peça ao administrador do IAM do projeto para atribuir a você os papéis de administrador de máquina virtual do projeto e leitor do projeto (project-viewer).

    Estabelecer uma conexão de VM

    Nesta seção, descrevemos como estabelecer uma conexão com uma VM com um sistema operacional (SO) específico.

    Conectar-se a uma VM

    Para estabelecer uma conexão com uma VM com um SO específico, use o console do GDC, a CLI gdcloud ou a API Virtual Machine Manager.

    Console

    1. No menu de navegação, clique em Virtual Machines > Instâncias.

    2. Na lista de VMs, encontre a linha da VM em execução a que você quer se conectar. Na coluna Conectar, clique em SSH.

    3. Um terminal do navegador SSH é aberto. Insira qualquer comando no shell ou clique em FTP para navegar pela estrutura de arquivos e fazer upload deles.

    gdcloud

    Conecte-se a uma VM usando SSH executando o comando gdcloud compute ssh

    gdcloud compute ssh VM_NAME --project=PROJECT_ID
    

    Substitua as seguintes variáveis:

    • VM_NAME: o nome da VM.
    • PROJECT_ID: o ID do projeto que contém a VM.

    Se você tiver definido propriedades padrão para a CLI, poderá omitir a flag --project desse comando. Exemplo:

    gdcloud compute ssh VM_NAME
    

    API

    Conecte-se a uma VM:

    • Abra um terminal.
    • Crie um par de chaves SSH.
    • Faça o upload da chave pública e do nome de usuário com um valor de time-to-live (TTL).

    O GDC recupera a chave SSH e o nome de usuário e cria uma conta de usuário com o nome de usuário. Nas VMs, o GDC armazena a chave pública no arquivo ~/.ssh/authorized_keys do usuário na VM.

    Conclua as etapas a seguir para se conectar a uma VM pela linha de comando:

    1. Crie um par de chaves SSH e um nome de usuário.

      Em estações de trabalho com SO, use o utilitário ssh-keygen para criar um novo par de chaves SSH. O exemplo de código a seguir cria um par de chaves RSA (Rivest–Shamir–Adleman):

      ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USERNAME -b 2048
      

      Substitua as variáveis usando as seguintes definições.

      VariávelDefinição
      KEY_FILENAME O nome do arquivo de chave SSH. Por exemplo, o nome de arquivo my-ssh-key gera um arquivo de chave privada chamado my-ssh-key e um arquivo de chave pública chamado my-ssh-key.pub.
      USERNAME Seu nome de usuário na VM, como testuser ou testuser_gmail_com.

      O utilitário ssh-keygen salva o arquivo de chave privada no caminho ~/.ssh/KEY_FILENAME e o arquivo de chave pública no caminho ~/.ssh/KEY_FILENAME.pub.

      Uma chave pública para o usuário testuser é semelhante a este exemplo:

      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
      
    2. Faça upload da chave para a VM e crie um recurso do Kubernetes com a chave pública, o nome de usuário e o valor de time to live (TTL) da chave.

      O exemplo a seguir usa um arquivo access_request.yaml para conceder acesso à instância de VM com a chave privada KEY_FILENAME e um valor de TTL de dez minutos:

      apiVersion: virtualmachine.gdc.goog/v1
      kind: VirtualMachineAccessRequest
      metadata:
        namespace: VM_NAMESPACE
        name: AR_NAME
      spec:
        ssh:
          key: |
            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco
          ttl: 10m
        user: USERNAME
        vm: VM_NAME
      

      Substitua as variáveis usando as seguintes definições:

      VariávelDefinição
      VM_NAMESPACE O namespace da VM.
      AR_NAME O nome do pedido de acesso.
      USERNAME Seu nome de usuário na VM, como testuser ou testuser_gmail_com.
      VM_NAME O nome da instância de VM.
    3. Crie a chave:

      kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
      
    4. Verifique o status da sua solicitação de acesso:

      kubectl get virtualmachineaccessrequests.virtualmachine.gdc.goog -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      Substitua VM_NAMESPACE pelo namespace da VM.

      Um status configured indica que você pode se conectar à VM.

    5. Conecte-se à VM:

      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      Substitua os seguintes valores:

      • PATH_TO_PRIVATE_KEY com o caminho para o arquivo de chave SSH privada que corresponde à chave pública adicionada à VM.
      • USERNAME com o nome de usuário especificado ao criar a chave SSH. Por exemplo, cloudysanfrancisco_example_com ou cloudysanfrancisco.
      • EXTERNAL_IP com o endereço IP de entrada externo da VM.

    Solução de problemas

    Nesta seção, descrevemos como solucionar problemas que podem ocorrer ao se conectar a uma instância de VM depois de criar a solicitação de acesso.

    Siga estas etapas para identificar possíveis problemas:

    1. Verifique se a VM está em execução. Substitua as variáveis editáveis pelos seus valores no comando a seguir:

      kubectl get virtualmachines.virtualmachine.gdc.goog VM_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      Se a VM não estiver em execução, não será possível se conectar ou configurar novas solicitações.

    2. Verifique se a VM está em execução há alguns minutos. Se a VM tiver acabado de ser iniciada, os serviços necessários para o acesso SSH ainda não estarão em execução. Normalmente, eles são executados em até cinco minutos após a inicialização.

    3. Verifique se você não excedeu o valor de TTL na solicitação de acesso. A chave é removida quando o tempo atinge o valor de TTL.

    4. Se o VirtualMachineAccessRequest mostrar um status configured, verifique os seguintes requisitos:

      1. Você ativou a transferência de dados para sua VM na porta 22.
      2. Sua máquina é encaminhada para a VM. Por exemplo, é possível usar o comando
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 para verificar o roteamento.
    5. Se o VirtualMachineAccessRequest mostrar um status failed, confira o status completo e analise a mensagem de erro que indica o motivo da falha na solicitação:

      kubectl describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      Substitua as variáveis editáveis no comando anterior pelos seus próprios valores.

    6. Se o status do VirtualMachineAccessRequest estiver em branco, talvez o ambiente convidado não esteja em execução.