Traffic von Cloud Service Mesh-Arbeitslasten an Compute Engine-VM weiterleiten
Auf dieser Seite wird beschrieben, wie Sie Netzwerk-Traffic von Cloud Service Mesh-Arbeitslasten in der GKE sicher an eine Compute Engine-VM weiterleiten, die von einem BackendService bereitgestellt wird.
Wenn Sie Traffic von der GKE an eine Compute Engine-VM weiterleiten, müssen Sie die Compute Engine-VM oder den BackendService nicht in Cloud Service Mesh einbinden. Die Compute Engine-VM und der BackendService müssen sich jedoch im selben Projekt wie der Cloud Service Mesh-GKE-Cluster befinden. Diese Einschränkung gilt, solange dieses Feature in der öffentlichen Vorschau verfügbar ist. 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, die von einem BackendService bereitgestellt wird.
Alternativ können Sie die folgenden Befehle ausführen, um eine Compute Engine-Beispiel-VM bereitzustellen, die von einem BackendService bereitgestellt wird.
Compute Engine-Beispiel-VM und BackendService 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 \ --globalWobei:
- VM_ZONE die Zone ist, in der Sie Ihre Compute Engine-VM bereitstellen möchten.
Compute Engine-VM als GCPBackend konfigurieren
In diesem Abschnitt machen Sie die Compute Engine-VM für die GKE-Arbeitslasten mit GCPBackend verfügbar. Das GCPBackend besteht aus:
- Frontend-Informationen, insbesondere der Hostname und der Port, die von GKE-Arbeitslasten verwendet werden, um dieses GCPBackend aufzurufen.
- Backend-Informationen, z. B. die Details des BackendService wie Dienstname, Standort und Projektnummer.
Das GCPBackend enthält den Hostnamen und die Portdetails sowie die Details des BackendService (Dienstname, Standort und Projektnummer). Die GKE-Arbeitslasten sollten den GCPBackend-Hostnamen und -Port 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 das 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. Bis Sie diesen DNS-Eintrag konfiguriert haben, schlägt die Anfrage fehl. Die Google Cloud DNS-Konfiguration ist eine einmalige Einrichtung pro benutzerdefinierter Domain.
Verwaltete Zone erstellen:
gcloud dns managed-zones create prod \ --description="zone for gcpbackend" \ --dns-name=gcpbackend \ --visibility=private \ --networks=defaultIn diesem Beispiel ist der DNS-Name gcpbackend und das VPC-Netzwerk ist „default“.
Eintrag einrichten, damit die Domain aufgelöst werden kann:
gcloud beta dns record-sets create *.gcpbackend \ --ttl=3600 --type=A --zone=prod \ --rrdatas=10.0.0.1GCPBackend mit einem Hostnamen unter der vorherigen Domain erstellen:
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.Test-Pod erstellen, um die Konnektivität zwischen GKE und 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:80Jetzt können Ihre GKE-Arbeitslasten auf die Compute Engine-VM zugreifen, indem sie HTTP-Anfragen an hello-world.gcpbackend:80 senden.
Verwenden Sie für GCPBackend unterschiedliche Namen, um Konflikte mit vorhandenen Kubernetes-Diensten oder Istio-Service-Einträgen zu vermeiden. Wenn es zu einem Konflikt kommt, gilt die folgende Prioritätsreihenfolge (hoch bis niedrig): Kubernetes-Dienst, Istio-ServiceEntry und GCPBackend.
Der virtuelle Dienst und das GCPBackend müssen sich im selben Namespace befinden und die Compute Engine-VM muss sich im selben Projekt wie der Cloud Service Mesh-GKE-Cluster befinden.