Mendukung migrasi Anda dengan perluasan mesh Istio: Tutorial

Last reviewed 2022-09-29 UTC

Tutorial ini menunjukkan cara menginisialisasi dan mengonfigurasi mesh layanan untuk mendukung migrasi fitur demi fitur dari pusat data lokal ke Google Cloud. Tutorial dan artikel konseptual yang mendampinginya ditujukan untuk sysadmin, developer, dan engineer yang ingin menggunakan mesh layanan yang secara dinamis mengarahkan traffic ke lingkungan sumber atau ke Google Cloud.

Mesh layanan dapat mengurangi kompleksitas baik migrasi maupun pemfaktoran ulang secara signifikan karena layanan ini memisahkan fungsi jaringan dari fungsi layanan. Platform ini juga mengurangi kompleksitas operasional jaringan karena menyediakan load balancing, pengelolaan traffic, pemantauan, dan kemampuan observasi.

Tutorial ini dimaksudkan untuk membantu Anda bermigrasi dari lingkungan non-Google Cloud (seperti penyedia lokal atau penyedia cloud lainnya) ke Google Cloud. Migrasi tersebut memiliki lapisan kompleksitas jaringan karena Anda harus menyiapkan saluran komunikasi yang aman antara lingkungan non-Google Cloud dan lingkungan Google Cloud.

Diagram berikut menunjukkan cara menggunakan mesh layanan untuk mengarahkan traffic ke microservice yang berjalan di lingkungan sumber atau ke Google Cloud:

Mesh layanan untuk mengarahkan traffic ke microservice yang berjalan di lingkungan lama atau ke Google Cloud.

Pada diagram sebelumnya, mesh layanan mengarahkan traffic ke microservice yang berjalan di lingkungan sumber atau ke Google Cloud.

Pada tutorial ini, Anda akan menggunakan software berikut:

Tujuan

  • Melakukan inisialisasi lingkungan yang menyimulasikan pusat data lokal.
  • Deploy contoh workload ke pusat data lokal.
  • Uji workload yang berjalan di pusat data lokal.
  • Konfigurasikan lingkungan tujuan di Google Cloud.
  • Migrasikan workload dari pusat data lokal ke lingkungan tujuan.
  • Uji workload yang berjalan di lingkungan tujuan.
  • Menghentikan penggunaan pusat data lokal.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk:

Gunakan kalkulator harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda perkirakan.

Sebelum memulai

  1. Buat organisasi, Google Cloud, atau gunakan organisasi yang sudah Anda miliki. Anda juga memerlukan Peran Project Creator untuk organisasi tersebut.
  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Menyiapkan lingkungan Anda

Anda melakukan sebagian besar langkah pada tutorial ini di Cloud Shell.

  1. Buka Cloud Shell:

    Buka Cloud Shell

  2. Ubah direktori kerja ke direktori ${HOME}:

      cd "${HOME}"
    
  3. Buat clone repositori Git yang berisi skrip dan file manifes untuk men-deploy dan mengonfigurasi contoh workload:

      git clone https://github.com/GoogleCloudPlatform/solutions-istio-mesh-expansion-migration
    
  4. Lakukan autentikasi dengan Kredensial Default Aplikasi (ADC):

      gcloud auth application-default login
    

    Di output, Anda akan melihat jalur ke file Application Default Credentials:

    Credentials saved to file:
    [/tmp/tmp.T5Qae7XwAO/application_default_credentials.json]
    

    Kredensial ini akan digunakan oleh library mana pun yang meminta ADC.

    Catat jalur ke file Application Default Credentials.

  5. Inisialisasi variabel lingkungan:

    APPLICATION_DEFAULT_CREDENTIALS_PATH=APPLICATION_DEFAULT_CREDENTIALS_PATH
    BILLING_ACCOUNT_ID=BILLING_ACCOUNT_ID
    DEFAULT_FOLDER=DEFAULT_FOLDER
    DEFAULT_PROJECT=DEFAULT_PROJECT
    DEFAULT_REGION=DEFAULT_REGION
    DEFAULT_ZONE=DEFAULT_ZONE
    GKE_CLUSTER_NAME=istio-migration
    TUTORIAL_DIRECTORY_PATH="$(pwd)"/solutions-istio-mesh-expansion-migration
    ORGANIZATION_ID=ORGANIZATION_ID
    

    Ganti kode berikut:

  • APPLICATION_DEFAULT_CREDENTIALS_PATH: jalur ke file ADC dari langkah sebelumnya.
  • BILLING_ACCOUNT_ID: ID akun penagihan yang akan digunakan.
  • DEFAULT_FOLDER: ID folder Google Cloud untuk membuat project Google Cloud. Jika Anda ingin Terraform membuat project Google Cloud langsung di organisasi Google Cloud, biarkan string ini kosong.
  • DEFAULT_PROJECT: ID project Google Cloud untuk menyediakan resource guna menyelesaikan tutorial ini. Terraform membuat project ini untuk Anda saat menyediakan lingkungannya.
  • DEFAULT_REGION: region default tempat resource disediakan.
  • DEFAULT_ZONE: zona default tempat resource disediakan.
  • ORGANIZATION_ID:ID organisasi Google Cloud Anda.

