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.
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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Update and install
gcloud
components:gcloud components update
gcloud components install alpha beta -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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
Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.
Klicken Sie auf das Standardnetzwerk.
Klicken Sie im Bereich Subnetze auf Subnetz hinzufügen.
Geben Sie im Dialogfeld Subnetz hinzufügen Folgendes an:
- Name: Ein Name für das neue Subnetz.
- Region: Eine Region für das Subnetz. Dieser muss mit der Clusterregion übereinstimmen.
- 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. - Wählen Sie für Privater Google-Zugriff die Option Ein.
Klicken Sie auf Hinzufügen.
Privaten Cluster erstellen
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie auf
Erstellen.Klicken Sie für GKE Autopilot auf Konfigurieren.
Geben Sie einen Namen und eine Region für den neuen Cluster an. Die Region muss mit dem Subnetz übereinstimmen.
Wählen Sie im Bereich Netzwerk die Option Privater Cluster.
Entfernen Sie das Häkchen aus dem Kästchen Zugriffssteuerungsebene über die externe IP-Adresse.
Wählen Sie in der Drop-down-Liste Knotensubnetz das von Ihnen erstellte Subnetz aus.
Konfigurieren Sie optional andere Einstellungen für den Cluster.
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
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf Instanz erstellen.
Geben Sie Folgendes an:
- Name: Der Name Ihrer VM.
- Region und Zone: Region und Zone Ihrer VM. Nutzen Sie die Region, in der sich auch Ihr Cluster befindet.
- Maschinentyp: Ein Maschinentyp. Wählen Sie einen kleinen Maschinentyp wie
e2-micro
aus. - Wählen Sie unter Netzwerkschnittstellen das VPC-Netzwerk und das Subnetz aus, das auch der Cluster verwendet.
- Konfigurieren Sie optional weitere Einstellungen für die Instanz.
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.
Starten Sie eine Sitzung in Ihrer VM:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
Installieren Sie Tinyproxy:
sudo apt install tinyproxy
Öffnen Sie die Tinyproxy-Konfigurationsdatei:
sudo vi /etc/tinyproxy/tinyproxy.conf
Führen Sie in der Datei folgende Schritte aus:
- Prüfen Sie, ob der Port
8888
ist. Suchen Sie nach dem
Allow
-Abschnitt:/Allow 127
Fügen Sie dem
Allow
-Abschnitt folgende Zeile hinzu:Allow localhost
- Prüfen Sie, ob der Port
Speichern Sie die Datei und starten Sie Tinyproxy neu:
sudo service tinyproxy restart
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:
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.
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"
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Einzelne Ressourcen löschen
Löschen Sie den Bastion Host, den Sie in dieser Anleitung bereitgestellt haben:
gcloud compute instances delete INSTANCE_NAME \ --zone=COMPUTE_ZONE
Löschen Sie den Cluster:
gcloud container clusters delete CLUSTER_NAME \ --region=COMPUTE_REGION
Löschen Sie das Subnetz:
gcloud compute networks subnets delete SUBNET_NAME \ --region=COMPUTE_REGION