Remotezugriff auf einen privaten Cluster über einen Bastion Host


In dieser Anleitung wird gezeigt, wie Sie mit einem Bastion Host in Google Kubernetes Engine (GKE) über das Internet auf einen privaten Cluster zugreifen.

Sie können private GKE-Cluster ohne Clientzugriff auf den öffentlichen Endpunkt erstellen. Diese Zugriffsoption verbessert die Clustersicherheit, da der gesamte Internetzugriff auf die Steuerungsebene verhindert wird. Wenn Sie den Zugriff auf den öffentlichen Endpunkt deaktivieren, können Sie jedoch nicht remote mit Ihrem Cluster interagieren, es sei denn, Sie fügen die IP-Adresse Ihres Remote-Clients als autorisiertes Netzwerk hinzu.

In dieser Anleitung erfahren Sie, wie Sie einen Bastion Host einrichten. Dies ist eine spezielle Hostmaschine, die darauf ausgelegt wurde, Angriffen zu widerstehen. Der Bastion Host verwendet Tinyproxy, um Client-Traffic an den Cluster weiterzuleiten. Sie verwenden das Identity-Aware Proxy (IAP), um von Ihrem Remote-Client aus sicher auf den Bastion Host zuzugreifen.

Ziele

  • Erstellen Sie einen privaten Cluster ohne Zugriff auf den öffentlichen Endpunkt.
  • Stellen Sie der Compute Engine eine VM (Virtuelle Maschine) bereit, die als Bastion Host im Clustersubnetz fungiert
  • Verwenden Sie IAP, um einen Remote-Client über das Internet mit dem Cluster zu verbinden.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweis

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Update and install gcloud components:

    gcloud components update
    gcloud components install alpha beta
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.
  12. To initialize the gcloud CLI, run the following command:

    gcloud init
  13. Update and install gcloud components:

    gcloud components update
    gcloud components install alpha beta

Privaten Cluster erstellen

Erstellen Sie einen neuen privaten Cluster ohne Clientzugriff auf den öffentlichen Endpunkt. Platzieren Sie den Cluster in seinem eigenen Subnetz. Verwenden Sie dazu die Google Cloud CLI oder die Google Cloud Console.

gcloud

Führen Sie dazu diesen Befehl aus:

gcloud container clusters create-auto CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --create-subnetwork=name=SUBNET_NAME \
    --enable-master-authorized-networks \
    --enable-private-nodes \
    --enable-private-endpoint

Ersetzen Sie Folgendes:

  • CLUSTER_NAME ist der Name des neuen Clusters.
  • COMPUTE_REGION: Die Compute Engine-Region für den Cluster.
  • SUBNET_NAME: Der Name des neuen Subnetzwerks, in dem Sie den Cluster platzieren möchten.

Console

Virtual Private Cloud-Subnetzwerk erstellen

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

    Zur Seite VPC-Netzwerke

  2. Klicken Sie auf das Standardnetzwerk.

  3. Klicken Sie im Bereich Subnetze auf Subnetz hinzufügen.

  4. Geben Sie im Dialogfeld Subnetz hinzufügen Folgendes an:

    1. Name: Ein Name für das neue Subnetz.
    2. Region: Eine Region für das Subnetz. Dieser muss mit der Clusterregion übereinstimmen.
    3. IP-Adressbereich: Geben Sie 10.2.204.0/22 oder einen anderen Bereich an, der nicht mit anderen Bereichen im VPC-Netzwerk in Konflikt steht.
    4. Wählen Sie für Privater Google-Zugriff die Option Ein.
  5. Klicken Sie auf Hinzufügen.

Privaten Cluster erstellen

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite „Google Kubernetes Engine“

  2. Klicken Sie auf Erstellen.

  3. Klicken Sie für GKE Autopilot auf Konfigurieren.

  4. Geben Sie einen Namen und eine Region für den neuen Cluster an. Die Region muss mit dem Subnetz übereinstimmen.

  5. Wählen Sie im Bereich Netzwerk die Option Privater Cluster.

  6. Entfernen Sie das Häkchen aus dem Kästchen Zugriffssteuerungsebene über die externe IP-Adresse.

  7. Wählen Sie in der Drop-down-Liste Knotensubnetz das von Ihnen erstellte Subnetz aus.

  8. Konfigurieren Sie optional andere Einstellungen für den Cluster.

  9. Klicken Sie auf Erstellen.

Sie können auch einen GKE-Standardcluster verwenden, in dem das --master-ipv4-cidr-Flag angegeben ist.

Bastion-Host-VM erstellen

Erstellen Sie eine Compute Engine-VM im internen Netzwerk des privaten Clusters, die als Bastion Host fungiert und den Cluster verwalten kann.

gcloud

Eine Compute Engine-VM erstellen:

gcloud compute instances create INSTANCE_NAME \
    --zone=COMPUTE_ZONE \
    --machine-type=e2-micro \
    --network-interface=no-address,network-tier=PREMIUM,subnet=SUBNET_NAME

