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:
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:
- Ubuntu Server dan Container-Optimized OS: Sistem operasi yang digunakan dalam tutorial ini
- Edisi Komunitas Docker: 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 sidecar yang digunakan saat bergabung dengan mesh layanan Istio
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
- Buat organisasi, Google Cloud, atau gunakan organisasi yang sudah Anda miliki. Anda juga memerlukan Peran Project Creator untuk organisasi tersebut.
-
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.
Buka Cloud Shell:
Ubah direktori kerja ke direktori
${HOME}
:cd "${HOME}"
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
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
.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 microservicedetails
,ratings
, danreviews
untuk mengisi halaman informasi bukudetails
: Menyajikan informasi tentang bukureviews
: Berisi ulasan bukuratings
: 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.
Di Cloud Shell, ubah direktori kerja ke direktori repositori:
cd "${TUTORIAL_DIRECTORY_PATH}"
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.
Ubah direktori kerja ke direktori
terraform
:cd "${TUTORIAL_DIRECTORY_PATH}"/terraform
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:
- Monitoring Viewer
(
roles/monitoring.viewer
) - Monitoring Metric Writer
(
roles/monitoring.metricWriter
) - Logs Writer
(
roles/logging.logWriter
), seperti yang dijelaskan dalam Meningkatkan keamanan cluster Anda
- Monitoring Viewer
(
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:
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.
Di Cloud Shell, ubah direktori kerja ke direktori repositori:
cd "${TUTORIAL_DIRECTORY_PATH}"
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:
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:
Seperti yang ditunjukkan pada diagram sebelumnya, Istio menunjukkan workload yang berjalan di Compute Engine.
Instal Istio
Di Cloud Shell, ubah direktori kerja ke direktori repositori:
cd "${TUTORIAL_DIRECTORY_PATH}"
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.
Di Cloud Shell, ubah direktori kerja ke direktori repositori:
cd "${TUTORIAL_DIRECTORY_PATH}"
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.
Di Cloud Shell, ubah direktori kerja ke direktori repositori:
cd "${TUTORIAL_DIRECTORY_PATH}"
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:
Memvisualisasikan mesh layanan
Di bagian ini, Anda akan menggunakan Kiali untuk menampilkan representasi visual dari mesh layanan.
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.
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 ini200 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 dari
istio-ingressgateway
keproductpage
microservice yang berjalan pada instance Compute Engine dengancompute-engine
label versi, dan ke layanankiali
untuk memvisualisasikan mesh layanan.Anda tidak melihat layanan lainnya dalam grafik (
details
,reviews
, danratings
) karena microserviceproductpage
microservice that runs in yang berjalan di Compute Engine terhubung langsung ke microservice lainnya yang berjalan di Compute Engine. Microserviceproductpage
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.
Seperti yang ditunjukkan pada diagram sebelumnya, dasbor Kiali menunjukkan traffic yang dialihkan ke layanan yang berjalan di Compute Engine.
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:
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.
Di Cloud Shell, ubah direktori kerja ke direktori repositori:
cd "${TUTORIAL_DIRECTORY_PATH}"
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:- Mengaktifkan injeksi sidecar otomatis untuk menghindari pengeditan manual pada deskriptor deployment.
- Men-deploy ServiceAccounts dan Deployment untuk menjalankan contoh workload di 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
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:
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.
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
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 ini200 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 [...]
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
atauv3
. 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.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.
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:
Pada arsitektur ini, traffic dialihkan hanya ke cluster GKE.
Untuk menerapkan pemilihan rute ini, jalankan langkah-langkah berikut.
Di Cloud Shell, ubah direktori kerja ke direktori repositori:
cd "${TUTORIAL_DIRECTORY_PATH}"
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
menghapusWorkloadEntries
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:
Memvisualisasikan mesh layanan
Di bagian ini, Anda akan menggunakan Kiali untuk menampilkan representasi visual dari mesh layanan.
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
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 ini200 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 [...]
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.
Seperti ditunjukkan pada diagram sebelumnya, dasbor Kiali menunjukkan traffic yang dialihkan ke layanan yang berjalan di GKE.
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:
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.
Di Cloud Shell, ubah direktori kerja ke direktori repositori:
cd "${TUTORIAL_DIRECTORY_PATH}"
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
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource satu per satu
Di Cloud Shell, ubah direktori kerja ke direktori repositori:
cd "${TUTORIAL_DIRECTORY_PATH}"/terraform
Hapus resource yang Anda sediakan:
terraform destroy -auto-approve
Langkah berikutnya
- Baca tentang Google Kubernetes Engine.
- Baca tentang Istio.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.