Menyiapkan Pod Google Kubernetes Engine menggunakan injeksi Envoy otomatis

Ringkasan

Dalam mesh layanan, kode aplikasi Anda tidak perlu mengetahui konfigurasi jaringan. Sebagai gantinya, aplikasi Anda berkomunikasi melalui bidang data, yang dikonfigurasi oleh bidang kontrol yang menangani jaringan layanan. Dalam panduan ini, Traffic Director adalah bidang kontrol Anda dan proxy file bantuan Envoy adalah bidang data Anda.

Injektor sespan Envoy memudahkan penambahan proxy file bantuan Envoy ke Pod Google Kubernetes Engine Anda. Saat injektor file bantuan Envoy menambahkan proxy, injeksi juga akan menetapkan proxy tersebut untuk menangani traffic aplikasi dan terhubung ke Traffic Director untuk konfigurasi.

Panduan ini akan memandu Anda dalam menyiapkan Traffic Director dengan mudah menggunakan Google Kubernetes Engine. Langkah-langkah ini memberikan fondasi yang dapat diperluas ke kasus penggunaan lanjutan, seperti mesh layanan yang diperluas ke beberapa cluster Google Kubernetes Engine dan, berpotensi, VM Compute Engine. Anda juga dapat menggunakan petunjuk ini jika mengonfigurasi Traffic Director dengan VPC Bersama.

Proses penyiapannya meliputi:

  1. Membuat cluster GKE untuk workload Anda.
  2. Menginstal injektor file bantuan Envoy dan mengaktifkan injeksi.
  3. Men-deploy klien contoh dan memverifikasi injeksi.
  4. Men-deploy layanan Kubernetes untuk pengujian.
  5. Mengonfigurasi Traffic Director dengan komponen Cloud Load Balancing untuk mengarahkan traffic ke layanan pengujian.
  6. Memverifikasi konfigurasi dengan mengirimkan permintaan dari klien contoh ke layanan pengujian.
Ringkasan komponen yang di-deploy sebagai bagian dari panduan penyiapan ini (klik untuk memperbesar)
Ringkasan komponen yang di-deploy sebagai bagian dari panduan penyiapan ini (klik untuk memperbesar)

Prasyarat

Sebelum mengikuti petunjuk dalam panduan ini, tinjau Menyiapkan penyiapan Traffic Director dan pastikan Anda telah menyelesaikan tugas prasyarat yang dijelaskan dalam dokumen tersebut.

Untuk informasi tentang versi Envoy yang didukung, lihat catatan rilis Traffic Director.

Prasyarat tambahan dengan VPC Bersama

Jika Anda menyiapkan Traffic Director di lingkungan VPC Bersama, pastikan hal berikut.

  • Anda memiliki izin dan peran yang benar untuk VPC Bersama.
  • Anda telah menyiapkan project dan penagihan yang benar.
  • Anda telah mengaktifkan penagihan di project.
  • Anda telah mengaktifkan Traffic Director dan GKE API di setiap project, termasuk project host.
  • Anda telah menyiapkan akun layanan yang benar untuk setiap project.
  • Anda telah membuat jaringan dan subnet VPC.
  • Anda telah mengaktifkan VPC Bersama.

Untuk informasi selengkapnya, lihat VPC Bersama.

Mengonfigurasi peran IAM