Ersetzen Sie Folgendes:

  • INSTANCE_NAME: Den Namen der VM.
  • COMPUTE_ZONE: Die Compute Engine-Zone für die VM. Platzieren Sie diese in derselben Region wie den Cluster.
  • SUBNET_NAME: Das Subnetzwerk, in dem Sie die VM platzieren möchten.

Console

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Klicken Sie auf Instanz erstellen.

  3. Geben Sie Folgendes an:

    1. Name: Der Name Ihrer VM.
    2. Region und Zone: Region und Zone Ihrer VM. Nutzen Sie die Region, in der sich auch Ihr Cluster befindet.
    3. Maschinentyp: Ein Maschinentyp. Wählen Sie einen kleinen Maschinentyp wie e2-micro aus.
    4. Wählen Sie unter Netzwerkschnittstellen das VPC-Netzwerk und das Subnetz aus, das auch der Cluster verwendet.
    5. Konfigurieren Sie optional weitere Einstellungen für die Instanz.
  4. Klicken Sie auf Erstellen.

Firewallregel erstellen

Damit IAP eine Verbindung zur Bastion-Host-VM herstellen kann, erstellen Sie eine Firewallregel.

Proxy bereitstellen

Wenn Sie den Bastion Host und den privaten Cluster konfiguriert haben, müssen Sie einen Proxy-Daemon im Host bereitstellen, um den Traffic an die Clustersteuerungsebene weiterzuleiten. Im Rahmen dieser Anleitung installieren Sie Tinyproxy.

  1. Starten Sie eine Sitzung in Ihrer VM:

    gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
    
  2. Installieren Sie Tinyproxy:

    sudo apt install tinyproxy
    
  3. Öffnen Sie die Tinyproxy-Konfigurationsdatei:

    sudo vi /etc/tinyproxy/tinyproxy.conf
    
  4. Führen Sie in der Datei folgende Schritte aus:

    1. Prüfen Sie, ob der Port 8888 ist.
    2. Suchen Sie nach dem Allow-Abschnitt:

        /Allow 127
      
    3. Fügen Sie dem Allow-Abschnitt folgende Zeile hinzu:

        Allow localhost
      
  5. Speichern Sie die Datei und starten Sie Tinyproxy neu:

    sudo service tinyproxy restart
    
  6. Beenden Sie die Sitzung:

    exit
    

Verbindung zum Cluster vom Remoteclient aus herstellen

Nachdem Sie Tinyproxy konfiguriert haben, müssen Sie den Remoteclient mit Clusteranmeldedaten einrichten und den Proxy angeben. Führen Sie folgende Schritte auf dem Remote-Client aus:

  1. Rufen Sie Anmeldedaten für den Cluster ab:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --project=PROJECT_ID
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME: Den Namen des privaten Clusters.
    • COMPUTE_REGION: Die Region des Clusters.
    • PROJECT_ID: Die ID des Google Cloud-Projekts des Clusters.
  2. Erstellen Sie mit IAP einen Tunnel zum Bastion Host:

    gcloud compute ssh INSTANCE_NAME \
        --tunnel-through-iap \
        --project=PROJECT_ID \
        --zone=COMPUTE_ZONE \
        --ssh-flag="-4 -L8888:localhost:8888 -N -q -f"
    
  3. Geben Sie den Proxy an:

    export HTTPS_PROXY=localhost:8888
    kubectl get ns
    

    Die Ausgabe ist eine Liste von Namespaces im privaten Cluster.

Überwachung des Remote-Clients beenden

Wenn Sie die Änderung auf dem Remote-Client irgendwann rückgängig machen möchten, sollten Sie den Listener-Prozess am TCP-Port 8888 beenden. Der Befehl dafür hängt vom Client-Betriebssystem ab.

netstat -lnpt | grep 8888 | awk '{print $7}' | grep -o '[0-9]\+' | sort -u | xargs sudo kill

Fehlerbehebung

Firewalleinschränkungen in Unternehmensnetzwerken

Wenn Sie sich in einem Unternehmensnetzwerk mit einer strengen Firewall befinden, können Sie diese Anleitung möglicherweise nicht abschließen, ohne eine Ausnahme anzufordern. Wenn Sie eine Ausnahme anfordern, ist der Quell-IP-Bereich für den Bastion Host standardmäßig 35.235.240.0/20.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Einzelne Ressourcen löschen

  1. Löschen Sie den Bastion Host, den Sie in dieser Anleitung bereitgestellt haben:

    gcloud compute instances delete INSTANCE_NAME \
        --zone=COMPUTE_ZONE
    
  2. Löschen Sie den Cluster:

    gcloud container clusters delete CLUSTER_NAME \
        --region=COMPUTE_REGION
    
  3. Löschen Sie das Subnetz:

    gcloud compute networks subnets delete SUBNET_NAME \
        --region=COMPUTE_REGION