Traffic von Cloud Service Mesh-Arbeitslasten an Compute Engine-VM weiterleiten

Auf dieser Seite erfahren Sie, wie Sie Netzwerkverkehr von Cloud Service Mesh-Arbeitslasten in GKE sicher an eine Compute Engine-VM weiterleiten, die von einem Backend-Dienst verwaltet wird.

Beim Weiterleiten von Traffic von GKE zu einer Compute Engine-VM ist es nicht erforderlich, dass die Compute Engine-VM oder der Backend-Dienst dem Cloud Service Mesh beitreten. Die Compute Engine-VM und der Backend-Dienst müssen sich jedoch im selben Projekt wie der GKE-Cluster von Cloud Service Mesh befinden. Diese Einschränkung gilt, solange diese Funktion in der öffentlichen Vorschau verfügbar ist. MTLS wird für Compute Engine-VMs nicht unterstützt

Hinweise

In den folgenden Abschnitten wird davon ausgegangen, dass Sie Folgendes haben:

  1. GKE-Cluster mit aktiviertem Cloud Service Mesh
  2. Sie haben eine Compute Engine-VM bereitgestellt, die von einem Backend-Dienst verwaltet wird.

Alternativ können Sie die folgenden Befehle ausführen, um eine Beispiel-Compute Engine-VM bereitzustellen, die von einem Backend-Dienst verwaltet wird.

  1. Beispiel-Compute Engine-VM und Backend-Dienst 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 Ihre Compute Engine-VM bereitgestellt werden soll.

Compute Engine-VM als GCP-Backend konfigurieren

In diesem Abschnitt stellen Sie die Compute Engine-VM mit GCPBackend für die GKE-Arbeitslasten bereit. Das GCPBackend besteht aus:

  1. Informationen zum Frontend, insbesondere zum Hostnamen und Port, die GKE-Arbeitslasten zum Aufrufen dieses GCP-Backends verwenden würden.
  2. Backend-Informationen: Details zum Backend-Dienst wie Dienstname, Standort und Projektnummer.

Das GCPBackend enthält den Hostnamen und die Portdetails sowie die Details zum BackendService (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 dies 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. Solange Sie diesen DNS-Eintrag nicht konfiguriert haben, schlägt die Anfrage fehl. Die DNS-Konfiguration Google Cloud ist eine einmalige Einrichtung pro benutzerdefinierter Domain.

  1. 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 lautet der DNS-Name gcpbackend und das VPC-Netzwerk default.

  2. 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
    
  3. Erstellen Sie das GCP-Backend 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.

  4. Erstellen Sie einen Test-Pod, um die Konnektivität zwischen GKE und der 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 über HTTP-Anfragen an hello-world.gcpbackend:80 auf die Compute Engine-VM zugreifen.

Sie sollten eindeutige Namen für GCPBackend verwenden, um Konflikte mit vorhandenen Kubernetes-Diensten oder Istio-Diensteinträgen zu vermeiden. Bei Konflikten hat der Kubernetes-Dienst Vorrang vor dem Istio ServiceEntry und dem GCPBackend.

Der virtuelle Dienst und das GCP-Backend müssen sich im selben Namespace befinden und die Compute Engine-VM muss sich im selben Projekt wie der GKE-Cluster von Cloud Service Mesh befinden.