Service Mesh (ASM) mendukung migrasi langsung cluster Kubernetes dengan Istio open source terinstal ke ASM. Dokumen ini menjelaskan cara memigrasikan cluster yang memiliki Istio open source terinstal ke ASM.
Proses
Ikuti langkah-langkah berikut dalam empat fase.
Selama fase Migrating, cluster Kubernetes diinjeksi sesuai aturan injeksi yang dikonfigurasikan untuk Istio dan secara default diinjeksi dalam Istio Sidecar. Di namespace tempat injeksi sidecar otomatis diaktifkan, Anda dapat mengubah label Pod untuk secara eksplisit menyatakan injeksi proxy mesh ASM untuk beban kerja tersebut.
Prasyarat
Untuk memenuhi syarat migrasi, cluster Kubernetes harus memenuhi persyaratan berikut:
Versi cluster harus 1.21 atau lebih baru. Jika cluster Anda lebih lama dari 1.21 dan di-hosting pada Alibaba Cloud Container Service for Kubernetes (ACK), lihat Tingkatkan cluster ACK secara manual untuk instruksi peningkatan.
Istio yang terinstal di cluster harus versi V1.10 atau lebih baru.
Buat instance ASM baru versi 1.24 atau lebih baru untuk migrasi. Untuk informasi lebih lanjut, lihat Buat instance ASM.
Prosedur
Langkah 1: Tambahkan cluster yang akan dimigrasi ke ASM
Untuk menambahkan cluster ACK dengan Istio terinstal atau cluster mandiri yang terdaftar ke Alibaba Cloud Container Service ke ASM, lihat Tambahkan cluster ke instance ASM. Selama proses ini, pilih opsi "Abaikan pemeriksaan namespace istio-system". Jika cluster Kubernetes belum terdaftar dengan Alibaba Cloud Container Service, daftarkan cluster dengan instance ACK berdasarkan fitur cluster terdaftar dari ACK One, lalu tambahkan cluster ke ASM di konsol ASM.
Setelah cluster ditambahkan ke ASM, instance ASM akan secara otomatis membuat sumber daya ASMMigrateFromIstio untuk mengontrol proses migrasi. Anda dapat menjalankan perintah berikut untuk melihat sumber daya tersebut.
kubectl --kubeconfig=${ASM_KUBECONFIG} get asmmigratefromistioKeluaran yang diharapkan:
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMigrateFromIstio
metadata:
name: default
spec:
desiredState: Init
retryCounter: 0
advancedOptions:
stopIstioSystemInjectionDisabling: false
status:
message: ""
retryCounter: 0
state: InitItem konfigurasi untuk sumber daya ini dijelaskan sebagai berikut.
Nama bidang | Tipe | Deskripsi | Nilai |
spec.desiredState | string | Menentukan status migrasi cluster yang akan dimigrasi. Anda dapat mengubah nilai ini untuk masuk ke status migrasi tertentu. Penting Nilai ini hanya dapat berubah dalam urutan tetap: Init -> SetupIstioForMigrate -> Migrating -> Finished. |
|
spec.retryCounter | int32 | Bidang kontrol plane ASM mungkin melakukan beberapa pemeriksaan yang diperlukan saat beralih status untuk memastikan bahwa standar yang ditentukan dalam status baru terpenuhi. Setelah Anda mengubah parameter desiredState, pemeriksaan ini secara otomatis dipicu. Jika pemeriksaan gagal, sesuaikan status berdasarkan petunjuk di layar sebelum mengubah nilai ini untuk memicu pemeriksaan ulang. | 0~2147483647 |
spec.advancedOptions | object | Menunjukkan opsi lanjutan. | |
spec.advancedOptions.stopIstioSystemInjectionDisabling | bool | Menentukan apakah akan menonaktifkan sinkronisasi label di namespace istio-system oleh ASM. Saat gateway timur-barat dikonfigurasikan di cluster yang akan dimigrasi, atur nilainya menjadi |
|
status.retryCounter | int32 | Menggambarkan apakah retryCounter direkonsiliasi dengan benar. Jika modifikasi terakhir berhasil direkonsiliasi, nilai ini sama dengan spec.retryCounter. | Hanya-baca |
status.state | string | Menunjukkan status saat ini. Setelah beralih status, jika status berhasil beralih ke status yang ditentukan oleh spec.desiredState, nilai status.state sama dengan spec.desiredState. | Hanya-baca |
status.message | string | Menunjukkan alasan kegagalan saat pergantian status gagal. Jika bidang ini tidak kosong, pengguna perlu melakukan penyesuaian seperti yang diprompt sebelum mengubah spec.retryCounter untuk memicu percobaan ulang. | Hanya-baca |
Pergantian status untuk ASMMigrateFromIstio
Untuk maju ke fase berikutnya, Anda harus secara manual mengubah status sumber daya ASMMigrateFromIstio. Dalam contoh ini, status saat ini adalah Init, dan status SetupIstioForMigrate menunjukkan bahwa itu maju ke fase berikutnya.
Kode sampel berikut memberikan contoh tentang cara beralih status:
SetupIstioForMigratekubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"desiredState":"SetupIstioForMigrate"}}'Migratingkubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"desiredState":"Migrating"}}'Finishedkubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"desiredState":"Finished"}}'
Dengan asumsi status di fase berikutnya adalah SetupIstioForMigrate, Anda dapat menjalankan perintah berikut untuk memverifikasi pergantian yang berhasil:
kubectl get asmigratefromistio default -o yamlKeluaran yang diharapkan:
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMigrateFromIstio
metadata:
name: default
spec:
desiredState: SetupIstioForMigrate
retryCounter: 0
status:
message: ""
retryCounter: 0
state: SetupIstioForMigrateJika nilai status.state adalah SetupIstioForMigrate, status telah berhasil beralih.
Jika nilai status.state tidak berubah seperti yang diharapkan, ubah sesuai prompt status.message. Setelah modifikasi, tambahkan spec.retryCounter sebesar 1 sebelum mencoba lagi.
Pengaturan tambahan yang diperlukan untuk cluster dengan gateway timur-barat Istio diaktifkan
Secara default, injeksi sidecar otomatis dinonaktifkan untuk namespace istio-system di ASM. Namun, gambar cache dari pod gateway timur-barat Istio perlu dimodifikasi secara manual oleh MutatingWebhook, yang memerlukan injeksi sidecar diaktifkan untuk namespace istio-system. Jika gateway timur-barat diaktifkan di cluster Anda, jalankan perintah berikut untuk mencegah ASM menonaktifkan injeksi sidecar otomatis di namespace istio-system.
kubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"advancedOptions":{"disableIstioSystemLabelReconciliation": true}}}' Selanjutnya, secara manual hapus label yang telah disinkronkan dari ASM ke istio-system:
Edit konfigurasi namespace Istio-system.
kubectl --kubeconfig=${Path file kubeconfig dari instance ACK} edit ns istio-systemHapus label
istio-injection: disable, lalu simpan dan keluar.
Langkah 2: Konfigurasikan Istio untuk persiapan
Ubah status menjadi SetupIstioForMigrate.
PentingSetelah Anda menjalankan perintah di atas, Istiod perlu dikonfigurasikan ulang di ASM. Dalam hal ini, Anda dapat me-restart Istiod dalam mode bergulir untuk migrasi selanjutnya.
Dalam fase ini, ASM menambahkan konfigurasi berikut ke Istio untuk mengaktifkan komunikasi mTLS antara Istio Sidecar dan ASM Sidecar selama migrasi.
defaultConfig: proxyMetadata: PROXY_CONFIG_XDS_AGENT: "true"Setelah memasuki fase ini, untuk menerapkan konfigurasi ini ke semua beban kerja, Anda perlu me-restart semua beban kerja dengan Istio Sidecar yang diaktifkan. Anda dapat menjalankan perintah berikut untuk memastikan apakah sebuah Pod memenuhi syarat:
kubectl get pod ${Nama POD} -o yaml|grep PROXY_CONFIG_XDS_AGENTKeluaran yang tidak kosong menunjukkan bahwa beban kerja dikonfigurasikan dengan benar. Setelah semua beban kerja dengan Istio Sidecar yang diaktifkan dikonfigurasi, lanjutkan ke fase Migrating.
Langkah 3: Migrasi
Selama fase Migrating, Anda dapat menginjeksi baik Istio Sidecar maupun proxy mesh ASM di beban kerja hingga semua Istio Sidecar diganti oleh proxy mesh ASM.
Beralih status ke Migrating. Dalam fase ini, hubungkan semua API Istio ke ASM, lalu migrasikan komponen Istio Sidecar termasuk ingress gateway, egress gateway, dan gateway timur-barat ke ASM sesuai dengan langkah-langkah berikut.
(Opsional) Sebarkan gateway lintas-cluster ASM.
Dalam ASM, beban kerja dengan proxy mesh yang diaktifkan secara otomatis menggunakan gateway lintas-cluster ASM untuk komunikasi lintas-cluster, mirip dengan gateway timur-barat Istio. Dalam hal ini, jika gateway timur-barat diaktifkan, sangat penting untuk menyebarkan gateway lintas-cluster ASM sebelum mengintegrasikan beban kerja apa pun dengan proxy mesh ASM untuk mempertahankan komunikasi lintas-cluster yang lancar setelah beralih dari Istio Sidecar ke proxy mesh ASM.
Konfigurasikan jaringan untuk cluster di konsol ASM. Jaringan-jaringan tersebut harus sama dengan jaringan yang dikonfigurasikan untuk cluster di Istio. Selain itu, Anda perlu mengaktifkan Aktifkan Akses Melalui Proxy Mesh Lintas-Cluster untuk cluster dengan gateway timur-barat Istio yang diaktifkan. Untuk informasi lebih lanjut, lihat Konfigurasikan pengaturan jaringan untuk cluster dan aktifkan proxy mesh lintas-cluster.
CatatanPastikan konfigurasi jaringan di ASM sesuai dengan yang ada di Istio. Dalam contoh ini, Anda harus mengonfigurasi network-1 untuk cluster a dan network-2 untuk cluster b di ASM untuk memastikan konsistensi.
Migrasikan Istio Sidecar ke proxy mesh ASM.
$ kubectl --kubeconfig=${Path file kubeconfig dari cluster Kubernetes} -n ${namespace} patch ${Nama Deployment} --type='merge' -p '{"spec":{"template":{"metadata":{"labels":{"sidecar.asm.aliyun.com/inject":"true"}}}}}'PentingOperasi ini dapat memicu restart bergulir pada beban kerja. Kehilangan trafik bergantung pada apakah aplikasi mendukung shutdown yang mulus, apakah shutdown yang mulus dikonfigurasikan untuk Istio Sidecar, dan apakah aplikasi memenuhi persyaratan shutdown yang mulus. Persyaratannya adalah semua permintaan ke aplikasi harus dikembalikan dalam periode timeout yang ditentukan. Kami merekomendasikan Anda melakukan langkah ini selama jam non-puncak.
Migrasikan Istio ingress gateway ke ASM ingress gateway.
Migrasikan Istio ingress gateway ke ASM ingress gateway. Untuk informasi lebih lanjut, lihat Cara memigrasikan Istio IngressGateway mandiri ke gateway ASM.
Migrasikan Istio egress gateway ke ASM egress gateway. Ikuti langkah-langkah berikut jika egress gateway diaktifkan di cluster yang akan dimigrasi.
Buat egress gateway di ASM. Untuk informasi lebih lanjut, lihat Buat egress gateway. Buat sumber daya yang diperlukan, seperti ServiceEntry untuk mendaftar ke layanan eksternal, aturan gateway untuk mengaktifkan penerusan port untuk egress gateway, dan layanan virtual untuk merutekan trafik ke egress gateway. Untuk informasi lebih lanjut, lihat Manajemen trafik untuk mengakses layanan eksternal di ASM.
Atur ulang layanan virtual untuk layanan eksternal untuk mengarahkan trafik ke ASM egress gateway dan atur bobot yang diinginkan.
Kode sampel berikut memberikan contoh tentang cara mengonfigurasi layanan virtual. Untuk kode sampel lengkap, lihat Egress gateway untuk trafik HTTP.
apiVersion: networking.istio.io/v1 kind: VirtualService metadata: name: direct-cnn-through-egress-gateway spec: hosts: - edition.cnn.com gateways: - istio-egressgateway - mesh http: - match: - gateways: - mesh port: 80 route: - destination: host: istio-egressgateway.istio-system.svc.cluster.local port: number: 80 weight: 99 - destination: # Tambahkan tujuan baru yang mengarah ke Egress gateway dan sesuaikan bobotnya sesuai kebutuhan host: asm-egressgateway.istio-system.svc.cluster.local # Anggap gateway egress ASM Anda disebut asm-egressgateway port: number: 80 weight: 1Dalam file YAML ini, trafik ke edition.cnn.com dirutekan ke Istio Ingressgateway dan ASM Egressgateway dengan rasio 99:1. Sesuaikan rasio sesuai kebutuhan hingga semua trafik dirutekan ke ASM Egress gateway. Anda dapat memantau log akses Istio Egress gateway untuk melacak aliran trafik.
Langkah 4: Penyelesaian
Sebelum beralih ke fase berikutnya, pastikan semua operasi di bawah ini selesai:
Semua Istio Sidecar dihapus.
Tidak ada trafik yang melewati gateway timur-barat Istio, ingress gateway, atau egress gateway.
Semua konfigurasi API Istio diimpor ke ASM.
Beban kerja yang telah diinjeksi dengan proxy mesh ASM berfungsi seperti yang diharapkan.
Setelah operasi di atas selesai, Anda dapat meng-uninstall Istio yang terinstal di cluster menggunakan perintah istioctl spesifik-versi:
Gunakan alat istioctl yang sesuai dengan versi yang terinstal untuk menghindari masalah seperti penghapusan atau kelalaian yang tidak disengaja.
$ istioctl --kubeconfig=${Path file kubeconfig dari cluster Kubernetes} uninstall --purgeSetelah alat istioctl di-uninstall, beralih status ke Finished. Jika pergantian status gagal, bersihkan sumber daya Istio yang tersisa sesuai prompt status.message, dan tambahkan spec.retryCounter sebesar 1 sebelum mencoba lagi. Migrasi selesai ketika nilai status.state diubah menjadi Finished.