Men-deploy migrasi dengan ekspansi mesh Istio

Last reviewed 2023-11-02 UTC

Dokumen ini menjelaskan cara menginisialisasi dan mengonfigurasi mesh layanan untuk mendukung migrasi fitur demi fitur dari pusat data lokal ke Google Cloud. Anda dianggap sudah memahami arsitektur referensi terkait. Fitur ini ditujukan bagi administrator, developer, dan engineer yang ingin menggunakan mesh layanan yang secara dinamis mengarahkan traffic ke lingkungan sumber atau ke Google Cloud.

Panduan deployment ini ditujukan untuk membantu Anda melakukan migrasi dari lingkungan non-Google Cloud (seperti lingkungan lokal atau penyedia cloud lainnya) ke Google Cloud. Migrasi tersebut memiliki lapisan kerumitan jaringan karena Anda harus menyiapkan saluran komunikasi yang aman antara lingkungan non-Google Cloud dan lingkungan Google Cloud.

Arsitektur

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

Arsitektur yang menggunakan mesh layanan untuk mengarahkan traffic ke microservice yang berjalan di lingkungan lama atau ke Google Cloud.

Dalam diagram, Gateway Istio menyediakan mesh layanan yang menautkan microservice suatu aplikasi. Google Kubernetes Engine (GKE) berfungsi sebagai container untuk menentukan batas setiap microservice. Untuk mengetahui informasi selengkapnya, lihat Mendukung migrasi Anda dengan perluasan mesh Istio.

Dalam deployment ini, Anda akan menggunakan software berikut:

  • Ubuntu Server dan Container-Optimized OS: Sistem operasi yang digunakan dalam deployment ini.
  • Docker Engine: Platform untuk menjalankan workload dalam container.
  • Docker Compose: Alat untuk menentukan dan menjalankan aplikasi Docker.
  • Istio: Mesh layanan open source.
  • Kiali: Alat untuk memvisualisasikan mesh layanan Istio.
  • Envoy: Proxy file bantuan yang digunakan oleh Istio untuk menyertakan layanan dalam mesh.

Contoh workload

Dalam deployment ini, Anda menggunakan aplikasi Bookinfo, yaitu 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 dengan menggunakan Docker dan Docker Compose. Dengan Docker Compose, Anda mendeskripsikan aplikasi multi-container menggunakan descriptors YAML. 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 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

Untuk mendemonstrasikan Istio dan fiturnya, penulis dan pengelola aplikasi Bookinfo telah menerapkan beberapa versi dari sebagian komponen ini. Dalam deployment ini, Anda hanya men-deploy satu versi dari setiap komponen.

Tujuan

  • Menginisialisasi lingkungan yang menyimulasikan pusat data lokal.
  • Deploy dan uji contoh workload di pusat data lokal.
  • Mengonfigurasi lingkungan target di Google Cloud.
  • Migrasikan workload dari pusat data lokal ke lingkungan target.
  • Menguji beban kerja yang berjalan di lingkungan target.
  • Menghentikan penggunaan pusat data lokal.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Menyiapkan lingkungan Anda

Anda melakukan sebagian besar langkah untuk deployment ini di Cloud Shell.

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Di Cloud Shell, periksa jumlah ruang kosong yang Anda miliki:

    df -h
    

    Untuk menyelesaikan deployment ini, Anda memerlukan ruang kosong sekitar 200 MB.

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

    cd "${HOME}"
    
  4. 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
    
  5. Lakukan autentikasi dengan Kredensial Default Aplikasi (ADC):

    gcloud auth application-default login
    

    Output menunjukkan jalur ke file Application Default Credentials:

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

    Catat jalur ke file Application Default Credentials. Kredensial ini akan digunakan oleh library mana pun yang meminta ADC.

  6. 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
    DEPLOYMENT_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 bawah organisasi Google Cloud, kosongkan string ini.
    • DEFAULT_PROJECT: ID project Google Cloud untuk menyediakan resource guna menyelesaikan deployment ini. Terraform membuat project ini untuk Anda saat menyediakan lingkungan.
    • DEFAULT_REGION: region default tempat resource disediakan.
    • DEFAULT_ZONE: zona default tempat resource disediakan.
    • ORGANIZATION_ID: ID organisasi Google Cloud Anda.

