Merutekan traffic dari workload Cloud Service Mesh ke VM Compute Engine

Cloud Service Mesh memungkinkan Anda merutekan traffic dari workload GKE ke virtual machine (VM) Compute Engine yang di-fronting oleh BackendService. Anda dapat mengirim permintaan ke resource mandiri ini tanpa menambahkan VM atau BackendService ke mesh layanan.

Dokumen ini hanya berlaku untuk implementasi Cloud Service Mesh yang menggunakan API Istio, dan tidak mendukung API Google Cloud . mTLS tidak didukung untuk VM Compute Engine.

Sebelum memulai

Bagian berikut mengasumsikan bahwa Anda telah:

  1. Cluster GKE dengan Cloud Service Mesh yang diaktifkan.
  2. Men-deploy VM Compute Engine yang dihadapkan oleh BackendService.

Atau, Anda dapat menjalankan perintah berikut untuk men-deploy contoh VM Compute Engine yang didukung oleh BackendService.

  1. Deploy contoh VM Compute Engine dan 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  \
      --global
    

    Dengan:

    • VM_ZONE adalah zona tempat Anda ingin men-deploy VM Compute Engine.

Mengonfigurasi VM Compute Engine sebagai GCPBackend

Di bagian ini, Anda akan mengekspos VM Compute Engine ke workload GKE menggunakan GCPBackend. GCPBackend terdiri dari:

  1. Informasi frontend - khususnya, nama host dan port yang akan digunakan Workload GKE untuk memanggil GCPBackend ini.
  2. Informasi backend - detail BackendService seperti nama layanan, lokasi, dan nomor project.

GCPBackend berisi detail nama host dan port serta detail BackendService (nama layanan, lokasi, dan nomor project). Workload GKE harus menggunakan nama host dan port GCPBackend dalam permintaan HTTP-nya untuk mengakses VM Compute Engine.

Agar DNS nama host dapat di-resolve dalam cluster (secara default tidak dapat di-resolve), Anda harus mengonfigurasi DNS Google Cloud untuk me-resolve semua host di bawah nama host yang dipilih ke alamat IP arbitrer. Sebelum Anda mengonfigurasi entri DNS ini, permintaan akan gagal. Konfigurasi DNS Google Cloud adalah penyiapan satu kali per domain kustom.

  1. Buat zona terkelola:

    gcloud dns managed-zones create prod \
        --description="zone for gcpbackend" \
        --dns-name=gcpbackend \
        --visibility=private \
        --networks=default
    

    Dalam contoh ini, Nama DNS adalah gcpbackend dan Jaringan VPC adalah default.

  2. Siapkan data agar domain dapat di-resolve:

    gcloud beta dns record-sets create *.gcpbackend \
      --ttl=3600 --type=A --zone=prod \
      --rrdatas=10.0.0.1
    
  3. Buat GCPBackend dengan nama host di domain sebelumnya:

    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
    

    Dalam contoh ini, GCP_BACKEND_NAME adalah vm-gcp-backend.

  4. Buat Pod pengujian untuk memverifikasi konektivitas GKE ke 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:80
    

    Sekarang, workload GKE Anda dapat mengakses VM Compute Engine dengan mengirim permintaan HTTP ke hello-world.gcpbackend:80.

Anda harus menggunakan nama yang berbeda untuk GCPBackend agar tidak bertentangan dengan layanan Kubernetes atau Entri Layanan Istio yang ada. Jika terjadi konflik, urutan prioritas (dari tinggi ke rendah) adalah Service Kubernetes, ServiceEntry istio, dan GCPBackend.

Perhatikan bahwa Virtual Service dan GCPBackend harus berada di namespace yang sama.