Se connecter à une VM

Google Distributed Cloud (GDC) air-gapped utilise l'authentification SSH basée sur des clés pour établir des connexions vers des instances de machines virtuelles (VM). Par défaut, les mots de passe ne sont pas configurés pour les utilisateurs locaux sur les VM avec un système d'exploitation (OS).

Avant de commencer

Avant de vous connecter à une VM, vous devez remplir les conditions préalables suivantes :

  • Activez la gestion des accès. Vous ne pouvez pas continuer sans que la gestion des accès soit activée dans l'environnement invité. Par défaut, la gestion des accès est activée sur les nouvelles VM.
  • Activez l'accès externe aux VM pour tous les pairs sur le port 22 du protocole TCP (Transmission Control Protocol).
  • Configurez une ressource personnalisée ProjectNetworkPolicy (PNP) dans le projet où réside la VM.
    • En configurant un PNP dans le projet, vous pouvez accéder à la VM en dehors du projet ou de l'organisation.
    • Pour savoir si vous n'avez pas de PNP, demandez à votre opérateur d'infrastructure (IO).
  • Accès à la connexion au cluster. Suivez les étapes de la CLI dans Se connecter pour vous connecter au cluster.
  • Pour utiliser les commandes de l'interface de ligne de commande (CLI) gdcloud, assurez-vous d'avoir téléchargé, installé et configuré la CLI gdcloud. Toutes les commandes pour Distributed Cloud utilisent la CLI gdcloud ou kubectl et nécessitent un environnement de système d'exploitation (OS).

    Obtenir le chemin d'accès au fichier kubeconfig

    Pour exécuter des commandes sur le serveur de l'API Management, assurez-vous de disposer des ressources suivantes :

    1. Connectez-vous et générez le fichier kubeconfig pour le serveur d'API Management si vous n'en avez pas.

    2. Utilisez le chemin d'accès au fichier kubeconfig du serveur de l'API Management pour remplacer MANAGEMENT_API_SERVER dans ces instructions.

    Demander des autorisations et un accès

    Pour effectuer les tâches listées sur cette page, vous devez disposer du rôle Administrateur VirtualMachine du projet. Suivez les étapes pour vérifier que vous disposez du rôle Administrateur VirtualMachine du projet (project-vm-admin) dans l'espace de noms du projet dans lequel réside la VM.

    Pour les opérations sur les VM à l'aide de la console GDC ou de la CLI gdcloud, demandez à votre administrateur IAM de projet de vous attribuer le rôle Administrateur de machines virtuelles du projet et le rôle Lecteur du projet (project-viewer).

    Établir une connexion à une VM

    Cette section explique comment établir une connexion à une VM avec un système d'exploitation spécifique.

    Se connecter à une VM

    Pour établir une connexion à une VM avec un OS spécifique, utilisez la console GDC, la CLI gdcloud ou l'API Virtual Machine Manager.

    Console

    1. Dans le menu de navigation, cliquez sur Machines virtuelles > Instances.

    2. Dans la liste des VM, recherchez la ligne de la VM en cours d'exécution à laquelle vous souhaitez vous connecter. Dans la colonne Connecter, cliquez sur SSH.

    3. Un terminal de navigateur SSH s'ouvre. Saisissez une commande dans le shell ou cliquez sur FTP pour parcourir la structure des fichiers et importer des fichiers.

    gdcloud

    Connectez-vous à une VM à l'aide de SSH en exécutant la commande gdcloud compute ssh.

    gdcloud compute ssh VM_NAME --project=PROJECT_ID
    

    Remplacez les variables suivantes :

    • VM_NAME : Nom de la VM.
    • PROJECT_ID : ID du projet contenant la VM.

    Si vous avez défini les propriétés par défaut de la CLI, vous pouvez omettre l'indicateur --project de cette commande. Exemple :

    gdcloud compute ssh VM_NAME
    

    API

    Connectez-vous à une VM :

    • Ouvrez un terminal.
    • Créez une paire de clés SSH.
    • Importez la clé publique et le nom d'utilisateur avec une valeur TTL (Time-To-Live).

    GDC récupère la clé SSH et le nom d'utilisateur, puis crée un compte utilisateur avec le nom d'utilisateur. Sur les VM, GDC stocke la clé publique dans le fichier ~/.ssh/authorized_keys de votre utilisateur sur la VM.

    Pour vous connecter à une VM depuis la ligne de commande, procédez comme suit :

    1. Créez une paire de clés SSH et un nom d'utilisateur.

      Sur les postes de travail OS, utilisez l'utilitaire ssh-keygen pour créer une paire de clés SSH. L'exemple de code suivant crée une paire de clés RSA (Rivest–Shamir-Adleman) :

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

      Remplacez les variables en utilisant les définitions suivantes.

      VariableDéfinition
      KEY_FILENAME Nom de votre fichier de clé SSH. Par exemple, le nom de fichier my-ssh-key génère un fichier de clé privée nommé my-ssh-key et un fichier de clé publique nommé my-ssh-key.pub.
      USERNAME Votre nom d'utilisateur sur la VM, tel que testuser ou testuser_gmail_com.

      L'utilitaire ssh-keygen enregistre votre fichier de clé privée dans le chemin d'accès ~/.ssh/KEY_FILENAME et votre fichier de clé publique dans le chemin d'accès ~/.ssh/KEY_FILENAME.pub.

      Une clé publique pour l'utilisateur, testuser, ressemble à l'exemple suivant :

      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
      
    2. Importez votre clé dans la VM et créez une ressource Kubernetes avec votre clé publique, votre nom d'utilisateur et la valeur TTL (Time To Live) de la clé.

      L'exemple suivant utilise un fichier access_request.yaml pour accorder l'accès à l'instance de VM avec la clé privée KEY_FILENAME et une valeur TTL de dix minutes :

      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
      

      Remplacez les variables en utilisant les définitions suivantes :

      VariableDéfinition
      VM_NAMESPACE Espace de noms de la VM.
      AR_NAME Nom de la demande d'accès.
      USERNAME Votre nom d'utilisateur sur la VM, tel que testuser ou testuser_gmail_com.
      VM_NAME Nom de l'instance de VM.
    3. Créez la clé :

      kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
      
    4. Vérifiez l'état de votre demande d'accès :

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

      Remplacez VM_NAMESPACE par l'espace de noms de la VM.

      Un état configured indique que vous pouvez vous connecter à la VM.

    5. Connectez-vous à la VM :

      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      Remplacez les valeurs suivantes :

      • PATH_TO_PRIVATE_KEY avec le chemin d'accès au fichier de clé SSH privée correspondant à la clé publique que vous avez ajoutée à la VM.
      • USERNAME avec le nom d'utilisateur que vous avez spécifié lors de la création de la clé SSH. Par exemple, cloudysanfrancisco_example_com ou cloudysanfrancisco.
      • EXTERNAL_IP par l'adresse IP Ingress externe de la VM.

    Dépannage

    Cette section décrit comment résoudre les problèmes qui peuvent survenir lors de la connexion à une instance de VM après la création de la demande d'accès.

    Suivez les étapes ci-dessous pour identifier les problèmes potentiels :

    1. Vérifiez que la VM est en cours d'exécution. Remplacez les variables modifiables par vos valeurs dans la commande suivante :

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

      Si la VM n'est pas en cours d'exécution, vous ne pouvez pas vous connecter ni configurer de nouvelles requêtes.

    2. Vérifiez que la VM est en cours d'exécution depuis quelques minutes. Si la VM vient de démarrer, il est possible que les services requis pour l'accès SSH ne soient pas encore en cours d'exécution. En général, ils s'exécutent dans les cinq minutes suivant le démarrage.

    3. Vérifiez que vous n'avez pas dépassé la valeur TTL dans la demande d'accès. La clé est supprimée une fois que le temps atteint la valeur TTL.

    4. Si votre VirtualMachineAccessRequest affiche l'état configured, vérifiez les exigences suivantes :

      1. Vous avez activé le transfert de données vers votre VM sur le port 22.
      2. Votre machine est acheminée vers la VM. Par exemple, vous pouvez utiliser la commande
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 pour vérifier le routage.
    5. Si l'état failed s'affiche pour votre VirtualMachineAccessRequest, consultez l'état complet et le message d'erreur indiquant la raison de l'échec de la demande :

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

      Remplacez les variables modifiables de la commande précédente par vos propres valeurs.

    6. Si l'état de votre VirtualMachineAccessRequest est vide, il est possible que l'environnement invité ne soit pas en cours d'exécution.