Menyediakan lingkungan Anda

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

  • Lingkungan yang melakukan simulasi pusat data lokal sumber.
  • Lingkungan yang menyimulasikan target migrasi.

Dalam deployment ini, kedua lingkungan dijalankan di Google Cloud. Pendekatan ini membantu 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 "${DEPLOYMENT_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 "${DEPLOYMENT_DIRECTORY_PATH}"/terraform
    
  4. Terapkan perubahan dengan Terraform:

    terraform apply
    
  5. Saat diminta, tinjau perubahan yang diusulkan dan konfirmasi dengan memasukkan yes.

    Outputnya mirip dengan hal 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 digunakan oleh instance Compute Engine. Sebaiknya batasi akun layanan hanya untuk peran dan izin akses yang diperlukan untuk menjalankan aplikasi. Untuk deployment ini, akun layanan untuk instance Compute Engine hanya memerlukan peran Compute Viewer (roles/compute.viewer). Peran ini menyediakan akses hanya baca ke resource Compute Engine.
  • Menyediakan dan mengonfigurasi instance Compute Engine untuk menghosting beban kerja yang akan dimigrasikan, sebagai lingkungan sumber. Saat mengonfigurasi instance Compute Engine, Anda perlu menyediakan skrip startup yang menginstal Docker, Docker Compose, dan Dnsmasq.
  • Membuat dan mengaktifkan akun layanan untuk cluster GKE guna menghosting beban kerja sebagai lingkungan target. Dalam deployment ini, Anda akan membuat akun layanan yang digunakan node cluster GKE. Sebaiknya batasi akun layanan hanya untuk peran dan izin akses yang diperlukan agar dapat menjalankan aplikasi. Untuk deployment ini, peran yang diperlukan untuk akun layanan untuk node cluster GKE adalah sebagai berikut:
  • Menyediakan dan mengonfigurasi cluster GKE untuk menghosting beban kerja, sebagai lingkungan target. Untuk menyediakan cluster GKE, Terraform menggunakan modul Terraform kubernetes-engine.

Men-deploy workload di lingkungan sumber

Dalam deployment ini, Anda akan men-deploy Aplikasi Istio Bookinfo sebagai beban kerja yang akan dimigrasikan. Diagram berikut menunjukkan arsitektur lingkungan sumber:

Arsitektur target untuk lingkungan sumber.

Dalam diagram, klien mengakses contoh beban kerja yang sedang berjalan di Compute Engine. Untuk mengurangi kompleksitas dalam contoh ini, klien terhubung langsung ke satu instance Compute Engine. Dalam lingkungan produksi, koneksi langsung ini kecil kemungkinannya karena Anda memerlukan lapisan load balancing untuk menjalankan beberapa instance beban kerja.

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

    cd "${DEPLOYMENT_DIRECTORY_PATH}"
    
  2. Deploy beban kerja 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.

    Jika sebelumnya Anda belum membuat file kunci SSH untuk melakukan autentikasi dengan instance Compute Engine, gcloud CLI akan meminta Anda untuk membuatnya.

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

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

    Di output, COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP adalah alamat IP tempat beban kerja ditayangkan. Catat alamat IP-nya, karena Anda akan menggunakannya pada langkah selanjutnya.

Menguji deployment Anda di lingkungan sumber

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

    http://COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP:9080/productpage
    

Halaman Bookinfo ditampilkan dengan detail tentang buku dan rating yang relevan.

Konfigurasi Istio

Di bagian ini, Anda mengonfigurasi lingkungan target di Google Cloud dengan menginstal Istio, lalu menggunakan Istio untuk mengekspos contoh beban kerja. Diagram berikut menunjukkan arsitektur lingkungan target:

Lingkungan tujuan dengan Istio diinstal.

