Traffic von Cloud Service Mesh-Arbeitslasten an eine Compute Engine-VM weiterleiten
Auf dieser Seite wird beschrieben, wie Sie den Netzwerkverkehr von Cloud Service Mesh-Arbeitslasten in GKE sicher an Compute Engine-VMs weiterleiten, die von einem BackendService bereitgestellt werden.
Wenn Sie Traffic von GKE zu einer Compute Engine-VM weiterleiten, ist es nicht erforderlich, dass die Compute Engine-VM oder der BackendService dem Cloud Service Mesh beitreten. 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 sich diese Funktion in der öffentlichen Vorschau befindet. MTLS wird für Compute Engine-VMs nicht unterstützt
Hinweise
In den folgenden Abschnitten wird davon ausgegangen, dass Sie Folgendes haben:
- Ein GKE-Cluster mit aktiviertem Cloud Service Mesh.
- Sie haben eine Compute Engine-VM bereitgestellt, 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.
Beispiel-Compute Engine-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 \ --global
Wobei:
- VM_ZONE ist die Zone, 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 mithilfe von GCPBackend für die GKE-Arbeitslasten verfügbar. Das GCPBackend besteht aus:
- Frontend-Informationen, insbesondere der Hostname und Port, die von GKE-Arbeitslasten verwendet werden, um diesen GCPBackend aufzurufen.
- Backend-Informationen: die Details des BackendService, z. B. Dienstname, Standort und Projektnummer.
Das GCPBackend enthält den Hostnamen und die Portdetails sowie die BackendService-Details (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 innerhalb des Clusters DNS-auflösbar ist (standardmäßig ist er nicht auflösbar), 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 konfigurieren, schlägt die Anfrage fehl. Die Google Cloud DNS-Konfiguration 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 ist 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 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.yaml
In diesem Beispiel ist GCP_BACKEND_NAME
vm-gcp-backend
.Erstellen Sie einen Test-Pod, 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:80
Ihre 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-Service-Einträgen zu vermeiden. Wenn es einen Konflikt gibt, ist die Prioritätsreihenfolge (hoch bis niedrig) Kubernetes-Dienst, Istio-ServiceEntry und GCPBackend.
Der Virtual Service 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.