Instrada il traffico dai workload Cloud Service Mesh alla VM di Compute Engine
Cloud Service Mesh ti consente di instradare il traffico dai workload GKE alle macchine virtuali (VM) Compute Engine con un BackendService. Puoi inviare richieste a queste risorse autonome senza aggiungere la VM o BackendService al mesh di servizi.
Questo documento si applica solo alle implementazioni di Cloud Service Mesh che utilizzano le API Istio e non supporta le API Google Cloud . mTLS non è supportato per le VM di Compute Engine.
Prima di iniziare
Le seguenti sezioni presuppongono che tu disponga di quanto segue:
- Un cluster GKE con Cloud Service Mesh abilitato.
- Eseguito il deployment di una VM di Compute Engine con un BackendService.
In alternativa, puoi eseguire i seguenti comandi per eseguire il deployment di una VM Compute Engine di esempio con un servizio di backend.
Esegui il deployment di una VM Compute Engine e di un servizio di backend di esempio:
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 \ --globalDove:
- VM_ZONE è la zona in cui vuoi eseguire il deployment della VM di Compute Engine.
Configura una VM di Compute Engine come GCPBackend
In questa sezione, esporrai la VM di Compute Engine ai workload GKE utilizzando GCPBackend. GCPBackend è composto da:
- Informazioni sul frontend, in particolare il nome host e la porta che i workload GKE utilizzerebbero per chiamare questo GCPBackend.
- Informazioni sul backend: i dettagli di BackendService, come il nome del servizio, la località e il numero di progetto.
GCPBackend contiene i dettagli del nome host e della porta, nonché i dettagli di BackendService (nome del servizio, località e numero di progetto). I workload GKE devono utilizzare il nome host e la porta GCPBackend nelle richieste HTTP per accedere alla VM di Compute Engine.
Per rendere risolvibile il DNS del nome host all'interno del cluster (per impostazione predefinita non è risolvibile), devi configurare il DNS Google Cloud per risolvere tutti gli host con un nome host scelto in un indirizzo IP arbitrario. Finché non configuri questa voce DNS, la richiesta non va a buon fine. La configurazione DNS Google Cloud è una configurazione una tantum per dominio personalizzato.
Crea una zona gestita:
gcloud dns managed-zones create prod \ --description="zone for gcpbackend" \ --dns-name=gcpbackend \ --visibility=private \ --networks=defaultIn questo esempio, il nome DNS è gcpbackend e la rete VPC è default.
Configura il record per rendere risolvibile il dominio:
gcloud beta dns record-sets create *.gcpbackend \ --ttl=3600 --type=A --zone=prod \ --rrdatas=10.0.0.1Crea il GCPBackend con un nome host nel dominio precedente:
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 questo esempio, GCP_BACKEND_NAME è
vm-gcp-backend.Crea un pod di test per verificare la connettività da GKE alla VM di Compute Engine:
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:80Ora i tuoi workload GKE possono accedere alla VM di Compute Engine inviando richieste HTTP a hello-world.gcpbackend:80.
Devi utilizzare nomi distinti per GCPBackend per evitare conflitti con i servizi Kubernetes o le voci di servizio Istio esistenti. In caso di conflitto, l'ordine di precedenza (dal più alto al più basso) è Servizio Kubernetes, ServiceEntry Istio e GCPBackend.
Tieni presente che il servizio virtuale e il GCPBackend devono trovarsi nello stesso spazio dei nomi.