Dalam diagram ini, Istio mengekspos beban kerja yang berjalan di Compute Engine.

Instal Istio

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

    cd "${DEPLOYMENT_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 berjalan, konsol akan menampilkan konfirmasi penginstalan. Outputnya mirip dengan hal 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. Mesh layanan menangani penghubungan microservice di lingkungan lama yang akan dimigrasikan ke lingkungan target. Pada fase ini, mesh layanan kosong, menunggu layanan didaftarkan. Mesh layanan belum menerima traffic produksi.

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

    cd "${DEPLOYMENT_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 beban kerja yang berjalan di instance Compute Engine dan menyimulasikan lingkungan sumber ke mesh layanan Istio.

Skrip workloads.sh yang Anda jalankan di bagian ini menyiapkan aturan perutean untuk memisahkan traffic produksi antara layanan yang berjalan di lingkungan lama dan layanan yang berjalan di lingkungan target, menggunakan mesh layanan. Karena perutean traffic di dalam mesh layanan bersifat transparan bagi klien, klien tidak akan mengetahui bahwa konfigurasi perutean telah berubah.

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

    cd "${DEPLOYMENT_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"
    
  3. 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 WorkloadEntry dan Layanan 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 hal berikut ini:

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

    Di output, ISTIO_INGRESS_GATEWAY_EXTERNAL_IP adalah alamat IP tempat beban kerja ditayangkan. Catat alamat IP karena Anda akan menggunakannya pada langkah selanjutnya.

Menguji perluasan mesh Istio

Di bagian ini, Anda akan menguji contoh beban kerja yang berjalan di instance Compute Engine yang Anda gunakan untuk mengekspos Istio.

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

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

Titik entri lingkungan sumber (yang terhubung ke instance Compute Engine) masih tersedia di tahap ini. Saat memigrasikan lingkungan produksi, sebaiknya Anda secara bertahap mengalihkan traffic ke lingkungan target dengan memperbarui konfigurasi lapisan load balancing.

Memvisualisasikan mesh layanan

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

  1. Buka browser, lalu buka URL berikut, dengan 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 beban kerja:

    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
    

    Permintaan ini menghasilkan traffic ke aplikasi Bookinfo. Output-nya menampilkan daftar stempel waktu untuk setiap permintaan HTTP ke layanan productpage, dan kode pengembalian HTTP setiap permintaan (dalam hal ini 200).

    Outputnya mirip dengan hal 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
    [...]
    

    Permintaan memerlukan waktu untuk diselesaikan, sehingga Anda dapat membiarkannya berjalan dan melanjutkan ke langkah berikutnya.

  3. Di dasbor layanan Kiali, Anda akan melihat diagram mesh saat ini, dengan traffic yang dirutekan ke layanan yang berjalan di Compute Engine. Semua traffic dirutekan dari layanan mikro istio-ingressgateway ke layanan mikro productpage yang berjalan pada instance Compute Engine dengan label versi compute-engine, 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 beban kerja yang berjalan di Compute Engine agar mengarah ke layanan di mesh layanan, bukan terhubung ke layanan tersebut secara langsung.

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

    Dasbor Kiali menunjukkan bagaimana lalu lintas diarahkan.

    Diagram di dasbor Kiali menunjukkan bahwa traffic dirutekan ke layanan yang berjalan di Compute Engine.

  4. 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 beban kerja, Anda melakukan 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 sistem untuk bagian ini:

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

Dalam diagram, Cloud Load Balancing merutekan traffic ke Gateway Istio, lalu Istio merutekan traffic ke layanan yang berjalan di Compute Engine, atau ke layanan yang berjalan di GKE.

Untuk memigrasikan komponen contoh beban kerja, lakukan hal berikut:

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

    cd "${DEPLOYMENT_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
    

Mesh layanan mengarahkan traffic ke contoh workload yang berjalan di instance Compute Engine dan workload 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, lalu buka URL berikut, dengan ISTIO_INGRESS_GATEWAY_EXTERNAL_IP adalah alamat IP dari langkah sebelumnya:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

    Halaman Bookinfo ditampilkan dengan informasi tentang buku dan rating yang relevan.

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