Contoh konfigurasi peran IAM ini mengasumsikan bahwa project host untuk VPC Bersama memiliki dua subnet dan ada dua project layanan di VPC Bersama.

  1. Di Cloud Shell, buat folder kerja (WORKDIR) tempat Anda membuat file yang terkait dengan bagian ini:

    mkdir -p ~/td-shared-vpc
    cd ~/td-shared-vpc
    export WORKDIR=$(pwd)
    
  2. Konfigurasikan izin IAM dalam project host sehingga project layanan dapat menggunakan resource dalam VPC bersama.

    Pada langkah ini, Anda akan mengonfigurasi izin IAM sehingga subnet-1 dapat diakses oleh project layanan 1 dan subnet-2 dapat diakses oleh project layanan 2. Anda menetapkan peran IAM Pengguna Jaringan Compute (roles/compute.networkUser) ke akun layanan default komputasi Compute Engine dan akun layanan Google Cloud API di setiap project layanan untuk setiap subnet.

    1. Untuk project layanan 1, konfigurasikan izin IAM untuk subnet-1:

      export SUBNET_1_ETAG=$(gcloud beta compute networks subnets get-iam-policy subnet-1 --project ${HOST_PROJECT} --region ${REGION_1} --format=json | jq -r '.etag')
      
      cat > subnet-1-policy.yaml <<EOF
      bindings:
      - members:
        - serviceAccount:${SVC_PROJECT_1_API_SA}
        - serviceAccount:${SVC_PROJECT_1_GKE_SA}
        role: roles/compute.networkUser
      etag: ${SUBNET_1_ETAG}
      EOF
      
      gcloud beta compute networks subnets set-iam-policy subnet-1 \
      subnet-1-policy.yaml \
          --project ${HOST_PROJECT} \
          --region ${REGION_1}
      
    2. Untuk project layanan 2, konfigurasikan izin IAM untuk subnet-2:

      export SUBNET_2_ETAG=$(gcloud beta compute networks subnets get-iam-policy subnet-2 --project ${HOST_PROJECT} --region ${REGION_2} --format=json | jq -r '.etag')
      
      cat > subnet-2-policy.yaml <<EOF
      bindings:
      - members:
        - serviceAccount:${SVC_PROJECT_2_API_SA}
        - serviceAccount:${SVC_PROJECT_2_GKE_SA}
        role: roles/compute.networkUser
      etag: ${SUBNET_2_ETAG}
      EOF
      
      gcloud beta compute networks subnets set-iam-policy subnet-2 \
      subnet-2-policy.yaml \
          --project ${HOST_PROJECT} \
          --region ${REGION_2}
      
  3. Untuk setiap project layanan, Anda harus memberikan peran IAM Kubernetes Engine Host Service Agent User IAM (roles/container.hostServiceAgentUser) ke akun layanan GKE di project host:

    gcloud projects add-iam-policy-binding ${HOST_PROJECT} \
        --member serviceAccount:${SVC_PROJECT_1_GKE_SA} \
        --role roles/container.hostServiceAgentUser
    
    gcloud projects add-iam-policy-binding ${HOST_PROJECT} \
        --member serviceAccount:${SVC_PROJECT_2_GKE_SA} \
        --role roles/container.hostServiceAgentUser
    

    Dengan peran ini, akun layanan GKE dari project layanan dapat menggunakan akun layanan GKE dari project host untuk mengonfigurasi resource jaringan bersama.

  4. Untuk setiap project layanan, berikan peran IAM Compute Network Viewer kepada akun layanan default Compute Engine (roles/compute.networkViewer) di project host.

    gcloud projects add-iam-policy-binding ${SVC_PROJECT_1} \
        --member serviceAccount:${SVC_PROJECT_1_COMPUTE_SA} \
        --role roles/compute.networkViewer
    
    gcloud projects add-iam-policy-binding ${SVC_PROJECT_2} \
        --member serviceAccount:${SVC_PROJECT_2_COMPUTE_SA} \
        --role roles/compute.networkViewer
    

    Saat proxy file bantuan Envoy terhubung ke layanan xDS (Traffic Director API), proxy tersebut menggunakan akun layanan host virtual machine (VM) Compute Engine atau instance node GKE. Akun layanan harus memiliki izin IAM level project compute.globalForwardingRules.get. Peran Compute Network Viewer sudah cukup untuk langkah ini.

Membuat cluster GKE untuk workload Anda

Cluster GKE harus memenuhi persyaratan berikut untuk mendukung Traffic Director:

Membuat cluster GKE

Buat cluster GKE bernama traffic-director-cluster di zona pilihan Anda, misalnya, us-central1-a.

