Ligue-se a uma VM

O Google Distributed Cloud (GDC) air-gapped usa a autenticação SSH baseada em chaves para estabelecer ligações a instâncias de máquinas virtuais (VM). Por predefinição, as palavras-passe não estão configuradas para utilizadores locais em VMs com um sistema operativo (SO).

Antes de começar

Antes de estabelecer ligação a uma VM, tem de cumprir os seguintes pré-requisitos:

  • Ative a gestão de acesso. Não pode continuar sem a gestão de acesso ativada no ambiente de convidado. Por predefinição, a gestão de acesso está ativada em novas VMs.
  • Ative o acesso externo da VM para qualquer par na porta 22 do Protocolo de controlo de transmissão (TCP).
  • Configure um recurso personalizado ProjectNetworkPolicy (PNP) no projeto onde a VM reside.
    • Ao configurar um PNP no projeto, pode aceder à VM fora do projeto ou da organização.
    • Para diagnosticar se não tem um PNP, pergunte ao seu operador de infraestrutura (IO).
  • Acesso de início de sessão ao cluster. Siga os passos da CLI em Iniciar sessão para iniciar sessão no cluster.
  • Para usar os comandos da gdcloud interface de linhas de comando (CLI), certifique-se de que transferiu, instalou e configurou a CLI gdcloud. Todos os comandos para a nuvem distribuída usam a CLI gdcloud ou kubectl e requerem um ambiente de sistema operativo (SO).

    Obtenha o caminho do ficheiro kubeconfig

    Para executar comandos no servidor da API Management, certifique-se de que tem os seguintes recursos:

    1. Inicie sessão e gere o ficheiro kubeconfig para o servidor da API Management, se não tiver um.

    2. Use o caminho para o ficheiro kubeconfig do servidor da API de gestão para substituir MANAGEMENT_API_SERVER nestas instruções.

    Peça autorizações e acesso

    Para realizar as tarefas indicadas nesta página, tem de ter a função de administrador da máquina virtual do projeto. Siga os passos para validar que tem a função de administrador de máquinas virtuais do projeto (project-vm-admin) no espaço de nomes do projeto onde a VM reside.

    Para operações de VM que usam a consola do GDC ou a CLI gdcloud, peça ao administrador de IAM do projeto para lhe atribuir a função de administrador de máquinas virtuais do projeto e a função de visualizador do projeto (project-viewer).

    Estabeleça uma ligação de VM

    Esta secção descreve como estabelecer uma ligação a uma VM com um sistema operativo (SO) específico.

    Ligue-se a uma VM

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

    Consola

    1. No menu de navegação, clique em Máquinas virtuais > Instâncias.

    2. Na lista de VMs, encontre a linha da VM em execução à qual quer estabelecer ligação. Na coluna Ligar, clique em SSH.

    3. É aberto um terminal do navegador SSH. Introduza qualquer comando na shell ou clique em FTP para navegar na estrutura de ficheiros e carregar ficheiros.

    gdcloud

    Estabeleça ligação a uma VM através de 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 tiver definido propriedades predefinidas para a CLI, pode omitir a flag --project deste comando. Por exemplo:

    gdcloud compute ssh VM_NAME
    

    API

    Ligue-se a uma VM:

    • Abra um terminal.
    • Crie um par de chaves SSH.
    • Carregue a chave pública e o nome de utilizador com um valor de tempo de vida (TTL).

    O GDC obtém a chave SSH e o nome de utilizador e cria uma conta de utilizador com o nome de utilizador. Nas VMs, o GDC armazena a chave pública no ficheiro ~/.ssh/authorized_keys do utilizador na VM.

    Conclua os passos seguintes para estabelecer ligação a uma VM a partir da linha de comandos:

    1. Crie um par de chaves SSH e um nome de utilizador.

      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 seguinte 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 ficheiro da chave SSH. Por exemplo, o nome do ficheiro my-ssh-key gera um ficheiro de chave privada denominado my-ssh-key e um ficheiro de chave pública denominado my-ssh-key.pub.
      USERNAME O seu nome de utilizador na VM, como testuser ou testuser_gmail_com.

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

      Uma chave pública para o utilizador, testuser, é semelhante ao seguinte exemplo:

      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
      
    2. Carregue a chave para a VM e crie um recurso do Kubernetes com a chave pública, o nome de utilizador e o valor de tempo de vida (TTL) da chave.

      O exemplo seguinte usa um ficheiro 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 com as seguintes definições:

      VariávelDefinição
      VM_NAMESPACE O espaço de nomes da VM.
      AR_NAME O nome do pedido de acesso.
      USERNAME O seu nome de utilizador 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 estado do seu pedido de acesso:

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

      Substitua VM_NAMESPACE pelo espaço de nomes da VM.

      Um estado configured indica que pode estabelecer ligação à VM.

    5. Estabeleça ligação à VM:

      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      Substitua os seguintes valores:

      • PATH_TO_PRIVATE_KEY com o caminho para o ficheiro de chave SSH privada que corresponde à chave pública que adicionou à VM.
      • USERNAME com o nome de utilizador que especificou quando criou a chave SSH. Por exemplo, cloudysanfrancisco_example_com ou cloudysanfrancisco.
      • EXTERNAL_IP com o endereço IP de entrada externo da VM.

    Resolução de problemas

    Esta secção descreve como resolver problemas que podem ocorrer ao estabelecer ligação a uma instância de VM após a criação do pedido de acesso.

    Siga os passos seguintes para identificar possíveis problemas:

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

      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 pode estabelecer ligação nem configurar novos pedidos.

    2. Verifique se a VM está em execução há alguns minutos. Se a VM tiver sido iniciada recentemente, os serviços necessários para o acesso SSH podem ainda não estar em execução. Normalmente, são executados no prazo de cinco minutos após o arranque.

    3. Verifique se não excedeu o valor de TTL no pedido de acesso. A chave é removida quando o tempo atinge o valor TTL.

    4. Se o ícone VirtualMachineAccessRequest apresentar o estado configured, verifique os seguintes requisitos:

      1. Ativou a transferência de dados para a sua VM na porta 22.
      2. A sua máquina encaminha para a MV. Por exemplo, pode usar o comando
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 para verificar o encaminhamento.
    5. Se o seu VirtualMachineAccessRequest apresentar o estado failed, veja o estado completo e reveja a mensagem de erro que indica o que causou a falha do pedido:

      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 estado do VirtualMachineAccessRequest estiver em branco, o ambiente de convidado pode não estar em execução.