Verbindung zu einer VM herstellen

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

Hinweis

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

  • Richten Sie eine ProjectNetworkPolicy (PNP) benutzerdefinierte Ressource in dem Projekt ein, in dem sich die VM befindet.
    • Wenn Sie eine PNP im Projekt einrichten, können Sie außerhalb des Projekts oder der Organisation auf die VM zugreifen.
    • Wenn Sie keine PNP haben, fragen Sie Ihren Infrastrukturbetreiber.
  • Anmeldezugriff auf den Cluster. Folgen Sie der CLI-Anleitung unter Anmelden , um sich im Cluster anzumelden.
  • Wenn Sie gdcloud Befehlszeilenschnittstellenbefehle verwenden möchten, müssen Sie die gdcloud CLI heruntergeladen, installiert und konfiguriert haben. Alle Befehle für die GDC Air-Gapped Appliance verwenden die gdcloud- oder kubectl-CLI und erfordern eine Betriebssystemumgebung.

    Pfad zur kubeconfig-Datei abrufen

    Wenn Sie Befehle für den Management API-Server ausführen möchten, benötigen Sie die folgenden Ressourcen:

    1. Suchen Sie den Namen des Management API-Servers oder fragen Sie Ihren Plattformadministrator nach dem Servernamen.

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

    3. Ersetzen Sie in dieser Anleitung MANAGEMENT_API_SERVER{"</var>"}} durch den Pfad.

    Berechtigungen und Zugriff anfordern

    Zum Ausführen der auf dieser Seite aufgeführten Aufgaben benötigen Sie die Rolle „Projekt-VM-Administrator“. Folgen Sie der Anleitung, um zu prüfen, ob Sie die Rolle „Projekt-VM-Administrator“ (project-vm-admin) im Namespace des Projekts haben, in dem sich die VM befindet, oder bitten Sie Ihren Projekt-IAM-Administrator, Ihnen diese Rolle zuzuweisen.

    Für VM-Vorgänge mit der GDC Console oder der gdcloud CLI bitten Sie Ihren Projekt-IAM-Administrator, Ihnen sowohl die Rolle „Projekt-VM-Administrator“ als auch die Rolle „Projektbetrachter“ (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 Console, die gdcloud CLI oder die Virtual Machine Manager API, um eine Verbindung zu einer VM mit einem bestimmten Betriebssystem herzustellen.

    Console

    1. Klicken Sie im Navigationsmenü auf Virtual Machines > Instances.

    2. Suchen Sie in der Liste der VMs die Zeile für die ausgeführte VM, zu der Sie eine Verbindung herstellen möchten. Klicken Sie in der Spalte Connect 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 zu durchsuchen und Dateien hochzuladen.

    gdcloud

    Stellen Sie mit dem gdcloud compute ssh Befehl eine Verbindung zu einer VM über SSH her.

    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 --project Flag bei diesem Befehl weglassen. Beispiel:

    gdcloud compute ssh VM_NAME
    

    API

    Verbindung zu einer VM herstellen:

    • Ö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 Betriebssystem-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 für Ihre 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 ssh-keygen Dienstprogramm speichert Ihre private Schlüsseldatei im ~/.ssh/KEY_FILENAME Pfad und Ihre öffentliche Schlüsseldatei im ~/.ssh/KEY_FILENAME.pub Pfad.

      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 mit der Datei access_request.yaml Zugriff auf die VM-Instanz mit dem privaten Schlüssel KEY_FILENAME und einem TTL-Wert von zehn Minuten gewährt:

      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 durch die 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. 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 durch den Pfad zur privaten SSH-Schlüsseldatei, die dem öffentlichen Schlüssel entspricht, den Sie der VM hinzugefügt haben.
      • USERNAME durch den 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 für die Zugriffsanfrage nicht überschritten haben. Der Schlüssel wird entfernt, nachdem die Zeit den TTL-Wert erreicht hat.

    4. Wenn für Ihre VirtualMachineAccessRequest der Status configured angezeigt wird, prüfen Sie die folgenden Anforderungen:

      1. Sie haben die eingehende Datenübertragung zu Ihrer VM auf Port 22 aktiviert.
      2. Ihr Computer leitet Traffic an die VM weiter. Sie können die Weiterleitung beispielsweise mit dem
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 Befehl prüfen.
    5. Wenn für Ihre VirtualMachineAccessRequest der Status failed angezeigt wird, rufen Sie den vollständigen Status auf und lesen Sie die Fehlermeldung, in der die Ursache für den Fehler der Anfrage angegeben 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.