Contoh workload

Dalam tutorial ini, Anda akan menggunakan aplikasi Bookinfo yang merupakan aplikasi microservice polyglot 4 tingkat yang menampilkan informasi tentang buku. Aplikasi ini dirancang untuk berjalan di Kubernetes, tetapi Anda men-deploy-nya di instance Compute Engine menggunakan Docker dan Docker Compose. Dengan Docker Compose, Anda mendeskripsikan aplikasi multi-container menggunakan YAML deskriptor. Kemudian, Anda bisa memulai aplikasi dengan menjalankan satu perintah.

Meskipun contoh workload ini sudah berada dalam container, pendekatan ini juga berlaku untuk layanan yang tidak dalam container. Dalam kasus tersebut, Anda dapat menambahkan fase modernisasi di tempat Anda menyimpan layanan dalam container yang ingin dimigrasikan.

Aplikasi Bookinfo memiliki empat komponen microservice:

  • productpage: Menghubungi microservice details, ratings, dan reviews untuk mengisi halaman informasi buku
  • details: Menyajikan informasi tentang buku
  • reviews: Berisi ulasan buku
  • ratings: Menampilkan informasi peringkat buku bersamaan dengan ulasan buku

Menyediakan lingkungan Anda

Di bagian ini, Anda akan menyediakan lingkungan berikut untuk tutorial ini:

  • Lingkungan yang menyimulasikan pusat data lokal sumber
  • Lingkungan yang menyimulasikan tujuan migrasi

Pada tutorial ini, kedua lingkungan dijalankan di Google Cloud. Pendekatan ini menyederhanakan proses penyiapan karena hanya ada satu fase bootstrap. Anda akan otomatis menyediakan lingkungan sumber dan target menggunakan Terraform.

  1. Di Cloud Shell, ubah direktori kerja ke direktori repositori:

    cd "${TUTORIAL_DIRECTORY_PATH}"
    
  2. Lakukan inisialisasi konfigurasi backend Terraform:

    scripts/init.sh \
      --application-credentials "${APPLICATION_DEFAULT_CREDENTIALS_PATH}" \
      --billing-account-id "${BILLING_ACCOUNT_ID}" \
      --default-folder "${DEFAULT_FOLDER}" \
      --default-project "${DEFAULT_PROJECT}" \
      --default-region "${DEFAULT_REGION}" \
      --default-zone "${DEFAULT_ZONE}" \
      --organization-id "${ORGANIZATION_ID}"
    

    Skrip init.sh akan melakukan hal berikut:

    • Buat deskriptor melakukan konfigurasi pada backend Terraform.
    • Menginisialisasi direktori kerja Terraform.
  3. Ubah direktori kerja ke direktori terraform:

    cd "${TUTORIAL_DIRECTORY_PATH}"/terraform
    
  4. Terapkan perubahan dengan Terraform:

    terraform apply
    

    Saat diminta, tinjau perubahan yang diusulkan lalu konfirmasi dengan menjawab yes.

    Outputnya mirip dengan yang berikut ini:

    Apply complete! Resources: 27 added, 0 changed, 0 destroyed
    