gcloud container clusters create traffic-director-cluster \
  --zone ZONE \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --enable-ip-alias

Mengarahkan kubectl ke cluster yang baru dibuat

Ubah konteks saat ini untuk kubectl ke cluster yang baru dibuat dengan memberikan perintah berikut:

gcloud container clusters get-credentials traffic-director-cluster \
    --zone ZONE

Memasang injektor file bantuan Envoy

Bagian berikut memberikan petunjuk untuk menginstal injektor sidecar Envoy. Jika diaktifkan, injektor file bantuan akan otomatis men-deploy proxy file bantuan untuk workload Google Kubernetes Engine baru dan yang sudah ada. Karena injektor sidecar Envoy berjalan di dalam cluster GKE, Anda harus menginstalnya sekali ke setiap cluster jika Anda menggunakan Traffic Director untuk mendukung mesh layanan multi-cluster.

Mendownload injektor bantuan

Download dan ekstrak injektor file bantuan Envoy.

wget https://storage.googleapis.com/traffic-director/td-sidecar-injector-xdsv3.tgz
tar -xzvf td-sidecar-injector-xdsv3.tgz
cd td-sidecar-injector-xdsv3

Mengonfigurasi injektor file bantuan

Jika Anda menggunakan API lama, konfigurasikan injektor file bantuan dengan mengedit file specs/01-configmap.yaml untuk:

  • Isi TRAFFICDIRECTOR_GCP_PROJECT_NUMBER dengan mengganti YOUR_PROJECT_NUMBER_HERE dengan nomor project Anda. Nomor project adalah ID numerik untuk project Anda. Untuk informasi tentang cara mendapatkan daftar semua project, lihat Mengidentifikasi project.
  • Isi TRAFFICDIRECTOR_NETWORK_NAME dengan mengganti YOUR_NETWORK_NAME_HERE dengan nama jaringan Virtual Private Cloud Google Cloud yang ingin Anda gunakan dengan Traffic Director. Catat nama jaringan VPC ini, karena Anda akan membutuhkannya nanti saat mengonfigurasi Traffic Director.

Jika Anda menggunakan API pemilihan rute layanan baru, yang saat ini sedang dalam pratinjau:

  • Isi TRAFFICDIRECTOR_MESH_NAME dengan mengganti "" dengan nama mesh layanan, untuk mendapatkan konfigurasi mesh layanan.
    • Perhatikan bahwa jika Anda mengonfigurasi Gateway, Anda tidak akan menggunakan injektor sidecar. Anda men-deploy proxy Envoy sebagai Pod.

Misalnya, file akan terlihat seperti ini:

$ cat specs/01-configmap.yaml
   apiVersion: v1
   kind: ConfigMap
   metadata:
     name: injector-mesh
     namespace: istio-control
   data:
     mesh: |-
       defaultConfig:
         discoveryAddress: trafficdirector.googleapis.com:443

         # Envoy proxy port to listen on for the admin interface.
         proxyAdminPort: 15000

         proxyMetadata:
           # Google Cloud Project number where Traffic Director resources are configured.
           # This is a numeric identifier of your project (e.g. "111222333444").
           # You can get a list of all your projects with their corresponding numbers by
           # using "gcloud projects list" command or looking it up under "Project info"
           # section of your Google Cloud console.
           # If left empty, configuration will be attempted to be fetched for the Google Cloud
           # project associated with service credentials.
           # Leaving empty is not recommended as it is not guaranteed to work in future
           # releases.
           TRAFFICDIRECTOR_GCP_PROJECT_NUMBER: "YOUR_PROJECT_NUMBER_HERE"

           # Google Cloud VPC network name for which the configuration is requested (This is the VPC
           # network name referenced in the forwarding rule in Google Cloud API). If left empty,
           # configuration will be attempted to be fetched for the VPC network over which
           # the request to Traffic Director (trafficdirector.googleapis.com) is sent out.
           # Leaving empty is not recommended as it is not guaranteed to work in future
           # releases.
           TRAFFICDIRECTOR_NETWORK_NAME: "default"

