Acheminer le trafic des charges de travail Cloud Service Mesh vers une VM Compute Engine
Cloud Service Mesh vous permet d'acheminer le trafic des charges de travail GKE vers des machines virtuelles (VM) Compute Engine précédées d'un BackendService. Vous pouvez envoyer des requêtes à ces ressources autonomes sans ajouter la VM ou le BackendService au maillage de services.
Ce document ne s'applique qu'aux implémentations de Cloud Service Mesh utilisant les API Istio et n'est pas compatible avec les API Google Cloud . mTLS n'est pas compatible avec les VM Compute Engine.
Avant de commencer
Les sections suivantes supposent que vous avez :
- Un cluster GKE avec Cloud Service Mesh activé.
- Déployé une VM Compute Engine précédée d'un BackendService.
Vous pouvez également exécuter les commandes suivantes pour déployer un exemple de VM Compute Engine précédée d'un BackendService.
Déployez un exemple de VM Compute Engine et de BackendService :
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 \ --globalOù :
- VM_ZONE est la zone dans laquelle vous souhaitez déployer votre VM Compute Engine.
Configurer une VM Compute Engine en tant que GCPBackend
Dans cette section, vous allez exposer la VM Compute Engine aux charges de travail GKE à l'aide de GCPBackend. Le GCPBackend se compose des éléments suivants :
- Informations sur l'interface, en particulier le nom d'hôte et le port que les charges de travail GKE utiliseraient pour appeler ce GCPBackend.
- Informations sur le backend : détails du BackendService, tels que le nom du service, l'emplacement et le numéro de projet.
Le GCPBackend contient les détails du nom d'hôte et du port, ainsi que les détails du BackendService (nom du service, emplacement et numéro de projet). Les charges de travail GKE doivent utiliser le nom d'hôte et le port GCPBackend dans leurs requêtes HTTP pour accéder à la VM Compute Engine.
Pour que le nom d'hôte DNS puisse être résolu dans le cluster (par défaut, il n'est pas résolu), vous devez configurer Google Cloud DNS pour qu'il résolve tous les hôtes sous un nom d'hôte choisi en une adresse IP arbitraire. Tant que vous n'avez pas configuré cette entrée DNS, la requête échoue. La configuration DNS Google Cloud est une configuration unique par domaine personnalisé.
Créez une zone gérée :
gcloud dns managed-zones create prod \ --description="zone for gcpbackend" \ --dns-name=gcpbackend \ --visibility=private \ --networks=defaultDans cet exemple, le nom DNS est gcpbackend et le réseau VPC est default.
Configurez l'enregistrement pour que le domaine puisse être résolu :
gcloud beta dns record-sets create *.gcpbackend \ --ttl=3600 --type=A --zone=prod \ --rrdatas=10.0.0.1Créez le GCPBackend avec un nom d'hôte sous le domaine précédent :
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.yamlDans cet exemple, GCP_BACKEND_NAME est
vm-gcp-backend.Créez un pod de test pour vérifier la connectivité entre GKE et la VM 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:80Vos charges de travail GKE peuvent désormais accéder à la VM Compute Engine en envoyant des requêtes HTTP à hello-world.gcpbackend:80.
Vous devez utiliser des noms distincts pour GCPBackend afin d'éviter tout conflit avec les services Kubernetes ou les entrées de service Istio existants. En cas de conflit, l'ordre de priorité (du plus élevé au plus faible) est le suivant : service Kubernetes, ServiceEntry Istio et GCPBackend.
Notez que le service virtuel et le GCPBackend doivent se trouver dans le même espace de noms.