Dengan menerapkan perubahan yang diusulkan bersama Terraform, Anda mengotomatiskan tugas-tugas berikut:

  • Membuat aturan firewall untuk mengizinkan akses eksternal ke microservice serta ke komunikasi database dan antar-node.
  • Membuat dan mengaktifkan akun layanan untuk instance Compute Engine. Pada tutorial ini, Anda akan membuat akun layanan untuk instance Compute Engine yang akan digunakan. Sebaiknya batasi akun layanan hanya untuk peran dan izin akses yang diperlukan untuk menjalankan aplikasi. Untuk tutorial ini, akun layanan untuk instance Compute Engine hanya memerlukan peran Compute Viewer (roles/compute.viewer). Peran ini memberikan akses hanya baca ke resource Compute Engine.
  • Menyediakan dan mengonfigurasi instance Compute Engine untuk menghosting workload yang akan dimigrasikan, sebagai lingkungan sumber. Saat mengonfigurasi instance Compute Engine, Anda menyediakan skrip startup yang menginstal Docker, Docker Compose, dan Dnsmasq.
  • Membuat dan mengaktifkan akun layanan untuk cluster GKE guna menghosting workload sebagai lingkungan target. Pada tutorial ini, Anda akan membuat akun layanan yang digunakan oleh node cluster GKE. Sebaiknya batasi akun layanan hanya untuk peran dan izin akses yang diperlukan untuk menjalankan aplikasi. Untuk tutorial ini, peran yang diperlukan untuk akun layanan untuk node cluster GKE adalah sebagai berikut:
  • Menyediakan dan mengonfigurasi cluster GKE untuk menghosting workload, sebagai lingkungan target.

    Untuk menyediakan cluster GKE, Terraform menggunakan modul Terraform kubernetes engine.

Men-deploy workload di lingkungan sumber

Pada tutorial ini, Anda akan men-deploy Aplikasi Istio Bookinfo sebagai workload yang akan dimigrasikan. Diagram berikut menunjukkan arsitektur target lingkungan sumber:

Arsitektur target untuk lingkungan sumber.

Pada diagram sebelumnya, klien mengakses contoh workload yang berjalan di Compute Engine. Catatan: Pada tutorial ini, klien akan terhubung langsung ke satu instance Compute Engine untuk mengurangi kompleksitas.

Dalam lingkungan produksi yang sebenarnya, adanya koneksi langsung ini kecil kemungkinannya karena Anda memerlukan lapisan load balancing untuk menjalankan beberapa instance workload.

Untuk men-deploy workload, jalankan langkah-langkah berikut.

  1. Di Cloud Shell, ubah direktori kerja ke direktori repositori:

    cd "${TUTORIAL_DIRECTORY_PATH}"
    
  2. Deploy workload di instance Compute Engine:

    scripts/workloads.sh \
      --deploy-with "COMPOSE" \
      --default-project "${DEFAULT_PROJECT}" \
      --default-region "${DEFAULT_REGION}" \
      --default-zone "${DEFAULT_ZONE}"
    

    Skrip workloads.sh akan melakukan hal berikut:

    • Mengonfigurasi project, region, dan zona default.
    • Menyalin deskripsi Docker Compose ke instance Compute Engine.
    • Men-deploy contoh workload menggunakan Docker Compose.

    Di output, Anda akan melihat konfirmasi deployment dan cara mengaksesnya. Outputnya mirip dengan yang berikut ini:

    You can access the workload by loading http://[COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP]:9080/productpage
    

    Catat alamat IP COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP karena Anda akan menggunakannya pada langkah berikutnya.

Menguji deployment Anda di lingkungan sumber

