Traffic von Cloud Service Mesh-Arbeitslasten an Compute Engine-VM weiterleiten
Auf dieser Seite erfahren Sie, wie Sie Netzwerkverkehr von Cloud Service Mesh-Arbeitslasten in GKE sicher an eine Compute Engine-VM weiterleiten, die von einem Backend-Dienst verwaltet wird.
Beim Weiterleiten von Traffic von GKE zu einer Compute Engine-VM ist es nicht erforderlich, dass die Compute Engine-VM oder der Backend-Dienst dem Cloud Service Mesh beitreten. Die Compute Engine-VM und der Backend-Dienst müssen sich jedoch im selben Projekt wie der GKE-Cluster von Cloud Service Mesh befinden. Diese Einschränkung gilt, solange diese Funktion in der öffentlichen Vorschau verfügbar ist. MTLS wird für Compute Engine-VMs nicht unterstützt
Hinweise
In den folgenden Abschnitten wird davon ausgegangen, dass Sie Folgendes haben:
- GKE-Cluster mit aktiviertem Cloud Service Mesh
- Sie haben eine Compute Engine-VM bereitgestellt, die von einem Backend-Dienst verwaltet wird.
Alternativ können Sie die folgenden Befehle ausführen, um eine Beispiel-Compute Engine-VM bereitzustellen, die von einem Backend-Dienst verwaltet wird.
Beispiel-Compute Engine-VM und Backend-Dienst bereitstellen:
gcloud compute instance-templates create td-httpd-vm-template \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --tags=http-td-server \ --image-family=debian-11 \ --image-project=debian-cloud \ --metadata=startup-script="#! /bin/bash sudo apt-get update -y sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype <html><body><h1>'\`$(/bin/hostname)\`'</h1></body></html>' | sudo tee /var/www/html/index.html" gcloud compute instance-groups managed create http-td-mig-us-east1 \ --zone=VM_ZONE \ --size=2 \ --template=td-httpd-vm-template gcloud compute health-checks create http http-helloworld-health-check gcloud compute firewall-rules create http-vm-allow-health-checks \ --network=default \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=0.0.0.0/0 \ --target-tags=http-td-server \ --rules=tcp:80 gcloud compute backend-services create helloworld \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks http-helloworld-health-check gcloud compute backend-services add-backend helloworld \ --instance-group=http-td-mig-us-east1 \ --instance-group-zone=VM_ZONE \ --global
Wobei:
- VM_ZONE ist die Zone, in der Ihre Compute Engine-VM bereitgestellt werden soll.
Compute Engine-VM als GCP-Backend konfigurieren
In diesem Abschnitt stellen Sie die Compute Engine-VM mit GCPBackend für die GKE-Arbeitslasten bereit. Das GCPBackend besteht aus:
- Informationen zum Frontend, insbesondere zum Hostnamen und Port, die GKE-Arbeitslasten zum Aufrufen dieses GCP-Backends verwenden würden.
- Backend-Informationen: Details zum Backend-Dienst wie Dienstname, Standort und Projektnummer.
Das GCPBackend enthält den Hostnamen und die Portdetails sowie die Details zum BackendService (Dienstname, Standort und Projektnummer). Die GKE-Arbeitslasten sollten den Hostnamen und Port von GCPBackend in ihren HTTP-Anfragen verwenden, um auf die Compute Engine-VM zuzugreifen.
Damit der Hostname im Cluster per DNS aufgelöst werden kann (standardmäßig ist dies nicht möglich), müssen Sie Google Cloud DNS so konfigurieren, dass alle Hosts unter einem ausgewählten Hostnamen in eine beliebige IP-Adresse aufgelöst werden. Solange Sie diesen DNS-Eintrag nicht konfiguriert haben, schlägt die Anfrage fehl. Die DNS-Konfiguration Google Cloud ist eine einmalige Einrichtung pro benutzerdefinierter Domain.
So erstellen Sie eine verwaltete Zone:
gcloud dns managed-zones create prod \ --description="zone for gcpbackend" \ --dns-name=gcpbackend \ --visibility=private \ --networks=default
In diesem Beispiel lautet der DNS-Name gcpbackend und das VPC-Netzwerk default.
Richten Sie den Eintrag so ein, dass die Domain aufgelöst werden kann:
gcloud beta dns record-sets create *.gcpbackend \ --ttl=3600 --type=A --zone=prod \ --rrdatas=10.0.0.1
Erstellen Sie das GCP-Backend mit einem Hostnamen unter der vorherigen Domain:
cat <<EOF > gcp-backend.yaml apiVersion: networking.gke.io/v1 kind: GCPBackend metadata: name: vm-gcp-backend namespace: NAMESPACE spec: type: "BackendService" hostname: hello-world.gcpbackend backendservice: name: helloworld location: global EOF kubectl apply -f gcp-backend.yaml
In diesem Beispiel ist GCP_BACKEND_NAME
vm-gcp-backend
.Erstellen Sie einen Test-Pod, um die Konnektivität zwischen GKE und der Compute Engine-VM zu prüfen:
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: testcurl namespace: default spec: containers: - name: curl image: curlimages/curl command: ["sleep", "3000"] EOF kubectl exec testcurl -c curl -- curl http://hello-world.gcpbackend:80
Ihre GKE-Arbeitslasten können jetzt über HTTP-Anfragen an hello-world.gcpbackend:80 auf die Compute Engine-VM zugreifen.
Sie sollten eindeutige Namen für GCPBackend verwenden, um Konflikte mit vorhandenen Kubernetes-Diensten oder Istio-Diensteinträgen zu vermeiden. Bei Konflikten hat der Kubernetes-Dienst Vorrang vor dem Istio ServiceEntry und dem GCPBackend.
Der virtuelle Dienst und das GCP-Backend müssen sich im selben Namespace befinden und die Compute Engine-VM muss sich im selben Projekt wie der GKE-Cluster von Cloud Service Mesh befinden.