Halaman ini menjelaskan cara menambahkan virtual machine (VM) Compute Engine ke Anthos Service Mesh di Google Kubernetes Engine (GKE). Halaman ini menunjukkan cara menginstal Anthos Service Mesh 1.10.6 dengan opsi menyiapkan cluster untuk menambahkan VM.
Jika Anda sudah menginstal Anthos Service Mesh 1.9 or a 1.10 patch release, halaman ini akan menunjukkan cara mengupgrade ke Anthos Service Mesh 1.10.6 dengan opsi yang diperlukan untuk menambahkan VM.
Jika Anda memiliki Anthos Service Mesh 1.9, dan tidak ingin melakukan upgrade, lihat panduan Anthos Service Mesh 1.9 untuk mendapatkan petunjuk tentang cara menambahkan VM ke Anthos Service Mesh 1.9.
Jika memiliki Anthos Service Mesh versi sebelumnya, Anda harus mengupgrade Anthos Service Mesh terlebih dahulu ke versi 1.9 atau yang lebih baru.
Halaman ini menyediakan command line untuk menginstal bidang kontrol dalam cluster.
Pengantar
Anthos Service Mesh memungkinkan Anda mengelola, mengamati, dan mengamankan layanan yang berjalan di Grup Instance Terkelola (MIG) bersama dengan layanan yang berjalan di cluster Google Kubernetes Engine (GKE) di mesh. Dengan begitu, Anda dapat melakukan hal berikut terhadap instance Compute Engine di mesh:
- Kelola traffic.
- Menerapkan mTLS.
- Menerapkan kontrol akses ke traffic layanan.
- Akses layanan Google Cloud dengan aman.
- Kumpulkan metrik, logging, dan pelacakan data.
- Memantau layanan menggunakan Konsol Google Cloud.
Hal ini memungkinkan aplikasi lama yang tidak cocok atau siap untuk containerization memanfaatkan fitur Anthos Service Mesh dan memungkinkan integrasi beban kerja tersebut dengan layanan Anda lainnya.
Cara kerja Duet AI
ASM menyediakan dua Definisi Resource Kustom (CRD) terkait untuk mewakili workload mesin virtual:
WorkloadGroup
mewakili grup logis workload virtual machine yang memiliki properti umum. Hal ini mirip dengan Deployment di Kubernetes.WorkloadEntry
mewakili satu instance dari beban kerja virtual machine. Ini mirip dengan Pod di Kubernetes.Service
kemudian dapat memilihWorkloadGroup
dan memiliki traffic rute ASM ke instance VM dengan cara yang sama sepertiPod
. Hal ini memungkinkan VM bertindak seperti beban kerja lain di mesh.
Anda membuat template instance Compute Engine untuk setiap grup instance Compute Engine, yang menentukan agen proxy layanan untuk setiap instance Compute Engine dalam grup tersebut. Selama penginstalan, agen melakukan bootstrap pada proxy layanan, menyiapkan intersepsi traffic, dan memantau kondisi proxy layanan selama masa aktif instance Compute Engine. Proxy tersebut terhubung dengan bidang kontrol Anthos Service Mesh, lalu secara otomatis mendaftarkan setiap instance Compute Engine sebagai WorkloadEntry untuk WorkloadGroup terkait. Hal ini memungkinkan Anthos Service Mesh memperlakukan setiap instance sebagai endpoint layanan, seperti pod Kubernetes dalam cluster. Anda juga dapat membuat layanan Kubernetes untuk beban kerja VM, seperti yang Anda lakukan untuk pod Kubernetes.
Untuk menyebarkan skala jumlah workload di instance Compute Engine, mulai dari ukuran MIG minimum yang bernilai nol, lihat Penskalaan otomatis grup instance.
Agen proxy layanan mengandalkan pengelola VM untuk memastikan agen diinstal di setiap VM di MIG. Untuk mengetahui informasi selengkapnya tentang grup instance dan pengelolaan VM, lihat Grup instance terkelola (MIG) dan Pengelola VM.
Distribusi Linux yang didukung
Versi OS | didukung |
---|---|
Debian 10 | |
Debian 9 | |
Centos 8 | |
Centos 7 |
Lihat dukungan Debian atau dukungan CentOS untuk mengetahui informasi selengkapnya tentang distribusi OS.
Batasan
- Bidang kontrol mesh harus berupa Anthos Service Mesh 1.9 atau yang lebih baru.
- Hanya grup instance terkelola Compute Engine yang dibuat dari template instance Compute Engine yang didukung.
- Cluster dan VM harus berada di jaringan yang sama, dalam project yang sama, dan menggunakan satu antarmuka jaringan.
- Anda dapat menggunakan fitur ini tanpa langganan GKE Enterprise, tetapi elemen dan fitur UI tertentu di Konsol Google Cloud hanya tersedia untuk pelanggan GKE Enterprise. Untuk mengetahui informasi tentang apa saja yang tersedia bagi pelanggan dan non-pelanggan, lihat perbedaan UI GKE Enterprise dan Anthos Service Mesh.
Prasyarat
Sebelum memulai:
Tinjau project Cloud, pemberian lisensi GKE Enterprise, dan persyaratan umum yang dijelaskan dalam Prasyarat.
Persyaratan cluster
Sebelum melanjutkan, pastikan cluster Anda memenuhi persyaratan GKE. Selain itu, dukungan VM Anthos Service Mesh memerlukan:
- Anda menentukan Mesh CA sebagai certificate authority (CA) saat menginstal Anthos Service Mesh.
- Anda tidak mengganti Stackdriver untuk telemetri. Stackdriver dikonfigurasi secara default saat Anda menginstal Anthos Service Mesh.
- Cluster Anda terdaftar ke armada. Namun, jika cluster tidak terdaftar, proses penginstalan VM akan mendaftarkan cluster tersebut dalam project yang Anda tentukan.
Memulai
Ikuti langkah-langkah di Memulai untuk:
- Instal alat yang diperlukan
- Download
asmcli
- Memberikan izin admin cluster
- Memvalidasi project dan cluster
Jika Anda belum menginstal Anthos Service Mesh, lanjutkan ke bagian berikutnya. Jika Anda sudah menginstal Anthos Service Mesh, ikuti langkah-langkah di bagian Penginstalan yang sudah ada.
Penginstalan baru
Siapkan cluster Anthos Service Mesh untuk VM dengan menyiapkan bidang kontrol 1.10 Anthos Service Mesh.
Perintah berikut menunjukkan cara menginstal bidang kontrol dalam cluster Anthos Service Mesh dengan --option vm
yang menyiapkan bidang kontrol untuk menambahkan VM.
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca \
--option vm
--project_id
,--cluster_name
, dan--cluster_location
Tentukan project ID tempat cluster berada, nama cluster, dan zona atau region cluster.--output_dir
Sertakan opsi ini untuk menentukan direktori tempatasmcli
mendownload paketanthos-service-mesh
dan mengekstrak file penginstalan, yang berisiistioctl
, sampel, dan manifes. Jika tidak,asmcli
akan mendownload file ke direktoritmp
. Anda dapat menentukan jalur relatif atau jalur lengkap. Variabel lingkungan$PWD
tidak berfungsi di sini.-
--enable_all
Mengizinkan skrip untuk:- Memberikan izin IAM yang diperlukan.
- Mengaktifkan Google API yang diperlukan.
- Tetapkan label pada cluster yang mengidentifikasi mesh.
- Daftarkan cluster ke fleet jika belum terdaftar.
--ca mesh_ca
Gunakan Mesh CA sebagai certificate authority.asmcli
mengonfigurasi Mesh CA untuk menggunakan identitas workload fleet--option vm
Menyiapkan cluster untuk menyertakan VM dalam mesh layanan.
Jika ada beban kerja yang berjalan di cluster Anda, deploy ulang beban kerja, lalu kembali ke halaman ini untuk menambahkan VM Anda.
Penginstalan yang sudah ada
Jika Anthos Service Mesh telah diinstal di cluster Anda, lakukan langkah-langkah berikut:
Daftarkan cluster Anda ke fleet jika belum melakukannya.
Jalankan perintah berikut untuk menyiapkan dan memverifikasi bahwa penginstalan Anthos Service Mesh Anda siap untuk workload VM.
./asmcli experimental vm prepare-cluster \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION
Jika berhasil, perintah akan menghasilkan output berikut:
The cluster is ready for adding VM workloads. Please follow the Anthos Service Mesh for Compute Engine VM user guide to add Compute Engine VMs to your mesh.
Perintah tersebut melakukan hal berikut:
Aktifkan Pendaftaran Otomatis VM: Ini dilakukan dengan menetapkan variabel
PILOT_ENABLE_WORKLOAD_ENTRY_AUTOREGISTRATION
danPILOT_ENABLE_CROSS_CLUSTER_WORKLOAD_ENTRY
ke benar (true). Saat opsi ini diaktifkan, instance VM baru akan didaftarkan denganWorkloadGroup
dan CRWorkloadEntry
baru akan dibuat untuk mengarahkan traffic ke VM. Semua bidang kontrol Anthos Service Mesh 1.9+ yang diinstal denganasmcli
akan mengaktifkan pendaftaran otomatis VM secara default.Menginstal gateway Ekspansi: Gateway ini diberi nama gateway
eastwest
dan ditentukan dalam paket konfigurasi Anthos Service Mesh. Tindakan ini juga akan mengekspos bidang kontrol ke VM.Instal CRD
IdentityProvider
dan daftarkan CR GoogleIdentityProvider
agar VM dapat melakukan autentikasi ke bidang kontrol Anthos Service Mesh dan berkomunikasi secara aman dengan mesh layanan lainnya.Daftarkan cluster ke fleet dan aktifkan identitas workload, jika Anda menggunakan
--enable_all
atau--enable_registration
dalam skripasmcli
.Aktifkan fitur
Service Mesh
dalam fleet. Fitur ini akan mengelola kebijakan yang diperlukan agar VM dapat berkomunikasi dengan mesh secara aman.
Menginstal gateway masuk
Anthos Service Mesh memberi Anda opsi untuk men-deploy dan mengelola gateway sebagai bagian dari mesh layanan. Gateway menjelaskan load balancer yang beroperasi di edge mesh yang menerima koneksi HTTP/TCP masuk atau keluar. Gateway adalah proxy Envoy yang memberi Anda kontrol terperinci atas traffic yang masuk dan keluar dari mesh.
Buat namespace untuk gateway masuk jika Anda belum memilikinya. Gateway adalah beban kerja pengguna, dan sebagai praktik terbaik, gateway tidak boleh di-deploy di namespace bidang kontrol. Ganti
GATEWAY_NAMESPACE
dengan nama namespace Anda.kubectl create namespace GATEWAY_NAMESPACE
Aktifkan injeksi otomatis di gateway dengan menerapkan label revisi pada namespace gateway. Label revisi digunakan oleh webhook injektor file bantuan untuk mengaitkan proxy yang dimasukkan dengan revisi bidang kontrol tertentu. Label revisi yang digunakan bergantung pada apakah Anda men-deploy Anthos Service Mesh terkelola atau bidang kontrol dalam cluster.
Gunakan perintah berikut untuk menemukan label revisi di
istiod
:kubectl -n istio-system get pods -l app=istiod --show-labels
Outputnya terlihat mirip dengan yang berikut ini:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-1106-2-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=5788d57586 istiod-asm-1106-2-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=5788d57586
Pada output, di kolom
LABELS
, catat nilai label revisiistiod
, yang mengikuti awalanistio.io/rev=
. Dalam contoh ini, nilainya adalahasm-1106-2
.Terapkan label revisi ke namespace. Dalam perintah berikut,
REVISION
adalah nilai label revisiistiod
yang Anda catat di langkah sebelumnya.kubectl label namespace GATEWAY_NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Anda dapat mengabaikan pesan
"istio-injection not found"
di output. Artinya, namespace sebelumnya tidak memiliki labelistio-injection
, yang akan Anda harapkan dalam penginstalan baru Anthos Service Mesh atau deployment baru. Karena injeksi otomatis gagal jika namespace memilikiistio-injection
dan label revisi, semua perintahkubectl label
dalam dokumentasi Anthos Service Mesh mencakup penghapusan labelistio-injection
.Ubah ke direktori yang Anda tentukan di
--output_dir
.Anda dapat men-deploy contoh konfigurasi gateway masuk yang terletak di direktori
samples/gateways/istio-ingressgateway/
sebagaimana adanya, atau mengubahnya sesuai kebutuhan.kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-ingressgateway
Pelajari praktik terbaik untuk gateway lebih lanjut.
Tambahkan VM Anda
Di bagian ini, Anda akan menambahkan instance Compute Engine ke mesh berdasarkan template instance yang dibuat dengan gcloud
.
gcloud
hanya menghasilkan konfigurasi yang diperlukan untuk agen proxy layanan.
Untuk menyertakan lebih banyak konfigurasi dalam template instance Anda, gunakan panduan referensi gcloud
untuk informasi selengkapnya.
Untuk menambahkan VM ke mesh, lakukan langkah-langkah berikut:
Tetapkan variabel lingkungan berikut untuk digunakan di langkah berikutnya. Tetapkan variabel berikut untuk setiap workload VM:
- WORKLOAD_NAME adalah nama beban kerja yang menjadi bagian dari VM, yang harus berupa subdomain DNS-1123 sesuai yang terdiri dari karakter alfanumerik huruf kecil.
- WORKLOAD_VERSION adalah versi beban kerja yang mencakup VM. Opsional.
- WORKLOAD_SERVICE_ACCOUNT adalah layanan Akun Layanan GCP tempat VM berjalan.
- WORKLOAD_NAMESPACE adalah namespace untuk beban kerja.
- ASM_INSTANCE_TEMPLATE adalah nama template instance yang akan dibuat. Nama template instance Compute Engine tidak mengizinkan garis bawah.
Buat namespace untuk beban kerja VM jika belum ada:
kubectl create ns WORKLOAD_NAMESPACE
Beri label namespace dengan revisi bidang kontrol.
Untuk mengetahui contoh cara menemukan revisi bidang kontrol yang ditampilkan sebagai REVISION dalam contoh berikut, lihat Men-deploy dan men-deploy ulang beban kerja.
kubectl label ns WORKLOAD_NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Buat
WorkloadGroup
untuk VM yang akan didaftarkan:kubectl apply -f - << EOF apiVersion: networking.istio.io/v1alpha3 kind: WorkloadGroup metadata: name: WORKLOAD_NAME namespace: WORKLOAD_NAMESPACE spec: metadata: labels: app.kubernetes.io/name: WORKLOAD_NAME app.kubernetes.io/version: WORKLOAD_VERSION annotations: security.cloud.google.com/IdentityProvider: google template: serviceAccount: WORKLOAD_SERVICE_ACCOUNT EOF
Kolom Deskripsi name
Nama beban kerja yang menjadi bagian dari VM. namespace
Namespace tempat beban kerja menjadi bagiannya. app.kubernetes.io/name
Label yang direkomendasikan untuk aplikasi Kubernetes. Anda dapat menggunakan label Anda sendiri untuk workload VM Anda. app.kubernetes.io/version
Label yang direkomendasikan untuk aplikasi Kubernetes. Anda dapat menggunakan label Anda sendiri untuk workload VM Anda. serviceAccount
Identitas akun layanan yang digunakan oleh VM dan project, yang akan digunakan sebagai bagian dari identitas beban kerja dalam format SPIFFE. Untuk mengetahui informasi selengkapnya, lihat Akun layanan. security.cloud.google.com/IdentityProvider
Penyedia identitas yang akan digunakan VM, yang seharusnya sudah terdaftar di cluster Anda. Untuk VM Compute Engine, parameter ini harus ditetapkan ke google
.IdentityProvider
memberi tahu bidang kontrol cara mengautentikasi kredensial VM dan tempat mengekstrak akun layanan VM.Gunakan perintah
gcloud beta compute instance-templates create
dengan flag--mesh
guna membuat template instance untuk instance Compute Engine Anthos Service Mesh Anda.gcloud
memverifikasi prasyarat cluster, menambahkan label VM untuk Anthos Service Mesh, membuat konfigurasi metadata kustom untuk agen proxy layanan, dan membuat template instance baru.Jika template instance Anda menyertakan skrip startup yang memerlukan konektivitas jaringan, skrip harus tahan terhadap masalah konektivitas jaringan sementara. Lihat aplikasi demo untuk mengetahui contoh cara menambahkan ketahanan terhadap gangguan jaringan sementara.
Untuk mengetahui informasi selengkapnya tentang cara membuat template instance, baca Membuat template instance.
gcloud beta compute instance-templates create \ ASM_INSTANCE_TEMPLATE \ --mesh gke-cluster=CLUSTER_LOCATION/CLUSTER_NAME,workload=WORKLOAD_NAMESPACE/WORKLOAD_NAME \ --project PROJECT_ID
Setel variabel lingkungan berikut untuk setiap MIG yang Anda buat:
- INSTANCE_GROUP_NAME adalah nama grup instance Compute Engine yang akan dibuat.
- ASM_INSTANCE_TEMPLATE adalah nama template instance yang akan dibuat. Nama template instance Compute Engine tidak mengizinkan garis bawah.
- INSTANCE_GROUP_ZONE adalah zona grup instance Compute Engine yang akan dibuat.
- PROJECT_ID adalah project ID tempat cluster dibuat.
- SIZE adalah ukuran grup instance yang akan dibuat. Nama ini dapat diubah setelah grup instance dibuat.
- WORKLOAD_NAME adalah nama beban kerja yang menjadi bagian dari VM.
- WORKLOAD_NAMESPACE adalah namespace untuk beban kerja.
Buat Grup Instance Terkelola untuk workload VM menggunakan variabel yang dibuat pada langkah sebelumnya:
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --template ASM_INSTANCE_TEMPLATE \ --zone=INSTANCE_GROUP_ZONE \ --project=PROJECT_ID \ --size=SIZE
Untuk menyebarkan skala jumlah workload di instance Compute Engine, mulai dari ukuran MIG zona atau regional dari nol, lihat Penskalaan otomatis grup instance. Untuk mengetahui informasi lebih lanjut tentang cara membuat grup, lihat gcloud compute instance-groups managed create.
Saat instance Anda dimulai, instance akan otomatis melakukan autentikasi dengan bidang kontrol Anthos Service Mesh di cluster Anda dan bidang kontrol akan mendaftarkan setiap VM sebagai
WorkloadEntry
.Ketika instance VM di MIG selesai dimulai, Anda dapat melihat VM terdaftar di namespace beban kerja menggunakan perintah berikut:
kubectl get workloadentry -n WORKLOAD_NAMESPACE
Tambahkan Layanan Kubernetes untuk mengekspos beban kerja VM yang ditambahkan di atas. Pastikan layanan memilih label yang sesuai pada
WorkloadGroup
VM yang terdaftar di atas untuk pemilihan rute traffic yang benar.Contoh berikut membuat layanan Kubernetes bernama WORKLOAD_NAME dalam namespace WORKLOAD_NAMESPACE yang mengekspos workload VM dengan label
app.kubernetes.io/name: WORKLOAD_NAME
pada port HTTP 80.kubectl apply -f - << EOF apiVersion: v1 kind: Service metadata: name: WORKLOAD_NAME namespace: WORKLOAD_NAMESPACE labels: asm_resource_type: VM spec: ports: - port: 80 name: http selector: app.kubernetes.io/name: WORKLOAD_NAME EOF
Untuk detail selengkapnya tentang cara membuat layanan Kubernetes, lihat https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service.
Untuk menggunakan aplikasi contoh pada VM Anda, lihat Men-deploy aplikasi sampel.
Men-deploy ulang beban kerja setelah upgrade bidang kontrol dalam cluster
Jika Anda telah mengupgrade Anthos Service Mesh di bagian sebelumnya, dan memiliki workload yang berjalan di cluster, alihkan ke bidang kontrol baru.
Untuk workload VM, buat template instance baru dan lakukan update berkelanjutan pada VM di MIG Anda:
Gunakan perintah berikut untuk menemukan label revisi di
istiod
:kubectl -n istio-system get pods -l app=istiod --show-labels
Output dari perintah serupa dengan berikut ini. Perhatikan bahwa output untuk migrasi sedikit berbeda dengan upgrade. Contoh output berikut berasal dari migrasi.
NAME READY STATUS RESTARTS AGE LABELS istiod-7744bc8dd7-qhlss 1/1 Running 0 49m app=istiod,istio.io/rev=default,istio=pilot,pod-template-hash=7744bc8dd7 istiod-asm-1106-2-85d86774f7-flrt2 1/1 Running 0 26m app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=85d86774f7 istiod-asm-1106-2-85d86774f7-tcwtn 1/1 Running 0 26m app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=85d86774f7
Pada output, di kolom
LABELS
, catat nilai dalam label revisiistiod
untuk versi baru, yang mengikuti awalanistio.io/rev=
. Dalam contoh ini, nilainya adalahasm-1106-2
.Perhatikan juga nilai dalam label revisi untuk versi
istiod
lama. Anda memerlukan tindakan ini untuk menghapus versi lamaistiod
saat selesai memindahkan beban kerja ke versi baru. Dalam contoh output, nilai dalam label revisi untukistiod
versi lama adalahdefault
.
Tambahkan label revisi ke namespace dan hapus label
istio-injection
(jika ada). Dalam perintah berikut, ubahREVISION
ke nilai yang cocok dengan revisi baruistiod
.kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
Jika melihat
"istio-injection not found"
pada output, Anda dapat mengabaikannya. Artinya, namespace sebelumnya tidak memiliki labelistio-injection
. Karena injeksi otomatis gagal jika namespace memilikiistio-injection
dan label revisi, semua perintahkubectl label
dalam dokumentasi Anthos Service Mesh mencakup penghapusan labelistio-injection
.Buat template instance baru menggunakan
gcloud
. Pastikan untuk menyertakan konfigurasi yang sama jika Anda memiliki template instance untuk beban kerja yang sama.gcloud beta compute instance-templates create NEW_ASM_INSTANCE_TEMPLATE \ --mesh gke-cluster=CLUSTER_LOCATION/CLUSTER_NAME,workload=WORKLOAD_NAMESPACE/WORKLOAD_NAME \ --project PROJECT_ID
Lakukan update berkelanjutan ke MIG yang ada untuk workload.
Untuk informasi selengkapnya, lihat Memulai update berkelanjutan dasar.
gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \ --version=template=NEW_ASM_INSTANCE_TEMPLATE \ --zone=INSTANCE_GROUP_ZONE
Uji beban kerja VM untuk memastikannya berfungsi seperti yang diharapkan.
Mengupgrade aplikasi VM
Jika Anda memiliki update pada aplikasi, termasuk perubahan pada
WorkloadGroup
dan/atau perubahan pada konfigurasi template instance, template
instance baru diperlukan untuk mengupdate MIG workload VM Anda.
Saat perubahan WorkloadGroup
diterapkan dan/atau template instance sumber baru dibuat, Anda akan membuat template instance baru untuk Anthos Service Mesh dan melakukan update berkelanjutan pada VM di MIG Anda.
Buat template instance baru menggunakan
gcloud
.gcloud beta compute instance-templates create NEW_ASM_INSTANCE_TEMPLATE \ --mesh gke-cluster=CLUSTER_LOCATION/CLUSTER_NAME,workload=WORKLOAD_NAMESPACE/WORKLOAD_NAME \ --project PROJECT_ID
Lakukan update berkelanjutan ke MIG yang ada untuk workload. Untuk informasi selengkapnya tentang cara menggunakan update berkelanjutan MIG, lihat Memulai update berkelanjutan dasar.
gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \ --version=template=NEW_ASM_INSTANCE_TEMPLATE \ --zone=INSTANCE_GROUP_ZONE
Uji beban kerja VM untuk memastikannya berfungsi seperti yang diharapkan.
Menerapkan aplikasi sampel
Untuk menunjukkan bahwa konfigurasi mesh baru berfungsi dengan benar, Anda dapat menginstal aplikasi contoh Bookinfo. Contoh ini menjalankan database MySQL di VM, dan layanan rating akan membaca nilai rating dari database.
Menginstal Bookinfo di cluster
Gunakan langkah-langkah berikut untuk men-deploy layanan aplikasi BookInfo dengan
proxy file bantuan yang dimasukkan bersama setiap layanan. Aplikasi BookInfo akan di-deploy di namespace default
.
Pada command line di komputer tempat Anda menginstal Anthos Service Mesh, buka root direktori penginstalan Anthos Service Mesh yang Anda buat pada langkah Mendownload skrip.
Untuk mengaktifkan injeksi sidecar otomatis, pilih petunjuk di bawah berdasarkan jenis bidang kontrol Anthos Service Mesh Anda.
Gunakan perintah berikut untuk menemukan label pada
istiod
, yang berisi nilai label revisi untuk digunakan di langkah selanjutnya.kubectl -n istio-system get pods -l app=istiod --show-labels
Outputnya terlihat mirip dengan yang berikut ini:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-1106-2-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=5788d57586 istiod-asm-1106-2-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=5788d57586
Pada output, di kolom
LABELS
, catat nilai label revisiistiod
, yang mengikuti awalanistio.io/rev=
. Dalam contoh ini, nilainya adalahasm-1106-2
.Terapkan label revisi ke namespace
default
.Dalam perintah berikut,
REVISION
adalah nilai label revisiistiod
yang Anda catat di langkah sebelumnya.kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
Anda dapat mengabaikan pesan
"istio-injection not found"
di output. Artinya, namespace sebelumnya tidak memiliki labelistio-injection
, yang akan Anda harapkan dalam penginstalan baru Anthos Service Mesh atau deployment baru. Karena injeksi otomatis gagal jika namespace memilikiistio-injection
dan label revisi, semua perintahkubectl label
dalam dokumentasi Anthos Service Mesh mencakup penghapusan labelistio-injection
.Deploy aplikasi Anda ke namespace default menggunakan
kubectl
:kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Pastikan bahwa aplikasi telah di-deploy dengan benar dengan menjalankan perintah berikut:
kubectl get services
Output yang diharapkan:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE details 10.0.0.31 <none> 9080/TCP 6m kubernetes 10.0.0.1 <none> 443/TCP 7d productpage 10.0.0.120 <none> 9080/TCP 6m ratings 10.0.0.15 <none> 9080/TCP 6m reviews 10.0.0.170 <none> 9080/TCP 6m
dan
kubectl get pod
Output yang diharapkan:
NAME READY STATUS RESTARTS AGE details-v1-1520924117-48z17 2/2 Running 0 6m productpage-v1-560495357-jk1lz 2/2 Running 0 6m ratings-v1-734492171-rnr5l 2/2 Running 0 6m reviews-v1-874083890-f0qf0 2/2 Running 0 6m reviews-v2-1343845940-b34q5 2/2 Running 0 6m reviews-v3-1813607990-8ch52 2/2 Running 0 6m
Terakhir, tentukan perutean gateway masuk untuk aplikasi:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Output yang diharapkan:
gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
Pastikan halaman produk dapat diakses. Dalam perintah berikut,
GATEWAY_NAMESPACE
adalah namespace Gateway Istio Anda.export INGRESS_HOST=$(kubectl -n GATEWAY_NAMESPACE get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') export INGRESS_PORT=$(kubectl -n GATEWAY_NAMESPACE get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') export GATEWAY_URL="${INGRESS_HOST}:${INGRESS_PORT}" curl -s "http://${GATEWAY_URL}/productpage" | grep -o "<title>.*</title>"
Output yang diharapkan:
<title>Simple Bookstore App</title>
Membuat instance Compute Engine dan menginstal MySQL
Pada langkah ini, Anda akan membuat template instance Compute Engine untuk instance MySQL yang berjalan di VM. Untuk langkah-langkah yang lebih mendetail, lihat Bookinfo dengan Mesin Virtual.
Buat skrip startup untuk menginstal MySQL dan menambahkan database rating saat startup. Perhatikan bahwa jika Anda menggunakan CentOS, perlu waktu hingga 10 menit hingga server mariadb sudah siap.
Debian
cat << "EOF" > init-mysql #!/bin/bash # Wait until Envoy is ready before installing mysql while true; do rt=$(curl -s 127.0.0.1:15000/ready) if [[ $? -eq 0 ]] && [[ "${rt}" -eq "LIVE" ]]; then echo "envoy is ready" break fi sleep 1 done # Wait until DNS is ready before installing mysql while true; do curl -I productpage.default.svc:9080 if [[ $? -eq 0 ]]; then echo "dns is ready" break fi sleep 1 done sudo apt-get update && sudo apt-get install -y mariadb-server sudo sed -i '/bind-address/c\bind-address = 0.0.0.0' /etc/mysql/mariadb.conf.d/50-server.cnf cat <<EOD | sudo mysql # Grant access to root GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; # Grant root access to other IPs CREATE USER 'root'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; quit EOD sudo systemctl restart mysql curl -LO https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/src/mysql/mysqldb-init.sql mysql -u root -ppassword < mysqldb-init.sql EOF
CentOS
cat << "EOF" > init-mysql #!/bin/bash # Wait until Envoy is ready before installing mysql while true; do rt=$(curl -s 127.0.0.1:15000/ready) if [[ $? -eq 0 ]] && [[ "${rt}" -eq "LIVE" ]]; then echo "envoy is ready" break fi sleep 1 done # Wait until DNS is ready before installing mysql while true; do curl -I productpage.default.svc:9080 if [[ $? -eq 0 ]]; then echo "dns is ready" break fi sleep 1 done sudo yum update -y && sudo yum install -y mariadb-server # Wait until mysql is ready while true; do rt=$(which mysql) if [[ ! -z "${rt}" ]]; then echo "mysql is ready" break fi sleep 1 done sudo sed -i '/bind-address/c\bind-address = 0.0.0.0' /etc/my.cnf.d/mariadb-server.cnf sudo systemctl restart mariadb cat > grantaccess.sql << EOD GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; CREATE USER 'root'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; EOD until sudo mysql < grantaccess.sql; do sleep 1 done sudo systemctl restart mariadb curl -LO https://raw.githubusercontent.com/istio/istio/release-1.10/samples/bookinfo/src/mysql/mysqldb-init.sql mysql -u root -ppassword < mysqldb-init.sql EOF
Membuat
WorkloadGroup
untuk beban kerja MySQLkubectl apply -f - << EOF apiVersion: networking.istio.io/v1alpha3 kind: WorkloadGroup metadata: name: mysql namespace: default spec: metadata: labels: app.kubernetes.io/name: mysql annotations: security.cloud.google.com/IdentityProvider: google template: serviceAccount: WORKLOAD_SERVICE_ACCOUNT EOF
Gunakan
gcloud
untuk membuat template instance baru guna menyiapkan instance untuk mesh dan sertakan skrip startup yang dibuat di atas.Debian
gcloud beta compute instance-templates create asm-mysql-instance-template \ --mesh gke-cluster=CLUSTER_LOCATION/CLUSTER_NAME,workload=default/mysql \ --project PROJECT_ID \ --metadata-from-file=startup-script=init-mysql \ --image-project=debian-cloud --image-family=debian-10 --boot-disk-size=10GB
CentOS
gcloud beta compute instance-templates create asm-mysql-instance-template \ --mesh gke-cluster=CLUSTER_LOCATION/CLUSTER_NAME,workload=default/mysql \ --project PROJECT_ID \ --metadata-from-file=startup-script=init-mysql \ --image-project=centos-cloud --image-family=centos-8 --boot-disk-size=20GB
Buat MIG Compute Engine menggunakan template instance yang baru dibuat.
gcloud compute instance-groups managed create mysql-instance \ --template asm-mysql-instance-template \ --zone=us-central1-c \ --project=PROJECT_ID \ --size=1
Membuat service
Buat layanan Kubernetes untuk layanan MySQL menggunakan perintah berikut:
kubectl apply -f - << EOF
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: default
labels:
asm_resource_type: VM
spec:
ports:
- name: mysql
port: 3306
protocol: TCP
targetPort: 3306
selector:
app.kubernetes.io/name: mysql
EOF
Menggunakan dasbor Anthos UI
Untuk melihat layanan berbasis VM baru yang telah Anda buat, klik
Anthos > Service Mesh
dari menu navigasi sebelah kiri. Tabel layanan akan ditampilkan
di mesh Anda. Layanan yang Anda tambahkan akan muncul dalam tabel, dengan nilai Type
sebesar VM
dan beberapa metrik tingkat tinggi. Untuk melihat telemetri lainnya dari layanan berbasis VM, klik nama layanan, yang akan menampilkan dasbor tingkat layanan.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan dasbor UI Anthos, lihat Menjelajahi Anthos Service Mesh di Cloud Console.
Mengelola traffic ke workload VM
Anda dapat mengubah aturan jaringan untuk mengontrol aliran traffic masuk dan keluar dari VM.
Mengontrol traffic ke layanan rating baru (Pod ke VM)
Buat layanan rating lain di Bookinfo yang akan menggunakan instance MySQL yang dibuat di atas sebagai sumber data dan menentukan aturan perutean yang memaksa layanan ulasan menggunakan layanan rating baru.
Buat layanan rating baru untuk menggunakan instance MySQL.
kubectl apply -f - << EOF apiVersion: apps/v1 kind: Deployment metadata: name: ratings-v2-mysql-vm labels: app: ratings version: v2-mysql-vm spec: replicas: 1 selector: matchLabels: app: ratings version: v2-mysql-vm template: metadata: labels: app: ratings version: v2-mysql-vm spec: serviceAccountName: bookinfo-ratings containers: - name: ratings image: docker.io/istio/examples-bookinfo-ratings-v2:1.16.2 imagePullPolicy: IfNotPresent env: - name: DB_TYPE value: "mysql" - name: MYSQL_DB_HOST value: mysql.default.svc.cluster.local - name: MYSQL_DB_PORT value: "3306" - name: MYSQL_DB_USER value: root - name: MYSQL_DB_PASSWORD value: password ports: - containerPort: 9080 EOF
Buat aturan pemilihan rute.
kubectl apply -f - << EOF apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v3 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - route: - destination: host: ratings subset: v2-mysql-vm EOF
Terapkan aturan tujuan untuk layanan yang dibuat.
kubectl apply -f - << EOF apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: reviews spec: host: reviews subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 - name: v3 labels: version: v3 --- apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: ratings spec: host: ratings subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 - name: v2-mysql labels: version: v2-mysql - name: v2-mysql-vm labels: version: v2-mysql-vm EOF
Memvalidasi deployment aplikasi
Untuk melihat apakah aplikasi BookInfo berfungsi, Anda perlu mengirim traffic ke gateway masuk.
Jika Anda menginstal Anthos Service Mesh di GKE, dapatkan alamat IP eksternal gateway masuk yang Anda buat di langkah sebelumnya:
kubectl get svc istio-ingressgateway -n GATEWAY_NAMESPACE
Output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
Dalam contoh ini, alamat IP layanan masuk adalah
35.239.7.64
.
Mencoba aplikasi
Pastikan aplikasi BookInfo berjalan dengan
curl
:curl -I http://EXTERNAL_IP/productpage
Jika respons menunjukkan
200
, berarti aplikasi berfungsi dengan baik dengan Anthos Service Mesh.Untuk melihat halaman web BookInfo, masukkan alamat berikut di browser Anda:
http://EXTERNAL_IP/productpage
Pastikan di halaman beranda aplikasi Bookinfo bahwa aplikasi menampilkan lima bintang dari
Reviewer1
dan empat bintang dariReviewer2
.
Menerapkan keamanan pada beban kerja VM
Menerapkan keamanan pada beban kerja VM sama dengan menerapkan keamanan pada beban kerja Kubernetes. Untuk mengetahui informasi selengkapnya, lihat Keamanan Istio.
Setelah menyelesaikan langkah-langkah sebelumnya, VM Compute Engine Anda akan memiliki sertifikat beban kerja yang diterbitkan Google. Dalam sertifikat, nilai
SubjectAlternativeName
menunjukkan Anthos workload identity VM dalam bentuk
spiffe://<workload_identity_pool>/ns/WORKLOAD_NAMESPACE/sa/WORKLOAD_SERVICE_ACCOUNT
.
Untuk informasi selengkapnya, lihat kumpulan identitas workload.
Mengaktifkan mode ketat mTLS untuk mesh
Terapkan YAML berikut untuk menerapkan seluruh mesh mTLS yang ketat.
kubectl apply -f - << EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT
EOF
Otorisasi untuk traffic antarlayanan
Gunakan AuthorizationPolicy untuk mengontrol akses antara aplikasi pada VM Compute Engine Anda dan workload mesh lainnya (misalnya, di cluster GKE).
Contoh: Menolak beban kerja Kubernetes untuk mengakses VM Compute Engine
Kebijakan otorisasi berikut menolak beban kerja Kubernetes ratings
untuk mengakses beban kerja VM Compute Engine yang melayani server MySQL ratings
.
kubectl apply -f - << EOF
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: mysql-deny
namespace: default
spec:
selector:
matchLabels:
app.kubernetes.io/name: mysql
action: DENY
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/bookinfo-ratings"]
EOF
Setelah menerapkan contoh AuthorizationPolicy
, Anda akan melihat pesan error Ratings service
is currently unavailable
di bagian ulasan buku
pada halaman produk.
Menginstal Agen Cloud Monitoring
Anda dapat menginstal Agen Cloud Monitoring untuk mengumpulkan dan memantau metrik sistem dan aplikasi dari instance VM. Hal ini memungkinkan Anda memantau metrik utama, misalnya penggunaan CPU dan memori pada agen.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi Agen Cloud Monitoring.
Pemecahan masalah
Untuk tips pemecahan masalah, lihat Memecahkan masalah dukungan VM.