Memvisualisasikan mesh layanan

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

  1. Buka browser, lalu buka URL berikut, dengan 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 beban kerja:

    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 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
    [...]
    
  3. Di dasbor layanan Kiali, Anda akan melihat diagram mesh saat ini, dengan traffic yang dirutekan ke layanan yang berjalan di Compute Engine dan GKE.

    Setiap instance microservice memiliki label untuk menjelaskan revisinya:

    • Instance yang berjalan di Compute Engine memiliki label compute-engine.
    • Instance yang berjalan di GKE memiliki string tambahan, misalnya v1 atau v3.

    Instance yang berjalan di Compute Engine terhubung langsung ke instance lain di Compute Engine tanpa melalui mesh layanan. Oleh karena itu, Anda tidak melihat traffic yang berasal dari instance yang berjalan di Compute Engine ke instance lainnya.

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

    Dasbor Kiali menunjukkan bagaimana lalu lintas diarahkan.

    Diagram di dasbor Kiali menunjukkan traffic yang dirutekan 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 merutekan traffic ke instance layanan workload yang berjalan di cluster GKE saja. Untuk setiap layanan dari contoh workload, Anda menghapus referensi WorkloadEntry yang mengarah ke layanan yang berjalan di Compute Engine. Penghapusan ini menyebabkan layanan hanya memilih instance microservice yang berjalan di cluster GKE, dan traffic hanya dirutekan ke cluster GKE. Diagram berikut menunjukkan arsitektur sistem untuk bagian ini:

Arsitektur target dengan traffic yang dirutekan ke cluster GKE.

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

    cd "${DEPLOYMENT_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 referensi WorkloadEntry 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
    

Entri layanan menggunakan workloadSelector untuk otomatis memilih contoh beban kerja yang berjalan di cluster GKE.

Menguji workload yang berjalan di GKE

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

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

    Halaman Bookinfo ditampilkan dengan informasi tentang buku dan rating yang relevan.

Memvisualisasikan mesh layanan

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

  1. Buka browser, lalu buka URL berikut, dengan 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 beban kerja:

    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 hasil HTTP 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
    [...]
    
  3. Dasbor layanan Kiali menampilkan diagram mesh saat ini dengan traffic yang dirutekan ke layanan yang berjalan di GKE. Anda telah men-deploy dua instance dari setiap microservice: satu berjalan di instance Compute Engine, dan satu lagi berjalan di cluster GKE. Namun, karena Anda menghapus referensi WorkloadEntry yang mengarah ke instance microservice yang dijalankan 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:

    Dasbor Kiali menunjukkan bagaimana lalu lintas diarahkan.

    Diagram di dasbor Kiali menunjukkan traffic yang dirutekan ke layanan yang berjalan di GKE.

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

Menghentikan lingkungan sumber

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

Selama migrasi produksi, selalu siapkan pusat data sumber untuk strategi rollback Anda. Sebaiknya Anda mulai menghentikan pusat data sumber hanya jika Anda yakin bahwa solusi baru berfungsi seperti yang diharapkan dan semua mekanisme pencadangan dan fault-tolerance sudah ada.

Diagram berikut menunjukkan arsitektur sistem untuk bagian ini:

Lingkungan sumber tanpa instance workload yang berjalan di Compute Engine.

Dalam diagram ini, Istio merutekan traffic ke layanan yang hanya berjalan di GKE, dan workload yang berjalan di Compute Engine dihentikan.

Untuk menghentikan lingkungan sumber, lakukan hal berikut:

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

    cd "${DEPLOYMENT_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 menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam deployment ini, hapus project yang berisi resource, atau simpan project dan hapus resource satu per satu.

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 "${DEPLOYMENT_DIRECTORY_PATH}"/terraform
    
  2. Hapus resource yang Anda sediakan:

    terraform destroy -auto-approve
    

Langkah selanjutnya

  • Baca tentang GKE.
  • Baca tentang Istio.
  • Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.