Verbindung zu einer VM herstellen

Google Distributed Cloud (GDC) Air-Gapped verwendet die schlüsselbasierte SSH-Authentifizierung, um Verbindungen zu VM-Instanzen herzustellen. Standardmäßig sind Passwörter für lokale Nutzer auf VMs mit einem Betriebssystem nicht konfiguriert.

Hinweise

Bevor Sie eine Verbindung zu einer VM herstellen können, müssen die folgenden Voraussetzungen erfüllt sein:

  • Richten Sie eine benutzerdefinierte ProjectNetworkPolicy-Ressource (PNP) in dem Projekt ein, in dem sich die VM befindet.
    • Wenn Sie ein PNP im Projekt einrichten, können Sie auf die VM außerhalb des Projekts oder der Organisation zugreifen.
    • Wenn Sie nicht sicher sind, ob Sie eine PNP haben, fragen Sie Ihren Infrastruktur-Operator (IO).
  • Anmeldezugriff auf den Cluster. Folgen Sie der CLI-Anleitung unter Anmelden, um sich im Cluster anzumelden.
  • Wenn Sie die Befehlszeilenbefehle (Command-Line Interface, CLI) von gdcloud verwenden möchten, müssen Sie die gdcloud-CLI heruntergeladen, installiert und konfiguriert haben. Für alle Befehle für Distributed Cloud wird die gdcloud- oder kubectl-CLI verwendet. Außerdem ist eine Betriebssystemumgebung erforderlich.

    Pfad der kubeconfig-Datei abrufen

    Damit Sie Befehle für den Management API-Server ausführen können, benötigen Sie die folgenden Ressourcen:

    1. Melden Sie sich an und generieren Sie die kubeconfig-Datei für den Management API-Server, falls Sie noch keine haben.

    2. Verwenden Sie den Pfad zur kubeconfig-Datei des Management API-Servers, um MANAGEMENT_API_SERVER in dieser Anleitung zu ersetzen.

    Berechtigungen und Zugriff anfordern

    Zum Ausführen der auf dieser Seite aufgeführten Aufgaben benötigen Sie die Rolle „ProjectVirtualMachine Admin“. Prüfen Sie, ob Sie die Rolle „Project VirtualMachine Admin“ (project-vm-admin) im Namespace des Projekts haben, in dem sich die VM befindet.

    Wenn Sie VM-Vorgänge über die GDC-Konsole oder die gdcloud-CLI ausführen möchten, bitten Sie Ihren Projekt-IAM-Administrator, Ihnen die Rolle „Project VirtualMachine Admin“ und die Rolle „Project Viewer“ (project-viewer) zuzuweisen.

    VM-Verbindung herstellen

    In diesem Abschnitt wird beschrieben, wie Sie eine Verbindung zu einer VM mit einem bestimmten Betriebssystem herstellen.

    Verbindung zu einer VM herstellen

    Verwenden Sie die GDC-Konsole, die gdcloud-Befehlszeile oder die Virtual Machine Manager API, um eine Verbindung zu einer VM mit einem bestimmten Betriebssystem herzustellen.

    Console

    1. Klicken Sie im Navigationsmenü auf Virtuelle Maschinen > Instanzen.

    2. Suchen Sie in der Liste der VMs nach der Zeile für die laufende VM, mit der Sie eine Verbindung herstellen möchten. Klicken Sie in der Spalte Verbinden auf SSH.

    3. Ein SSH-Browserterminal wird geöffnet. Geben Sie einen beliebigen Befehl in die Shell ein oder klicken Sie auf FTP, um die Dateistruktur aufzurufen und Dateien hochzuladen.

    gdcloud

    Mit SSH eine Verbindung zu einer VM herstellen, indem Sie den Befehl gdcloud compute ssh ausführen

    gdcloud compute ssh VM_NAME --project=PROJECT_ID
    

    Ersetzen Sie die folgenden Variablen:

    • VM_NAME: der Name der VM.
    • PROJECT_ID: die ID des Projekts, das die VM enthält.

    Wenn Sie Standardeigenschaften für die CLI festgelegt haben, können Sie das Flag --project bei diesem Befehl weglassen. Beispiel:

    gdcloud compute ssh VM_NAME
    

    API

    So stellen Sie eine Verbindung zu einer VM her:

    • Öffnen Sie ein Terminalfenster.
    • Erstellen Sie ein SSH-Schlüsselpaar.
    • Laden Sie den öffentlichen Schlüssel und den Nutzernamen mit einem TTL-Wert (Time-to-Live) hoch.

    GDC ruft den SSH-Schlüssel und den Nutzernamen ab und erstellt ein Nutzerkonto mit dem Nutzernamen. Auf VMs speichert GDC den öffentlichen Schlüssel in der Datei ~/.ssh/authorized_keys des Nutzers auf der VM.

    Führen Sie die folgenden Schritte aus, um über die Befehlszeile eine Verbindung zu einer VM herzustellen:

    1. Erstellen Sie ein SSH-Schlüsselpaar und einen Nutzernamen.

      Verwenden Sie auf OS-Workstations das Dienstprogramm ssh-keygen, um ein neues SSH-Schlüsselpaar zu erstellen. Im folgenden Codebeispiel wird ein RSA-Schlüsselpaar (Rivest–Shamir–Adleman) erstellt:

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

      Ersetzen Sie die Variablen durch die folgenden Definitionen.

      VariableDefinition
      KEY_FILENAME Der Name Ihrer SSH-Schlüsseldatei. Der Dateiname my-ssh-key erzeugt beispielsweise die private Schlüsseldatei my-ssh-key und die öffentliche Schlüsseldatei my-ssh-key.pub.
      USERNAME Ihr Nutzername auf der VM, z. B. testuser oder testuser_gmail_com.

      Das Dienstprogramm ssh-keygen speichert Ihre private Schlüsseldatei im Pfad ~/.ssh/KEY_FILENAME und Ihre öffentliche Schlüsseldatei im Pfad ~/.ssh/KEY_FILENAME.pub.

      Ein öffentlicher Schlüssel für den Nutzer testuser sieht in etwa so aus:

      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
      
    2. Laden Sie Ihren Schlüssel auf die VM hoch und erstellen Sie eine Kubernetes-Ressource mit Ihrem öffentlichen Schlüssel, Nutzernamen und TTL-Wert (Time to Live) für den Schlüssel.

      Im folgenden Beispiel wird eine access_request.yaml-Datei verwendet, um mit dem privaten Schlüssel KEY_FILENAME Zugriff auf die VM-Instanz zu gewähren. Der TTL-Wert beträgt zehn Minuten:

      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
      

      Ersetzen Sie die Variablen anhand der folgenden Definitionen:

      VariableDefinition
      VM_NAMESPACE Der Namespace für die VM.
      AR_NAME Der Name der Zugriffsanfrage.
      USERNAME Ihr Nutzername auf der VM, z. B. testuser oder testuser_gmail_com.
      VM_NAME Der Name der VM-Instanz.
    3. Erstellen Sie den Schlüssel:

      kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
      
    4. So prüfen Sie den Status Ihrer Zugriffsanfrage:

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

      Ersetzen Sie VM_NAMESPACE durch den Namespace für die VM.

      Der Status configured gibt an, dass Sie eine Verbindung zur VM herstellen können.

    5. Stellen Sie eine Verbindung zur VM her.

      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      Ersetzen Sie die folgenden Werte:

      • PATH_TO_PRIVATE_KEY mit dem Pfad zur privaten SSH-Schlüsseldatei, die dem öffentlichen Schlüssel entspricht, den Sie der VM hinzugefügt haben.
      • USERNAME mit dem Nutzernamen, den Sie beim Erstellen des SSH-Schlüssels angegeben haben. Beispiel: cloudysanfrancisco_example_com oder cloudysanfrancisco.
      • EXTERNAL_IP durch die externe Ingress-IP-Adresse der VM.

    Fehlerbehebung

    In diesem Abschnitt wird beschrieben, wie Sie Probleme beheben, die beim Herstellen einer Verbindung zu einer VM-Instanz nach dem Erstellen der Zugriffsanfrage auftreten können.

    Führen Sie die folgenden Schritte aus, um mögliche Probleme zu identifizieren:

    1. Prüfen Sie, ob die VM ausgeführt wird. Ersetzen Sie die bearbeitbaren Variablen im folgenden Befehl durch Ihre Werte:

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

      Wenn die VM nicht ausgeführt wird, können Sie keine Verbindung herstellen oder neue Anfragen konfigurieren.

    2. Prüfen Sie, ob die VM seit einigen Minuten ausgeführt wird. Wenn die VM gerade erst gestartet wurde, werden die für den SSH-Zugriff erforderlichen Dienste möglicherweise noch nicht ausgeführt. Normalerweise werden sie innerhalb von fünf Minuten nach dem Start ausgeführt.

    3. Prüfen Sie, ob Sie den TTL-Wert in der Zugriffsanfrage überschritten haben. Der Schlüssel wird entfernt, sobald die Zeit den TTL-Wert erreicht.

    4. Wenn für Ihr VirtualMachineAccessRequest der Status configured angezeigt wird, prüfen Sie, ob die folgenden Anforderungen erfüllt sind:

      1. Sie haben die Datenübertragung auf Port 22 für Ihre VM aktiviert.
      2. Ihr Computer leitet Anfragen an die VM weiter. Mit dem Befehl
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 können Sie beispielsweise das Routing prüfen.
    5. Wenn für Ihr VirtualMachineAccessRequest der Status failed angezeigt wird, rufen Sie den vollständigen Status auf und sehen Sie sich die Fehlermeldung an, die angibt, warum die Anfrage fehlgeschlagen ist:

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

      Ersetzen Sie die bearbeitbaren Variablen im vorherigen Befehl durch Ihre eigenen Werte.

    6. Wenn der Status Ihrer VirtualMachineAccessRequest leer ist, wird die Gastumgebung möglicherweise nicht ausgeführt.