Di bagian ini, Anda akan menguji contoh workload yang Anda konfigurasi.

  • Buka browser dan buka URL berikut, COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP adalah alamat IP dari langkah sebelumnya:

    http://COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP:9080/productpage
    

    Halaman Bookinfo ditampilkan dengan detail mengenai buku dan rating yang relevan, seperti yang ditunjukkan pada gambar berikut:

    Halaman rating dan buku di lingkungan sumber.

Konfigurasi Istio

Di bagian ini, Anda akan mengonfigurasi lingkungan tujuan di Google Cloud dengan menginstal Istio, lalu menggunakan Istio untuk menampilkan contoh workload. Diagram berikut menunjukkan arsitektur target lingkungan:

Lingkungan tujuan dengan Istio diinstal.

Seperti yang ditunjukkan pada diagram sebelumnya, Istio menunjukkan workload yang berjalan di Compute Engine.

Instal Istio

  1. Di Cloud Shell, ubah direktori kerja ke direktori repositori:

    cd "${TUTORIAL_DIRECTORY_PATH}"
    
  2. Instal Istio:

    scripts/install-istio.sh \
      --cluster-name "${GKE_CLUSTER_NAME}" \
      --google-cloud-project "${DEFAULT_PROJECT}" \
      --cluster-region "${DEFAULT_REGION}"
    

    Skrip install-istio.sh akan melakukan hal berikut:

    • Download distribusi Istio.
    • Menginstal Istio di cluster GKE lingkungan target.
    • Men-deploy Gateway untuk menampilkan layanan di mesh layanan.
    • Mengonfigurasi Istio untuk mengizinkan perluasan mesh layanan ke instance Compute Engine yang menyimulasikan lingkungan sumber.
    • Menginstal alat visualisasi dan pemantauan mesh layanan, seperti Kiali.

      Setelah perintah ini selesai, konsol akan menampilkan konfirmasi penginstalan. Outputnya mirip dengan yang berikut ini:

      ✔ Istio core installed
      ✔ Istiod installed
      ✔ Ingress gateways installed
      ✔ Egress gateways installed
      ✔ Installation complete
      

Mengonfigurasi perluasan mesh Istio

Di bagian ini, Anda akan menghubungkan instance Compute Engine yang menyimulasikan lingkungan sumber ke mesh layanan.

  1. Di Cloud Shell, ubah direktori kerja ke direktori repositori:

    cd "${TUTORIAL_DIRECTORY_PATH}"
    
  2. Instal dan konfigurasi Istio pada instance Compute Engine:

    scripts/compute-engine-mesh-expansion-setup.sh \
      --default-project "${DEFAULT_PROJECT}" \
      --default-region "${DEFAULT_REGION}" \
      --default-zone "${DEFAULT_ZONE}"
    

    Skrip compute-engine-mesh-expansion-setup.sh akan melakukan hal berikut:

    • Menginstal Istio pada instance Compute Engine lingkungan sumber.
    • Memulai layanan Istio pada instance Compute Engine.

Mengekspos workload

Di bagian ini, Anda akan mendaftarkan workload yang berjalan di instance Compute Engine dan menyimulasikan lingkungan sumber ke mesh layanan Istio.

  1. Di Cloud Shell, ubah direktori kerja ke direktori repositori:

    cd "${TUTORIAL_DIRECTORY_PATH}"
    
  2. Mengekspos workload:

    scripts/workloads.sh \
      --default-project "${DEFAULT_PROJECT}" \
      --default-region "${DEFAULT_REGION}" \
      --default-zone "${DEFAULT_ZONE}" \
      --expose-with "ISTIO_COMPUTE_ENGINE"
    

    Skrip workloads.sh akan melakukan hal berikut:

    • Mengonfigurasi project, region, dan zona default.
    • Mengaktifkan injeksi sidecar otomatis untuk menghindari pengeditan manual pada deskriptor deployment.
    • Mendaftarkan workload yang berjalan di instance Compute Engine ke mesh dengan mengonfigurasi endpoint WorkloadEntries dan Service yang sesuai.
    • Men-deploy ServiceEntries untuk mengizinkan traffic ke server metadata Compute Engine dan ke Cloud API.
    • Men-deploy Layanan Virtual untuk mengalihkan traffic dari Gateway Istio ke instance productpage yang berjalan di instance Compute Engine.

      Di output, Anda akan melihat konfirmasi deployment dan cara mengaksesnya. Outputnya mirip dengan yang berikut ini:

      You can access the workload by loading http://[ISTIO_INGRESS_GATEWAY_EXTERNAL_IP]/productpage
      

      Catat alamat IP ISTIO_INGRESS_GATEWAY_EXTERNAL_IP karena Anda akan menggunakannya pada langkah berikutnya.

