Ringkasan
Anthos Service Mesh terkelola adalah bidang kontrol yang dikelola Google dan bidang data opsional yang dapat dikonfigurasi dengan mudah. Google menangani keandalan, upgrade, penskalaan, dan keamanannya untuk Anda dengan cara yang kompatibel dengan versi sebelumnya. Panduan ini menjelaskan cara menyiapkan atau memigrasikan aplikasi ke Anthos Service Mesh terkelola dalam konfigurasi tunggal atau multi-cluster.
Untuk mempelajari fitur dan batasan yang didukung dari Anthos Service Mesh terkelola, lihat Fitur yang didukung Anthos Service Mesh.
Prasyarat
Sebagai permulaan, panduan ini mengasumsikan bahwa Anda telah:
- Project Cloud.
- Akun Penagihan Cloud.
- Skrip penginstalan,
kpt
, dan alat lain yang ditentukan dalam Menginstal alat yang diperlukan.
Persyaratan
Satu atau beberapa cluster dengan versi GKE yang didukung, di salah satu region yang didukung.
Cluster Anda harus mengaktifkan Workload Identity. Lihat Mengaktifkan Workload Identity untuk perintah
gcloud
.Bidang data yang dikelola Google mengharuskan Anda mengaktifkan plugin Antarmuka Jaringan Container (CNI) Istio saat men-deploy bidang kontrol yang dikelola Google, seperti yang akan dijelaskan nanti di halaman ini.
Migrasi
- Migrasi/upgrade langsung dari bidang kontrol dalam cluster ke bidang kontrol yang dikelola Google hanya didukung dari versi 1.9+ (diinstal dengan Mesh CA).
- Penginstalan dengan Istio CA harus terlebih dahulu dimigrasikan ke Mesh CA 1,9+.
- Migrasi/upgrade tidak langsung didukung, yang berarti Anda dapat mengikuti jalur upgrade Anthos Service Mesh standar melalui setiap versi hingga Anda mencapai Anthos Service Mesh 1.11 dengan bidang kontrol dalam cluster, lalu Anda dapat bermigrasi ke bidang kontrol yang dikelola Google.
Batasan
Sebaiknya tinjau daftar fitur dan batasan yang didukung Anthos Service Mesh terkelola. Secara khusus, perhatikan hal-hal berikut:
- Anthos Service Mesh terkelola hanya dapat menggunakan beberapa cluster GKE dalam satu project Google Cloud.
IstioOperator
API tidak didukung.Batasan bidang data terkelola:
Rilis Pratinjau bidang data terkelola ini hanya tersedia untuk deployment baru bidang kontrol terkelola. Jika sebelumnya Anda men-deploy bidang kontrol terkelola, dan ingin men-deploy bidang data terkelola, Anda harus menjalankan ulang skrip penginstalan seperti yang dijelaskan dalam Menerapkan bidang kontrol yang dikelola Google.
Bidang tanggal yang dikelola tersedia di saluran rilis Reguler dan Cepat.
Aktifkan Workload Identity
Jika Workload Identity tidak diaktifkan, lihat Mengaktifkan Workload Identity di cluster untuk mengetahui izin IAM yang diperlukan dan gcloud CLI untuk mengaktifkannya.
Mendownload skrip penginstalan
Download versi terbaru skrip yang menginstal Anthos Service Mesh 1.11.8 ke direktori kerja saat ini:
curl https://storage.googleapis.com/csm-artifacts/asm/install_asm_1.11 > install_asm
Buat agar skrip dapat dieksekusi:
chmod +x install_asm
Konfigurasi setiap cluster
Gunakan langkah-langkah berikut untuk mengonfigurasi Anthos Service Mesh terkelola untuk setiap cluster di mesh Anda.
Mendapatkan kredensial cluster
Ambil kredensial yang sesuai. Perintah berikut juga akan mengarahkan
konteks kubectl
ke cluster target.
gcloud container clusters get-credentials CLUSTER_NAME \
--zone LOCATION \
--project PROJECT_ID
Menerapkan bidang kontrol yang dikelola Google
Jalankan skrip penginstalan install_asm
untuk setiap cluster yang akan menggunakan
Anthos Service Mesh terkelola. Sebaiknya sertakan kedua opsi berikut saat
menjalankan install_asm
:
--option cni-managed
Opsi ini mengaktifkan plugin Istio Container Network Interface (CNI). Plugin CNI mengonfigurasi pengalihan traffic jaringan ke dan dari proxy file bantuan menggunakan antarmuka CNCF CNI, bukan menggunakan penampunginit
dengan hak istimewa tinggi.--enable-registration
Flag ini mendaftarkan cluster ke fleet.
Opsi ini diperlukan jika Anda juga ingin men-deploy bidang data yang dikelola Google. Untuk mengetahui daftar lengkap opsi, lihat halaman referensi asmcli.
./install_asm --mode install --managed \
-p PROJECT_ID \
-l LOCATION \
-n CLUSTER_NAME \
--verbose \
--output_dir CLUSTER_NAME \
--enable-all \
--enable-registration \
--option cni-managed
Skrip ini akan mendownload semua file ke --output_dir
yang ditentukan untuk mengonfigurasi bidang kontrol terkelola, menginstal Istio Gateway, beserta alat istioctl
dan aplikasi contoh. Langkah-langkah dalam panduan ini mengasumsikan bahwa
Anda menjalankan istioctl
dari root direktori penginstalan, dengan istioctl
ada dalam subdirektori /bin
-nya.
Jika Anda menjalankan kembali install_asm
pada cluster yang sama, konfigurasi bidang kontrol yang ada akan ditimpa. Pastikan untuk menentukan opsi dan
tanda yang sama jika menginginkan konfigurasi yang sama.
Perhatikan bahwa gateway masuk tidak secara otomatis di-deploy dengan bidang kontrol. Dengan memisahkan deployment gateway masuk dan bidang kontrol, Anda dapat mengelola gateway di lingkungan produksi dengan lebih mudah. Jika cluster memerlukan gateway ingress, lihat Menginstal gateway Istio.
Menerapkan bidang data yang dikelola Google
Jika Anda ingin Google mengelola upgrade proxy, aktifkan bidang data yang dikelola Google. Jika diaktifkan, proxy file bantuan dan gateway yang dimasukkan akan otomatis diupgrade bersama dengan bidang kontrol terkelola.
Dalam pratinjau fitur, bidang data terkelola mengupgrade proxy dengan mengeluarkan Pod yang menjalankan proxy versi lama. Penghapusan dilakukan secara teratur untuk mematuhi anggaran gangguan Pod dan mengontrol tingkat perubahan.
Rilis pratinjau bidang data terkelola ini tidak mengelola hal berikut:
- Pod yang tidak dimasukkan.
- Pod yang dimasukkan secara manual menggunakan
istioctl kube-inject
. - Pekerjaan
- Set Stateful
- DaemonSet
Jika tidak ingin menggunakan bidang data terkelola atau tidak ingin mengaktifkannya untuk semua namespace, Anda harus memicu mulai ulang proxy untuk mendapatkan manfaat dari image proxy terbaru. Bidang kontrol akan terus berfungsi dengan proxy yang ada.
Bidang data terkelola tersedia di saluran rilis Cepat dan Reguler.
Untuk mengaktifkan bidang data yang dikelola Google:
Aktifkan pengelolaan bidang data:
kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Atau, Anda dapat mengaktifkan bidang data yang dikelola Google untuk Pod tertentu dengan menganotasinya menggunakan anotasi yang sama. Saat Anda menganotasi Pod tertentu, Pod tersebut akan menggunakan proxy file bantuan yang dikelola Google dan beban kerja lainnya menggunakan proxy file bantuan yang tidak dikelola.
Ulangi langkah sebelumnya untuk setiap namespace tempat Anda menginginkan bidang data terkelola.
Aktifkan Anthos Service Mesh di fleet:
gcloud alpha container hub mesh enable --project=PROJECT_ID
Diperlukan waktu hingga sepuluh menit bagi pengontrol bidang data untuk siap mengelola proxy di cluster. Jalankan perintah berikut untuk memeriksa statusnya:
if kubectl get dataplanecontrols -o custom-columns=REV:.spec.revision,STATUS:.status.state | grep rapid | grep -v none > /dev/null; then echo "Managed Data Plane is ready."; else echo "Managed Data Plane is NOT ready."; fi
Jika pengontrol bidang data sudah siap, perintah akan menghasilkan output:
Managed Data Plane is ready.
Jika status untuk pengontrol bidang data belum siap setelah menunggu lebih dari sepuluh menit, lihat Status bidang data terkelola untuk mendapatkan tips pemecahan masalah.
Jika Anda ingin menonaktifkan bidang data yang dikelola Google dan kembali ke mengelola proxy file bantuan sendiri, ubah anotasinya:
kubectl annotate --overwrite namespace NAMESPACE \
mesh.cloud.google.com/proxy='{"managed":"false"}'
Menginstal Gateway Istio (opsional)
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.
Sebagai praktik terbaik, sebaiknya Anda membuat namespace terpisah untuk gateway. Jangan men-deploy gateway ke namespace istio-system
.
Anda dapat menginstal satu atau beberapa Gateway Istio di cluster untuk menangani traffic masuk standar, dengan mengikuti langkah-langkah berikut:
Pilih salah satu dari dua opsi berikut untuk menyiapkan namespace tempat Anda akan men-deploy gateway di langkah-langkah berikutnya.
- Aktifkan namespace untuk injeksi:
kubectl label namespace GATEWAY_NAMESPACE istio-injection- istio.io/rev=asm-managed-rapid --overwrite
ATAU
- Mengaktifkan injeksi hanya untuk pod gateway, tetapi tidak semua pod di
namespace. Perintah ini akan menghapus semua label injeksi, lalu Anda akan mengaktifkan
injeksi pada pod itu sendiri:
kubectl label namespace GATEWAY_NAMESPACE istio-injection- istio.io/rev-
- Aktifkan namespace untuk injeksi:
Buat Deployment dan Layanan untuk gateway, dengan menggunakan contoh minimal berikut:
kubectl apply -f - << EOF apiVersion: v1 kind: Service metadata: name: istio-ingressgateway namespace: GATEWAY_NAMESPACE spec: type: LoadBalancer selector: istio: ingressgateway ports: - port: 80 name: http - port: 443 name: https --- apiVersion: apps/v1 kind: Deployment metadata: name: istio-ingressgateway namespace: GATEWAY_NAMESPACE spec: selector: matchLabels: istio: ingressgateway template: metadata: annotations: # This is required to tell Anthos Service Mesh to inject the gateway with the # required configuration. inject.istio.io/templates: gateway labels: istio: ingressgateway istio.io/rev: asm-managed-rapid # This is required only if the namespace is not labeled. spec: containers: - name: istio-proxy image: auto # The image will automatically update each time the pod starts. --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: istio-ingressgateway-sds namespace: GATEWAY_NAMESPACE rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: istio-ingressgateway-sds namespace: GATEWAY_NAMESPACE roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: istio-ingressgateway-sds subjects: - kind: ServiceAccount name: default EOF
Setelah Anda membuat deployment, pastikan layanan baru berfungsi dengan benar:
kubectl get pod,service -n GATEWAY_NAMESPACE
Verifikasi output yang mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE pod/istio-ingressgateway-856b7c77-bdb77 1/1 Running 0 3s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/istio-ingressgateway LoadBalancer 10.24.5.129 34.82.157.6 80:31904/TCP 3s
Anda dapat memilih untuk mengizinkan pengontrol bidang data terkelola mengelola proxy untuk gateway Anda seperti halnya untuk layanan. Jika Anda men-deploy bidang data terkelola, dan ingin mengatur proxy gateway, beri label dan anotasikan namespace gateway seperti yang dijelaskan dalam Menerapkan bidang data yang dikelola Google.
Jika memilih untuk mengelola gateway sendiri, Anda harus memulai ulang Pod di GATEWAY_NAMESPACE
saat versi baru Anthos Service Mesh dirilis, sehingga pod dapat mengambil konfigurasi bidang kontrol baru. Sebelum memulai ulang Pod, Anda harus mengonfirmasi bahwa bidang kontrol baru telah diluncurkan ke cluster Anda dengan memeriksa versi bidang kontrol menggunakan kueri kustom Metrics Explorer yang disediakan dalam Memverifikasi metrik bidang kontrol.
Mengonfigurasi penemuan endpoint (hanya untuk penginstalan multi-cluster)
Bidang kontrol yang dikelola Anthos Service Mesh mendukung konfigurasi multi-utama, jaringan tunggal, project tunggal, dengan perbedaan bahwa bidang kontrol tidak diinstal di cluster.
Sebelum melanjutkan, Anda harus sudah menjalankan skrip penginstalan di setiap cluster seperti yang dijelaskan di langkah sebelumnya. Anda tidak perlu menunjukkan bahwa cluster adalah cluster utama, ini adalah perilaku default.
Untuk setiap cluster, aktifkan penemuan endpoint dengan menjalankan perintah berikut satu kali untuk setiap cluster lain i=1..N
di mesh:
Untuk setiap cluster, pastikan konteks konfigurasi kubectl mengarah ke cluster saat ini:
export CTX=gke_PROJECT_ID_LOCATION_CLUSTER_NAME
Aktifkan penemuan endpoint dengan menjalankan perintah berikut satu kali untuk setiap cluster i=1..N lainnya di mesh:
export CTX_i=gke_PROJECT_ID_LOCATION_i_CLUSTER_NAME_i
./bin/istioctl x create-remote-secret --context=${CTX_i} --name=CLUSTER_NAME_i | \ kubectl apply -f - --context=${CTX}
Pastikan bahwa rahasia telah dibuat dengan menjalankan perintah:
kubectl get secret istio-remote-secret-CLUSTER_NAME_i -n istio-system
Verifikasi output yang diharapkan:
NAME TYPE DATA AGE istio-remote-secret-CLUSTER_NAME_i Opaque 1 44s
Jika cluster saat ini ditambahkan ke mesh multi-cluster yang ada, biarkan semua cluster lain menemukan endpoint-nya dengan membuat rahasia yang sesuai dengan cluster saat ini di semua cluster lain:
./bin/istioctl x create-remote-secret --context=${CTX} --name=CLUSTER_NAME | \ kubectl apply -f - --context=${CTX_i}
Selain itu, Anda juga dapat memverifikasi rahasia untuk cluster lainnya:
kubectl get secret istio-remote-secret-CLUSTER_NAME -n istio-system --context ${CTX_i}
Verifikasi output yang diharapkan:
NAME TYPE DATA AGE istio-remote-secret-CLUSTER_NAME Opaque 1 44s
Untuk mengetahui detail selengkapnya dan contoh dengan dua cluster, lihat mengaktifkan penemuan endpoint.
Men-deploy aplikasi
Sebelum men-deploy aplikasi, hapus label istio-injection
sebelumnya dari namespace-nya, lalu tetapkan label istio.io/rev:asm-managed-rapid
:
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-managed-rapid --overwrite
Pada tahap ini, Anda telah berhasil mengonfigurasi bidang kontrol terkelola Anthos Service Mesh. Kini Anda siap men-deploy aplikasi atau men-deploy aplikasi contoh Bookinfo.
Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasikan Kubernetes dan konfigurasi bidang kontrol di semua cluster, kecuali Anda berencana membatasi konfigurasi tertentu tersebut ke subset cluster. Konfigurasi yang diterapkan ke cluster tertentu adalah sumber kebenaran untuk cluster tersebut. Selain itu, jika cluster juga menjalankan Anthos Service Mesh 1.7, 1.8, atau yang lebih tinggi dengan Mesh CA di namespace lain, pastikan bahwa aplikasi dapat berkomunikasi dengan aplikasi lain yang dikontrol oleh bidang kontrol dalam cluster.
Memverifikasi metrik bidang kontrol
Anda dapat menampilkan versi bidang kontrol dan bidang data di Metrics Explorer.
Untuk memastikan konfigurasi Anda berfungsi dengan benar:
Di konsol Google Cloud, lihat metrik bidang kontrol:
Pilih ruang kerja Anda dan tambahkan kueri kustom menggunakan parameter berikut:
- Jenis resource: Container Kubernetes
- Metrik: Klien Proxy
- Filter:
container_name="cr-asm-managed-rapid"
- Group By: label revisi dan label proxy_version
- Jumlah Agregator
- Menstruasi: 1 menit
Saat menjalankan Anthos Service Mesh dengan bidang kontrol dalam cluster dan yang dikelola Google, Anda dapat membedakan metrik berdasarkan nama container-nya. Misalnya, metrik terkelola memiliki
container_name="cr-asm-managed"
, sedangkan metrik yang tidak dikelola memilikicontainer_name="discovery"
. Untuk menampilkan metrik dari keduanya, hapus Filter padacontainer_name="cr-asm-managed"
.Verifikasi versi bidang kontrol dan versi proxy dengan memeriksa kolom berikut di Metrics Explorer:
- Kolom revision menunjukkan versi bidang kontrol.
- Kolom proxy_version menunjukkan
proxy_version
. - Kolom value menunjukkan jumlah proxy yang terhubung.
Untuk mengetahui pemetaan versi saluran ke Anthos Service Mesh saat ini, lihat Versi Anthos Service Mesh per saluran.
Memigrasikan aplikasi ke Anthos Service Mesh terkelola
Anthos Service Mesh terkelola hanya mendukung migrasi dari Anthos Service Mesh 1.9 yang menggunakan Mesh CA.
Untuk bermigrasi ke Anthos Service Mesh terkelola, lakukan langkah-langkah berikut:
Jalankan skrip seperti yang ditunjukkan di bagian Menerapkan bidang kontrol yang dikelola Google.
Jika Anda men-deploy bidang kontrol dan bidang data yang dikelola Google:
Aktifkan pengelolaan bidang data:
kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Aktifkan Anthos Service Mesh di fleet:
gcloud alpha container hub mesh enable --project=PROJECT_ID
Ganti label namespace saat ini dengan label
istio.io/rev:asm-managed-rapid
:kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-managed-rapid \ --overwrite
Lakukan upgrade berkelanjutan pada deployment dalam namespace:
kubectl rollout restart deployment -n NAMESPACE
Uji aplikasi Anda untuk memverifikasi bahwa beban kerja berfungsi dengan benar.
Jika Anda memiliki workload di namespace lain, ulangi langkah-langkah sebelumnya untuk setiap namespace.
Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasikan konfigurasi Kubernetes dan Istio di semua cluster, kecuali jika Anda ingin membatasi konfigurasi tersebut hanya ke subset cluster saja. Konfigurasi yang diterapkan ke cluster tertentu adalah sumber tepercaya untuk cluster tersebut.
Pastikan metrik muncul seperti yang diharapkan dengan mengikuti langkah-langkah dalam Memverifikasi metrik bidang kontrol.
Cluster dapat memiliki campuran revisi, misalnya Anthos Service Mesh 1.7 dan 1.8, serta bidang kontrol dalam cluster secara bersamaan. Anda dapat menggabungkan namespace menggunakan revisi bidang kontrol Anthos Service Mesh yang berbeda tanpa batas waktu.
Jika Anda yakin aplikasi berfungsi seperti yang diharapkan, Anda dapat menghapus
istiod
dalam cluster setelah mengalihkan semua namespace ke bidang kontrol
dalam cluster, atau menyimpannya sebagai cadangan - istiod
akan otomatis memperkecil skala
untuk menggunakan lebih sedikit resource. Untuk menghapus, langsung buka Menghapus bidang kontrol lama.
Jika mengalami masalah, Anda dapat mengidentifikasi dan mengatasinya menggunakan informasi dalam Menyelesaikan masalah bidang kontrol terkelola dan jika perlu, roll back ke versi sebelumnya.
Hapus bidang kontrol lama
Setelah menginstal dan mengonfirmasi bahwa semua namespace menggunakan bidang kontrol yang dikelola Google, Anda dapat menghapus bidang kontrol lama.
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Jika Anda menggunakan istioctl kube-inject
, bukan injeksi otomatis, atau jika
Anda menginstal gateway tambahan, periksa metrik untuk bidang kontrol,
dan pastikan bahwa jumlah endpoint yang terhubung adalah nol.
Roll back
Lakukan langkah-langkah berikut jika Anda perlu melakukan roll back ke versi bidang kontrol sebelumnya:
Memperbarui beban kerja yang akan dimasukkan dengan bidang kontrol versi sebelumnya. Dalam perintah berikut, nilai revisi
asm-191-1
hanya digunakan sebagai contoh. Ganti nilai contoh dengan label revisi bidang kontrol Anda sebelumnya.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-191-1 --overwrite
Mulai ulang Pod untuk memicu injeksi ulang agar proxy memiliki versi sebelumnya:
kubectl rollout restart deployment -n NAMESPACE
Bidang kontrol terkelola akan otomatis diskalakan ke nol dan tidak menggunakan resource apa pun saat tidak digunakan. Penyediaan dan webhook yang bermutasi akan tetap ada dan tidak memengaruhi perilaku cluster.
Gateway sekarang disetel ke revisi asm-managed
. Untuk melakukan roll back, jalankan kembali perintah instal Anthos Service Mesh, yang akan men-deploy ulang gateway yang mengarah kembali ke bidang kontrol dalam cluster Anda:
kubectl -n istio-system rollout undo deploy istio-ingressgateway
Nantikan output ini setelah berhasil:
deployment.apps/istio-ingressgateway rolled back
Memigrasikan gateway ke bidang kontrol yang dikelola Google
Buat deployment Kubernetes untuk gateway versi baru menggunakan dokumentasi. Anda harus mengonfigurasi layanan Gateway Kubernetes yang ada untuk memilih versi lama dan baru, dengan menggunakan kolom
selector
dalam konfigurasi layanan.Dengan menggunakan perintah kubectl scale ini, Anda dapat meningkatkan skala deployment baru secara bertahap, sementara Anda juga menurunkan skala deployment lama dan memeriksa tanda-tanda gangguan layanan/periode nonaktif. Jika migrasi berhasil, Anda akan mencapai nol instance lama selagi tidak mengalami gangguan layanan.
Uninstal
Bidang kontrol yang dikelola Google akan diskalakan secara otomatis ke nol jika tidak ada namespace yang menggunakannya, sehingga Anda tidak perlu meng-uninstal.
Pemecahan masalah
Untuk mengidentifikasi dan menyelesaikan masalah saat menggunakan bidang kontrol terkelola, lihat Menyelesaikan masalah bidang kontrol terkelola.
Apa langkah selanjutnya?
- Pelajari saluran rilis