Traffic von Cloud Service Mesh-Arbeitslasten an Compute Engine-VM weiterleiten
Mit Cloud Service Mesh können Sie Traffic von GKE-Arbeitslasten an Compute Engine-VMs weiterleiten, die von einem BackendService bereitgestellt werden. Sie können Anfragen an diese eigenständigen Ressourcen senden, ohne die VM oder die BackendService dem Service Mesh hinzuzufügen.
Dieses Dokument gilt nur für Cloud Service Mesh-Implementierungen, die Istio APIs verwenden. Google Cloud -APIs werden nicht unterstützt. mTLS wird für Compute Engine-VMs nicht unterstützt.
Hinweis
In den folgenden Abschnitten wird davon ausgegangen, dass Sie Folgendes haben:
- Einen GKE-Cluster mit aktiviertem Cloud Service Mesh.
- Eine Compute Engine-VM bereitgestellt, die von einem BackendService unterstützt wird.
Alternativ können Sie die folgenden Befehle ausführen, um eine Compute Engine-Beispiel-VM mit einem BackendService bereitzustellen.
Stellen Sie eine Compute Engine-Beispiel-VM und einen BackendService bereit:
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 \ --globalWobei:
- VM_ZONE ist die Zone, in der die Compute Engine-VM bereitgestellt werden soll.
Compute Engine-VM als GCPBackend konfigurieren
In diesem Abschnitt machen Sie die Compute Engine-VM mithilfe von GCPBackend für die GKE-Arbeitslasten verfügbar. Das GCPBackend besteht aus:
- Frontend-Informationen – insbesondere der Hostname und der Port, die von GKE-Arbeitslasten zum Aufrufen dieses GCPBackend verwendet werden.
- Backend-Informationen: Die BackendService-Details wie Dienstname, Standort und Projektnummer.
Das GCPBackend enthält die Hostnamen- und Portdetails sowie die BackendService-Details (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 er nicht auflösbar), müssen Sie das Google Cloud DNS so konfigurieren, dass alle Hosts unter einem ausgewählten Hostnamen in eine beliebige IP-Adresse aufgelöst werden. Bis Sie diesen DNS-Eintrag konfigurieren, schlägt die Anfrage fehl. Die Google Cloud DNS-Konfiguration ist eine einmalige Einrichtung pro benutzerdefinierter Domain.
Erstellen Sie eine verwaltete Zone:
gcloud dns managed-zones create prod \ --description="zone for gcpbackend" \ --dns-name=gcpbackend \ --visibility=private \ --networks=defaultIn diesem Beispiel lautet der DNS-Name gcpbackend und das VPC-Netzwerk default.
Richten Sie den Eintrag ein, damit die Domain aufgelöst werden kann:
gcloud beta dns record-sets create *.gcpbackend \ --ttl=3600 --type=A --zone=prod \ --rrdatas=10.0.0.1Erstellen Sie das GCPBackend 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.yamlIn diesem Beispiel ist GCP_BACKEND_NAME
vm-gcp-backend.Erstellen Sie einen Test-Pod, um die Verbindung von GKE zur 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:80Ihre GKE-Arbeitslasten können jetzt auf die Compute Engine-VM zugreifen, indem sie HTTP-Anfragen an hello-world.gcpbackend:80 senden.
Sie sollten eindeutige Namen für GCPBackend verwenden, um Konflikte mit vorhandenen Kubernetes-Diensten oder Istio-Diensteinträgen zu vermeiden. Bei einem Konflikt gilt die folgende Rangfolge (von hoch nach niedrig): Kubernetes-Dienst, istio-ServiceEntry und GCPBackend.
Der virtuelle Dienst und das GCPBackend müssen sich im selben Namespace befinden.