Menguji perluasan mesh Istio

Di bagian ini, Anda akan menguji contoh workload yang berjalan di instance Compute Engine tempat Anda menggunakan Istio untuk mengekspos.

  • Buka browser dan buka URL berikut, ISTIO_INGRESS_GATEWAY_EXTERNAL_IP adalah alamat IP dari langkah sebelumnya:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

    Seperti yang ditunjukkan pada gambar berikut, halaman ditampilkan dengan informasi tentang buku dan rating yang relevan:

    Buku dan halaman rating yang ditampilkan setelah pengujian perluasan mesh Istio.

Memvisualisasikan mesh layanan

Di bagian ini, Anda akan menggunakan Kiali untuk menampilkan representasi visual dari mesh layanan.

  1. Buka browser dan buka URL berikut, ISTIO_INGRESS_GATEWAY_EXTERNAL_IP adalah alamat IP dari langkah sebelumnya:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/kiali/console/graph/namespaces/?edges=requestDistribution&graphType=versionedApp&namespaces=default%2Cistio-system&idleNodes=false&duration=60&refresh=15000&operationNodes=false&idleEdges=false&injectServiceNodes=true&layout=dagre
    

    Dasbor layanan Kiali akan ditampilkan.

  2. Di Cloud Shell, jalankan permintaan beberapa kali untuk halaman utama contoh workload:

    ISTIO_INGRESS_GATEWAY_EXTERNAL_IP="$(kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
    for i in {1..10000}; do curl -s -o /dev/null -w "$(date --iso-8601=ns) - %{http_code}\n"  http://"${ISTIO_INGRESS_GATEWAY_EXTERNAL_IP}"/productpage; done
    

    Perintah ini menghasilkan traffic ke aplikasi Bookinfo. Dalam output, Anda akan melihat daftar stempel waktu permintaan HTTP ke layanan productpage, dan kode pengembalian HTTP untuk setiap permintaan (dalam hal ini 200 OK). Outputnya mirip dengan hal berikut:

    2021-06-09T10:16:15,355323181+00:00 - 200
    2021-06-09T10:16:15,355323182+00:00 - 200
    2021-06-09T10:16:15,355323183+00:00 - 200
    [...]
    

    Pada dasbor layanan Kiali, Anda akan melihat diagram mesh saat ini, dengan traffic yang dialihkan ke layanan yang berjalan di Compute Engine. Semua traffic dialihkan dariistio-ingressgateway ke productpage microservice yang berjalan pada instance Compute Engine dengan compute-engine label versi, dan ke layanan kiali untuk memvisualisasikan mesh layanan.

    Anda tidak melihat layanan lainnya dalam grafik (details, reviews, dan ratings) karena microservice productpage microservice that runs in yang berjalan di Compute Engine terhubung langsung ke microservice lainnya yang berjalan di Compute Engine. Microservice productpage tidak melewati mesh layanan.

    Jika ingin semua traffic melewati mesh layanan, Anda harus mengonfigurasi ulang workload yang berjalan di Compute Engine agar mengarah ke layanan di mesh layanan, bukan terhubung ke layanan secara langsung.

    Jika Anda tidak melihat diagram berikut di dasbor Kiali, muat ulang halamannya.

    Halaman dasbor Kiali.

    Seperti yang ditunjukkan pada diagram sebelumnya, dasbor Kiali menunjukkan traffic yang dialihkan ke layanan yang berjalan di Compute Engine.

  3. Pada Cloud Shell, untuk menghentikan perintah pembuatan traffic, tekan Control+C.