Anda juga dapat mengaktifkan logging dan pelacakan untuk setiap proxy yang dimasukkan secara otomatis. Untuk informasi selengkapnya tentang konfigurasi ini, tinjau Mengonfigurasi atribut tambahan untuk proxy file bantuan. Saat Anda menggunakan injektor file bantuan, nilai TRAFFICDIRECTOR_ACCESS_LOG_PATH hanya dapat ditetapkan ke file dalam direktori /etc/envoy/. Misalnya, direktori /etc/envoy/access.log adalah lokasi yang valid.

Perhatikan bahwa TRAFFICDIRECTOR_INTERCEPTION_PORT tidak boleh dikonfigurasi dalam ConfigMap ini, karena sudah dikonfigurasi oleh injektor file bantuan.

Mengonfigurasi TLS untuk injektor file bantuan

Bagian ini menampilkan cara mengonfigurasi TLS untuk injektor file bantuan.

Injektor file bantuan menggunakan webhook masuk yang bermutasi Kubernetes untuk memasukkan proxy saat pod baru dibuat. Webhook ini adalah endpoint HTTPS sehingga Anda perlu memberikan kunci dan sertifikat untuk TLS.

Anda dapat membuat kunci pribadi dan sertifikat yang ditandatangani sendiri menggunakan openssl untuk mengamankan injektor file bantuan.

Secara opsional, jika Anda memiliki kunci pribadi dan sertifikat yang ditandatangani oleh certificate authority (CA) tepercaya, Anda dapat melewati langkah berikutnya ini.

CN=istio-sidecar-injector.istio-control.svc

openssl req \
  -x509 \
  -newkey rsa:4096 \
  -keyout key.pem \
  -out cert.pem \
  -days 365 \
  -nodes \
  -subj "/CN=${CN}" \
  -addext "subjectAltName=DNS:${CN}"

cp cert.pem ca-cert.pem

Contoh perintah openssl ini menghasilkan kunci RSA 4096-bit pribadi ke key.pem dan sertifikat yang ditandatangani sendiri dalam format X.509 ke cert.pem. Karena sertifikat ditandatangani sendiri, sertifikat tersebut akan disalin ke ca-cert.pem dan juga dianggap sebagai sertifikat CA penandatanganan. Sertifikat tetap berlaku selama 365 hari dan tidak memerlukan frasa sandi. Untuk mengetahui informasi selengkapnya tentang pembuatan dan penandatanganan sertifikat, lihat dokumentasi Kubernetes tentang Permintaan Penandatanganan Sertifikat.

Langkah-langkah di bagian ini harus diulang setiap tahun untuk membuat ulang serta menerapkan ulang kunci dan sertifikat baru sebelum masa berlakunya habis.

Setelah memiliki kunci dan sertifikat, Anda harus membuat rahasia Kubernetes dan memperbarui webhook injektor file bantuan.

  1. Buat namespace tempat rahasia Kubernetes akan dibuat:

    kubectl apply -f specs/00-namespaces.yaml
    
  2. Buat rahasia untuk injektor file bantuan.

    kubectl create secret generic istio-sidecar-injector -n istio-control \
      --from-file=key.pem \
      --from-file=cert.pem \
      --from-file=ca-cert.pem
    
  3. Ubah caBundle dari webhook injeksi file bantuan bernama istio-sidecar-injector-istio-control di specs/02-injector.yaml:

    CA_BUNDLE=$(cat cert.pem | base64 | tr -d '\n')
    sed -i "s/caBundle:.*/caBundle:\ ${CA_BUNDLE}/g" specs/02-injector.yaml
    

Menginstal injektor file bantuan ke cluster GKE

  1. Deploy injektor bantuan.

    kubectl apply -f specs/
    
  2. Pastikan injektor file bantuan berjalan.

    kubectl get pods -A | grep sidecar-injector
    

    Tindakan ini akan menampilkan output yang mirip dengan berikut ini:

    istio-control   istio-sidecar-injector-6b475bfdf9-79965  1/1 Running   0   11s
    istio-control   istio-sidecar-injector-6b475bfdf9-vntjd  1/1 Running   0   11s
    

Membuka port yang diperlukan di cluster pribadi

Jika mengikuti petunjuk di Menyiapkan keamanan layanan Traffic Director dengan Envoy, Anda dapat melewati bagian ini dan melanjutkan ke bagian berikutnya, Mengaktifkan injeksi file bantuan.

Jika menginstal injektor file bantuan Envoy di cluster pribadi, Anda harus membuka port TCP 9443 dalam aturan firewall ke node master agar webhook dapat berfungsi dengan benar.

Langkah-langkah berikut menjelaskan cara mengupdate aturan firewall yang diperlukan. Perlu diperhatikan bahwa perintah update menggantikan aturan firewall yang ada, sehingga Anda perlu memastikan untuk menyertakan port default 443 (HTTPS) dan 10250 (kubelet), serta port baru yang ingin Anda buka.

  1. Temukan rentang sumber (master-ipv4-cidr) cluster. Pada perintah berikut, ganti CLUSTER_NAME dengan nama cluster Anda, yaitu traffic-director-cluster:

    FIREWALL_RULE_NAME=$(gcloud compute firewall-rules list \
     --filter="name~gke-CLUSTER_NAME-[0-9a-z]*-master" \
     --format="value(name)")
    
  2. Perbarui aturan firewall untuk membuka port TCP 9443 guna mengaktifkan injeksi otomatis:

    gcloud compute firewall-rules update ${FIREWALL_RULE_NAME} \
     --allow tcp:10250,tcp:443,tcp:9443
    

Mengaktifkan injeksi file bantuan

Perintah berikut mengaktifkan injeksi untuk namespace default. Injeksi sidecar memasukkan container file bantuan ke pod yang dibuat di namespace ini:

kubectl label namespace default istio-injection=enabled

Anda dapat memverifikasi bahwa namespace default diaktifkan secara tepat dengan menjalankan perintah berikut:

kubectl get namespace -L istio-injection

Tindakan ini akan menampilkan:

NAME              STATUS   AGE     ISTIO-INJECTION
default           Active   7d16h   enabled
istio-control     Active   7d15h
istio-system      Active   7d15h

Jika Anda mengonfigurasi keamanan layanan untuk Traffic Director dengan Envoy, kembali ke bagian Menyiapkan layanan pengujian dalam panduan penyiapan tersebut.

Men-deploy klien contoh dan memverifikasi injeksi

Bagian ini menunjukkan cara men-deploy contoh pod yang menjalankan Listenbox, yang menyediakan antarmuka sederhana untuk menjangkau layanan pengujian. Dalam deployment yang sebenarnya, Anda akan men-deploy aplikasi klien Anda sendiri.

kubectl create -f demo/client_sample.yaml

Pod sibuk terdiri dari dua container. Penampung pertama adalah klien berdasarkan image Spanner dan penampung kedua adalah proxy Envoy yang dimasukkan oleh injektor file bantuan. Anda bisa mendapatkan informasi lebih lanjut tentang pod dengan menjalankan perintah berikut:

kubectl describe pods -l run=client

Tindakan ini akan menampilkan:

…
Init Containers:
# Istio-init sets up traffic interception for the pod.
  Istio-init:
…
Containers:
# busybox is the client container that runs application code.
  busybox:
…
# Envoy is the container that runs the injected Envoy proxy.
  envoy:
…

Men-deploy layanan Kubernetes untuk pengujian

Bagian berikut memberikan petunjuk untuk menyiapkan layanan pengujian yang Anda gunakan nanti dalam panduan ini untuk memberikan verifikasi menyeluruh atas penyiapan Anda.

Mengonfigurasi layanan GKE dengan NEG