Migrasikan workload.

Di bagian ini, Anda akan memigrasikan komponen contoh workload dari instance Compute Engine ke cluster GKE. Untuk setiap microservice dari contoh workload, Anda lakukan hal berikut:

  • Deploy instance microservice di cluster GKE.
  • Mulai arahkan traffic ke instance microservice yang berjalan di Compute Engine dan yang berjalan di GKE.

Diagram berikut menunjukkan arsitektur target sistem untuk bagian ini:

Arsitektur target dengan traffic yang dialihkan ke instance microservice di Compute Engine dan GKE.

Seperti yang ditunjukkan pada diagram sebelumnya, Cloud Load Balancing mengalihkan traffic ke gateway Istio, kemudian Istio mengalihkan traffic ke layanan yang berjalan di Compute Engine, atau ke layanan yang berjalan di GKE.

Untuk memigrasikan komponen contoh workload, lakukan tindakan berikut.

  1. Di Cloud Shell, ubah direktori kerja ke direktori repositori:

    cd "${TUTORIAL_DIRECTORY_PATH}"
    
  2. Deploy workload di lingkungan target:

    scripts/workloads.sh \
      --default-project "${DEFAULT_PROJECT}" \
      --default-region "${DEFAULT_REGION}" \
      --default-zone "${DEFAULT_ZONE}" \
      --deploy-with "GKE"
    

    Skrip workloads.sh akan melakukan hal berikut:

    Anda akan melihat konfirmasi deployment dan cara mengaksesnya. Outputnya mirip dengan hal berikut:

    You can access the workload by loading http://[ISTIO_INGRESS_GATEWAY_EXTERNAL_IP]/productpage
    

    Layanannya secara otomatis memilih baik contoh workload yang berjalan di instance Compute Engine maupun yang berjalan di cluster GKE.

Menguji workload yang berjalan di Compute Engine dan GKE

Di bagian ini, Anda akan menguji contoh workload yang Anda deploy di Compute Engine dan GKE.

  • Buka browser dan buka URL berikut, ISTIO_INGRESS_GATEWAY_EXTERNAL_IP adalah alamat IP dari langkah sebelumnya:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

    Seperti yang ditunjukkan pada gambar berikut, halaman Bookinfo ditampilkan dengan informasi tentang buku dan rating yang relevan:

    Halaman buku dan rating yang ditampilkan setelah menguji contoh workload yang di-deploy di Compute Engine dan GKE.

    Karena Anda men-deploy versi contoh workload yang sama di Compute Engine dan di cluster GKE, maka outputnya sama dengan pengujian sebelumnya.

Memvisualisasikan mesh layanan