Layanan GKE harus diekspos melalui grup endpoint jaringan (NEG) agar Anda dapat mengonfigurasinya sebagai backend dari layanan backend Traffic Director. Tambahkan anotasi NEG ke spesifikasi layanan Kubernetes, lalu pilih nama (dengan mengganti NEG-NAME pada contoh di bawah) sehingga Anda dapat menemukannya dengan mudah nanti. Anda memerlukan nama tersebut saat melampirkan NEG ke layanan backend Traffic Director. Untuk informasi lebih lanjut tentang cara menganotasi NEG, lihat Penamaan NEG.

...
metadata:
  annotations:
    cloud.google.com/neg: '{"exposed_ports": {"80":{"name": "service-test-neg"}}}'
spec:
  ports:
  - port: 80
    name: service-test
    protocol: TCP
    targetPort: 8000

Anotasi ini membuat NEG mandiri yang berisi endpoint yang sesuai dengan alamat IP dan port pod layanan. Untuk mengetahui informasi dan contoh selengkapnya, lihat Grup endpoint jaringan mandiri.

Layanan contoh berikut mencakup anotasi NEG. Layanan ini menyalurkan nama host melalui HTTP pada port 80. Gunakan perintah berikut untuk mendapatkan layanan dan men-deploy-nya ke cluster GKE Anda.

wget -q -O - \
https://storage.googleapis.com/traffic-director/demo/trafficdirector_service_sample.yaml \
| kubectl apply -f -

Pastikan bahwa layanan baru telah dibuat dan pod aplikasi sedang berjalan:

kubectl get svc

Outputnya akan mirip dengan berikut ini:

NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service-test     ClusterIP   10.71.9.71   none          80/TCP    41m
[..skip..]

Pastikan bahwa pod aplikasi yang terkait dengan layanan ini sedang berjalan:

kubectl get pods
Ini akan menampilkan:
NAME                        READY     STATUS    RESTARTS   AGE
app1-6db459dcb9-zvfg2       2/2       Running   0          6m
busybox-5dcf86f4c7-jvvdd    2/2       Running   0          10m
[..skip..]

Menyimpan nama NEG

Cari NEG yang dibuat dari contoh di atas dan catat namanya untuk konfigurasi Traffic Director di bagian berikutnya.

gcloud compute network-endpoint-groups list

Hasil dari kueri tersebut adalah sebagai berikut:

NAME                       LOCATION            ENDPOINT_TYPE       SIZE
service-test-neg           ZONE     GCE_VM_IP_PORT      1

Simpan nama NEG dalam variabel NEG_NAME:

NEG_NAME=$(gcloud compute network-endpoint-groups list \
| grep service-test | awk '{print $1}')

Mengonfigurasi Traffic Director dengan komponen Cloud Load Balancing

Bagian ini mengonfigurasi Traffic Director menggunakan resource load balancing Compute Engine. Tindakan ini memungkinkan proxy file bantuan klien contoh untuk menerima konfigurasi dari Traffic Director. Permintaan keluar dari klien contoh ditangani oleh proxy file bantuan dan dirutekan ke layanan pengujian.

Anda harus mengonfigurasi komponen berikut:

Membuat aturan health check dan firewall

Gunakan petunjuk berikut untuk membuat health check dan aturan firewall yang diperlukan untuk pemeriksaan health check. Untuk mengetahui informasi selengkapnya, lihat Aturan firewall untuk health check.

Konsol

  1. Buka halaman Health check di Konsol Google Cloud.
    Buka halaman Health check
  2. Klik Create Health Check.
  3. Untuk nama, masukkan td-gke-health-check.
  4. Untuk protokol, pilih HTTP.
  5. Klik Create.

  6. Buka halaman Firewall policies di Konsol Google Cloud.
    Buka halaman Kebijakan firewall

  7. Klik Create firewall rules.

  8. Di halaman Create a firewall rule, berikan informasi berikut:

    • Nama: Berikan nama untuk aturan. Untuk contoh ini, gunakan fw-allow-health-checks.
    • Network: Pilih jaringan VPC.
    • Priority: Masukkan angka untuk prioritas. Angka yang lebih rendah memiliki prioritas yang lebih tinggi. Pastikan aturan firewall memiliki prioritas lebih tinggi daripada aturan lain yang mungkin menolak traffic masuk.
    • Arah lalu lintas: Pilih Ingress.
    • Tindakan pada kecocokan: Pilih Izinkan.
    • Target: Pilih All instances in the network.
    • Filter sumber: Pilih jenis rentang IP yang benar.
    • Rentang IP sumber: 35.191.0.0/16,130.211.0.0/22
    • Filter tujuan: Pilih jenis IP.
    • Protocols and ports: Klik Specified ports and protocols, lalu centang tcp. TCP adalah protokol dasar untuk semua protokol health check.
    • Klik Create.