Di bagian ini, Anda akan menggunakan Kiali untuk menampilkan representasi visual dari mesh layanan.

  1. Buka browser dan buka URL berikut, ISTIO_INGRESS_GATEWAY_EXTERNAL_IP adalah alamat IP dari langkah sebelumnya:

      http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/kiali/console/graph/namespaces/?edges=requestDistribution&graphType=versionedApp&namespaces=default%2Cistio-system&idleNodes=false&duration=60&refresh=15000&operationNodes=false&idleEdges=false&injectServiceNodes=true&layout=dagre
    
  2. Di Cloud Shell, jalankan permintaan beberapa kali untuk halaman utama contoh workload:

    ISTIO_INGRESS_GATEWAY_EXTERNAL_IP="$(kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
    for i in {1..10000}; do curl -s -o /dev/null -w "$(date --iso-8601=ns) - %{http_code}\n"  http://"${ISTIO_INGRESS_GATEWAY_EXTERNAL_IP}"/productpage; done
    

    Dengan perintah ini, Anda menghasilkan traffic ke aplikasi Bookinfo. Output yang diharapkan adalah daftar tanggal permintaan HTTP ke layanan productpage, dan kode pengembalian HTTP dari setiap permintaan (dalam hal ini 200 OK). Outputnya mirip dengan yang berikut ini:

    2021-06-09T10:16:15,355323181+00:00 - 200
    2021-06-09T10:16:15,355323182+00:00 - 200
    2021-06-09T10:16:15,355323183+00:00 - 200
    [...]
    
  3. Pada dasbor layanan Kiali, Anda dapat melihat diagram mesh saat ini, dengan traffic yang dialihkan ke layanan yang berjalan di Compute Engine dan GKE.

    Setiap instance microservice memiliki label untuk menjelaskan revisinya. Untuk instance yang berjalan di Compute Engine, labelnya adalah compute-engine. Untuk instance yang berjalan di GKE, terdapat string tambahan, misalnya, v1 atau v3. Instance yang menjalankan Compute Engine terhubung langsung ke instance lain di Compute Engine dan tidak melalui mesh layanan. Oleh karena itu, Anda tidak melihat traffic yang berasal dari instance yang berjalan di Compute Engine ke instance lainnya.

    Jika ingin semua traffic melalui mesh layanan, Anda harus mengonfigurasi ulang workload yang berjalan di Compute Engine agar mengarah ke layanan di mesh layanan, bukan yang terhubung ke layanan secara langsung.

    Traffic ini hampir terbagi antara layanan yang berjalan di Compute Engine dan layanan yang berjalan di GKE. Layanan ini menyeimbangkan traffic secara merata di antara instance layanan yang dipilihnya, baik yang berjalan di cluster GKE maupun di instance Compute Engine.

    Anda dapat mengonfigurasi kebijakan load balancing untuk revisi di setiap layanan dengan resource DestinationRule. Jika Anda tidak melihat diagram berikut di dasbor Kiali, muat ulang halamannya.

    Halaman dasbor Kiali.

    Seperti yang ditunjukkan pada diagram sebelumnya, dasbor Kiali menampilkan traffic yang dialihkan ke layanan yang berjalan di Compute Engine dan ke layanan yang berjalan di GKE.

  4. Pada Cloud Shell, untuk menghentikan perintah pembuatan traffic, tekan Control+C.

Mengalihkan traffic hanya ke cluster GKE

Di bagian ini, Anda akan mengalihkan traffic ke instance layanan yang hanya berjalan di cluster GKE. Untuk setiap layanan dari contoh workload, hapus WorkloadEntry yang mengarah ke layanan yang berjalan di Compute Engine, sehingga layanan hanya memilih instance microservice yang berjalan di cluster GKE.

Diagram berikut menunjukkan arsitektur target dari sistem:

Arsitektur target dengan traffic yang dialihkan ke cluster GKE.

Pada arsitektur ini, traffic dialihkan hanya ke cluster GKE.

Untuk menerapkan pemilihan rute ini, jalankan langkah-langkah berikut.

  1. Di Cloud Shell, ubah direktori kerja ke direktori repositori:

    cd "${TUTORIAL_DIRECTORY_PATH}"
    
  2. Ekspos workload hanya di lingkungan target:

    scripts/workloads.sh \
      --default-project "${DEFAULT_PROJECT}" \
      --default-region "${DEFAULT_REGION}" \
      --default-zone "${DEFAULT_ZONE}" \
      --expose-with "GKE_ONLY"
    

    Skrip workloads.sh menghapus WorkloadEntries yang mengarah ke instance microservice yang berjalan di Compute Engine dari cluster GKE.

    Anda akan melihat konfirmasi deployment dan cara mengaksesnya. Outputnya mirip dengan hal berikut:

    You can access the workload by loading http://[ISTIO_INGRESS_GATEWAY_EXTERNAL_IP]/productpage
    

Menguji workload yang berjalan di GKE

Di bagian ini, Anda akan menguji contoh workload yang Anda deploy di GKE.

  • Buka browser dan buka URL berikut, ISTIO_INGRESS_GATEWAY_EXTERNAL_IP adalah alamat IP dari langkah sebelumnya:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

    Seperti yang ditunjukkan pada gambar berikut, halaman Bookinfo ditampilkan dengan informasi tentang buku dan rating yang relevan:

    Halaman buku dan rating ditampilkan setelah menguji contoh workload di GKE.