gcloud

  1. Membuat health check.

    gcloud compute health-checks create http td-gke-health-check \
      --use-serving-port
    
  2. Buat aturan firewall untuk mengizinkan rentang alamat IP health checker.

    gcloud compute firewall-rules create fw-allow-health-checks \
      --action ALLOW \
      --direction INGRESS \
      --source-ranges 35.191.0.0/16,130.211.0.0/22 \
      --rules tcp
    

Membuat layanan backend

Buat layanan backend global dengan skema load balancing INTERNAL_SELF_MANAGED. Di Konsol Google Cloud, skema load balancing ditetapkan secara implisit. Tambahkan health check ke layanan backend.

Konsol

  1. Buka halaman Traffic Director di konsol Google Cloud.

    Buka halaman Traffic Director

  2. Pada tab Services, klik Create Service.

  3. Klik Lanjutkan.

  4. Untuk nama layanan, masukkan td-gke-service.

  5. Pilih Network, yang Anda konfigurasi di Traffic Director ConfigMap.

  6. Di bagian Backend type, pilih Network endpoint groups.

  7. Pilih grup endpoint jaringan yang Anda buat.

  8. Setel Maximum RPS ke 5.

  9. Tetapkan Mode penyeimbangan ke Tarif.

  10. Klik Done.

  11. Di bagian Health check, pilih td-gke-health-check, yang merupakan health check yang Anda buat.

  12. Klik Lanjutkan.

gcloud

  1. Membuat layanan backend dan mengaitkan health check dengan layanan backend.

    gcloud compute backend-services create td-gke-service \
     --global \
     --health-checks td-gke-health-check \
     --load-balancing-scheme INTERNAL_SELF_MANAGED
    
  2. Tambahkan NEG yang dibuat sebelumnya sebagai backend ke layanan backend. Jika mengonfigurasi Traffic Director dengan proxy TCP target, Anda harus menggunakan mode penyeimbangan UTILIZATION. Jika menggunakan proxy target HTTP atau HTTPS, Anda dapat menggunakan mode RATE.

    gcloud compute backend-services add-backend td-gke-service \
     --global \
     --network-endpoint-group ${NEG_NAME} \
     --network-endpoint-group-zone ZONE \
     --balancing-mode [RATE | UTILIZATION] \
     --max-rate-per-endpoint 5
    

Membuat peta aturan perutean

Peta aturan perutean menentukan cara Traffic Director merutekan traffic di mesh Anda. Sebagai bagian dari peta aturan pemilihan rute, Anda mengonfigurasi alamat IP virtual (VIP) dan kumpulan aturan pengelolaan traffic terkait, seperti pemilihan rute berbasis host. Saat aplikasi mengirimkan permintaan ke VIP, proxy sidecar Envoy yang terlampir akan melakukan hal berikut:

  1. Mencegat permintaan.
  2. Mengevaluasinya berdasarkan aturan pengelolaan lalu lintas di peta URL.
  3. Memilih layanan backend berdasarkan nama host dalam permintaan.
  4. Memilih backend atau endpoint yang terkait dengan layanan backend yang dipilih.
  5. Mengirim traffic ke backend atau endpoint tersebut.

Konsol

Di konsol, proxy target digabungkan dengan aturan penerusan. Saat Anda membuat aturan penerusan, Google Cloud otomatis membuat proxy HTTP target dan melampirkannya ke peta URL.

Aturan rute terdiri dari aturan penerusan serta aturan host dan jalur (juga dikenal sebagai peta URL).

  1. Buka halaman Traffic Director di konsol Google Cloud.

    Buka halaman Traffic Director

  2. Klik Peta aturan pemilihan rute

  3. Klik Create Routing Rule.

  4. Masukkan td-gke-url-map sebagai Nama peta URL.

  5. Klik Tambahkan aturan penerusan.

  6. Untuk nama aturan penerusan, masukkan td-gke-forwarding-rule.

  7. Pilih jaringan Anda.

  8. Pilih Internal IP.

  9. Klik Simpan.

  10. Anda juga dapat menambahkan aturan host dan jalur kustom atau membiarkan aturan jalur sebagai default.

  11. Tetapkan host ke service-test.

  12. Klik Simpan.

gcloud

  1. Buat peta URL yang menggunakan td-gke-service sebagai layanan backend default.

    gcloud compute url-maps create td-gke-url-map \
       --default-service td-gke-service
    
  2. Buat pencocok jalur peta URL dan aturan host untuk mengarahkan traffic untuk layanan Anda berdasarkan nama host dan jalur. Contoh ini menggunakan service-test sebagai nama layanan dan pencocok jalur default yang cocok dengan semua permintaan jalur untuk host ini (/*).

    gcloud compute url-maps add-path-matcher td-gke-url-map \
       --default-service td-gke-service \
       --path-matcher-name td-gke-path-matcher
    
    gcloud compute url-maps add-host-rule td-gke-url-map \
       --hosts service-test \
       --path-matcher-name td-gke-path-matcher
    
  3. Membuat proxy HTTP target.

    gcloud compute target-http-proxies create td-gke-proxy \
       --url-map td-gke-url-map
    
  4. Membuat aturan penerusan.

    gcloud compute forwarding-rules create td-gke-forwarding-rule \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED \
      --address=0.0.0.0 \
      --target-http-proxy=td-gke-proxy \
      --ports 80 --network default
    

Pada tahap ini, Traffic Director akan mengonfigurasi proxy file bantuan untuk merutekan permintaan yang menentukan nama host service-test ke backend td-gke-service. Dalam hal ini, backend tersebut adalah endpoint di grup endpoint jaringan yang terkait dengan layanan pengujian Kubernetes yang Anda deploy sebelumnya.

Memverifikasi konfigurasi

Bagian ini menunjukkan cara memverifikasi bahwa traffic yang dikirim dari contoh klien sibukbox dirutekan ke layanan Kubernetes service-test Anda. Untuk mengirim permintaan pengujian, Anda dapat mengakses shell di salah satu container dan menjalankan perintah verifikasi berikut. Pod service-test akan menampilkan nama host pod yang aktif.

# Get the name of the pod running Busybox.
BUSYBOX_POD=$(kubectl get po -l run=client -o=jsonpath='{.items[0].metadata.name}')

# Command to execute that tests connectivity to the service service-test at
# the VIP 10.0.0.1. Because 0.0.0.0 is configured in the forwarding rule, this
# can be any VIP.
TEST_CMD="wget -q -O - 10.0.0.1; echo"

# Execute the test command on the pod.
kubectl exec -it $BUSYBOX_POD -c busybox -- /bin/sh -c "$TEST_CMD"

Berikut cara konfigurasi diverifikasi:

  • Klien contoh mengirim permintaan yang menentukan nama host service-test.
  • Klien contoh memiliki proxy file bantuan Envoy yang dimasukkan oleh injektor sidecar Envoy.
  • Proxy file bantuan mencegat permintaan.
  • Dengan menggunakan peta URL, Envoy mencocokkan nama host service-test dengan layanan Traffic Director td-gke-service.
  • Envoy memilih endpoint dari grup endpoint jaringan yang terkait dengan td-gke-service.
  • Envoy mengirim permintaan ke pod yang terkait dengan layanan Kubernetes service-test.

Langkah selanjutnya