Memvisualisasikan mesh layanan

Di bagian ini, Anda akan menggunakan Kiali untuk menampilkan representasi visual dari mesh layanan.

  1. Buka browser dan buka URL berikut, ISTIO_INGRESS_GATEWAY_EXTERNAL_IP adalah alamat IP dari langkah sebelumnya:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/kiali/console/graph/namespaces/?edges=requestDistribution&graphType=versionedApp&namespaces=default%2Cistio-system&idleNodes=false&duration=60&refresh=15000&operationNodes=false&idleEdges=false&injectServiceNodes=true&layout=dagre
    
  2. Di Cloud Shell, jalankan permintaan beberapa kali untuk halaman utama contoh workload:

    ISTIO_INGRESS_GATEWAY_EXTERNAL_IP="$(kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
    for i in {1..10000}; do curl -s -o /dev/null -w "$(date --iso-8601=ns) - %{http_code}\n"  http://"${ISTIO_INGRESS_GATEWAY_EXTERNAL_IP}"/productpage; done
    

    Perintah ini menghasilkan traffic ke aplikasi Bookinfo. Output yang diharapkan adalah daftar tanggal permintaan HTTP ke layanan productpage, dan kode pengembalian HTTP dari setiap permintaan (dalam hal ini 200 OK). Outputnya mirip dengan yang berikut ini:

    2021-06-09T10:16:15,355323181+00:00 - 200
    2021-06-09T10:16:15,355323182+00:00 - 200
    2021-06-09T10:16:15,355323183+00:00 - 200
    [...]
    
  3. Pada dasbor layanan Kiali, Anda dapat melihat diagram mesh saat ini beserta traffic yang dialihkan ke layanan yang berjalan di GKE. Anda men-deploy dua instance dari setiap microservice: satu berjalan di instance Compute Engine, dan satu lagi berjalan di cluster GKE). Namun, karena Anda menghapus WorkloadEntries yang mengarah ke instance microservice yang berjalan di Compute Engine, layanan hanya memilih instance microservice yang berjalan di cluster GKE.

    Jika Anda tidak melihat diagram berikut di dasbor Kiali, muat ulang halaman.

    Instance microservice.

    Seperti ditunjukkan pada diagram sebelumnya, dasbor Kiali menunjukkan traffic yang dialihkan ke layanan yang berjalan di GKE.

  4. Pada Cloud Shell, untuk menghentikan perintah pembuatan traffic, tekan Control+C.

Menghentikan lingkungan sumber

Karena semua traffic dirutekan ke cluster GKE, Anda kini dapat menghentikan instance workload yang berjalan di Compute Engine.

Diagram berikut menunjukkan arsitektur target sistem untuk bagian ini:

Lingkungan sumber tanpa instance workload yang berjalan di Compute Engine.

Seperti yang ditunjukkan pada diagram sebelumnya, Istio mengalihkan traffic ke layanan yang hanya berjalan di GKE, dan workload yang berjalan di Compute Engine dihentikan.

Jalankan langkah-langkah berikut untuk menghentikan lingkungan sumber.

  1. Di Cloud Shell, ubah direktori kerja ke direktori repositori:

    cd "${TUTORIAL_DIRECTORY_PATH}"
    
  2. Ekspos workload hanya di lingkungan target:

    scripts/workloads.sh \
      --default-project "${DEFAULT_PROJECT}" \
      --default-region "${DEFAULT_REGION}" \
      --default-zone "${DEFAULT_ZONE}" \
      --deploy-with "GKE_ONLY"
    

    Skrip workloads.sh menghentikan container yang berjalan di instance Compute Engine.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource satu per satu

  1. Di Cloud Shell, ubah direktori kerja ke direktori repositori:

    cd "${TUTORIAL_DIRECTORY_PATH}"/terraform
    
  2. Hapus resource yang Anda sediakan:

    terraform destroy -auto-approve
    

Langkah berikutnya