All Products
Search
Document Center

Alibaba Cloud Service Mesh:Migrasi canary in-place dari Istio ke ASM

Last Updated:Jun 21, 2026

Service Mesh (ASM) memungkinkan Anda melakukan migrasi kluster dari Istio open source. Panduan ini menjelaskan cara melakukan migrasi canary in-place dari instalasi Istio open source yang sudah ada ke lapisan kontrol ASM terkelola.

Proses migrasi

Proses migrasi dari Istio ke ASM terdiri atas empat fase.

Selama fase Migrating, perilaku injeksi mengikuti aturan yang telah Anda konfigurasikan untuk Istio, dan Sidecar Istio diinjeksikan secara default. Di namespace yang memiliki injeksi sidecar aktif, Anda dapat memodifikasi label Pod workload untuk menginjeksikan proxy mesh ASM.

Prasyarat

  • Kluster K8s yang ingin Anda migrasikan harus memenuhi persyaratan berikut:

    • Versi kluster harus 1.21 atau lebih baru. Jika kluster Alibaba Cloud Container Service for Kubernetes (ACK) Anda menggunakan versi sebelumnya, lihat Upgrade manual kluster ACK.

    • Versi Istio open source yang diinstal di kluster harus 1.10 atau lebih baru.

  • Buat instans ASM baru, versi 1.24 atau lebih baru, untuk migrasi ini. Untuk informasi selengkapnya, lihat Buat instans ASM.

Prosedur

Langkah 1: Tambahkan kluster ke ASM

Tambahkan kluster K8s Anda ke instans ASM. Anda dapat menambahkan kluster Alibaba Cloud Container Service for Kubernetes (ACK) atau kluster self-built yang telah terdaftar di ACK. Untuk petunjuknya, lihat Tambahkan kluster ke instans ASM. Selama proses tersebut, pilih opsi Ignore istio-system namespace check. Jika kluster yang akan dimigrasikan belum terdaftar di ACK, gunakan fitur kluster terdaftar dari ACK One untuk mendaftarkannya terlebih dahulu.

Setelah kluster ditambahkan ke instans ASM, resource ASMMigrateFromIstio akan dibuat secara otomatis. Resource ini mengontrol seluruh proses migrasi. Jalankan perintah berikut untuk melihat isinya:

kubectl --kubeconfig=${ASM_KUBECONFIG} get asmmigratefromistio

Output 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: Init

Tabel berikut menjelaskan field kunci dalam resource ini.

Parameter

Tipe

Deskripsi

Nilai

spec.desiredState

string

Status target migrasi. Ubah field ini untuk memasuki fase migrasi tertentu.

Penting

Nilainya hanya dapat diubah dalam urutan berikut:

Init -> SetupIstioForMigrate -> Migrating -> Finished.

  • Init (status saat ini)

  • SetupIstioForMigrate

  • Migrating

  • Finished

spec.retryCounter

int32

Saat Anda mengubah status, lapisan kontrol ASM menjalankan pemeriksaan untuk memastikan kriteria status baru terpenuhi. Pemeriksaan ini dipicu secara otomatis ketika Anda memodifikasi desiredState. Jika pemeriksaan gagal, selesaikan masalah berdasarkan pesan status, lalu tambahkan nilai ini untuk memicu pemeriksaan ulang.

0 hingga 2147483647

spec.advancedOptions

object

Opsi lanjutan.

spec.advancedOptions.disableIstioSystemLabelReconciliation

bool

Menentukan apakah lapisan kontrol ASM dicegah untuk merekonsiliasi label pada namespace istio-system. Atur ke true jika kluster Anda menggunakan gerbang timur-barat.

  • true: Mencegah ASM menambahkan label istio-injection: disable ke namespace istio-system.

  • false (Default): Mengizinkan ASM menambahkan label istio-injection: disable ke namespace istio-system.

status.retryCounter

int32

Menunjukkan apakah spec.retryCounter berhasil direkonsiliasi. Jika modifikasi terakhir berhasil, nilai ini sama dengan spec.retryCounter.

Hanya baca

status.state

string

Status saat ini dari migrasi. Setelah transisi status, jika operasi berhasil, nilai ini sesuai dengan nilai spec.desiredState.

Hanya baca

status.message

string

Jika transisi status gagal, field ini memberikan alasannya. Jika field ini tidak kosong, selesaikan masalah berdasarkan pesan tersebut, lalu ubah spec.retryCounter untuk mencoba ulang operasi.

Hanya baca

Ubah status ASMMigrateFromIstio

Untuk melanjutkan ke fase migrasi berikutnya, Anda harus mengubah status resource ASMMigrateFromIstio secara manual. Misalnya, untuk berpindah dari fase Init ke fase berikutnya, ubah status menjadi SetupIstioForMigrate.

Perintah berikut menunjukkan cara mengubah status untuk setiap fase.

  • SetupIstioForMigrate

    kubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"desiredState":"SetupIstioForMigrate"}}'
  • Migrating

    kubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"desiredState":"Migrating"}}'
  • Finished

    kubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"desiredState":"Finished"}}'

Ambil contoh status SetupIstioForMigrate. Jalankan perintah berikut untuk memverifikasi bahwa status telah berhasil diubah:

kubectl get asmmigratefromistio default -o yaml

Output yang diharapkan:

apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMigrateFromIstio
metadata:
  name: default
spec:
  desiredState: SetupIstioForMigrate
  retryCounter: 0
status:
  message: ""
  retryCounter: 0
  state: SetupIstioForMigrate

Perubahan status berhasil jika nilai status.state adalah SetupIstioForMigrate.

Catatan

Jika field status.state tidak diperbarui seperti yang diharapkan, periksa field status.message untuk detail error. Setelah Anda menyelesaikan masalah tersebut, tambahkan nilai spec.retryCounter sebesar 1 untuk mencoba ulang operasi.

Konfigurasi untuk kluster gerbang timur-barat

Secara default, ASM menonaktifkan injeksi sidecar otomatis di namespace istio-system. Namun, jika kluster Anda menggunakan gerbang timur-barat Istio, Pod gerbang tersebut memerlukan MutatingWebhook untuk mengganti image-nya. Proses ini mensyaratkan agar injeksi sidecar tidak secara eksplisit dinonaktifkan untuk namespace tersebut. Oleh karena itu, jika Anda menggunakan gerbang timur-barat Istio, jalankan perintah berikut untuk mencegah lapisan kontrol ASM menonaktifkan injeksi di namespace istio-system.

kubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"advancedOptions":{"disableIstioSystemLabelReconciliation": true}}}' 

Kemudian, hapus secara manual label yang telah diterapkan ASM ke namespace istio-system:

  1. Edit konfigurasi namespace istio-system.

    kubectl --kubeconfig=${ACK_KUBECONFIG_PATH} edit ns istio-system
  2. Hapus secara manual label istio-injection: disable, lalu simpan perubahan dan keluar.

Langkah 2: Siapkan Istio untuk migrasi

  1. Ubah status ke SetupIstioForMigrate.

    Penting

    Perintah ini mengonfigurasi ulang Istiod untuk migrasi dan memicu restart bergulir.

  2. Pada fase ini, ASM menambahkan konfigurasi berikut ke lapisan kontrol Istio. Hal ini memungkinkan Sidecar Istio dan proxy mesh ASM untuk menjalin komunikasi mTLS selama migrasi.

    defaultConfig:
      proxyMetadata:
        PROXY_CONFIG_XDS_AGENT:"true"

    Anda harus me-restart secara manual semua workload yang memiliki Sidecar Istio terinjeksi agar konfigurasi ini diterapkan. Jalankan perintah berikut untuk memverifikasi bahwa konfigurasi telah diterapkan pada Pod tertentu:

    kubectl get pod ${POD_NAME} -o yaml|grep PROXY_CONFIG_XDS_AGENT

    Jika perintah menghasilkan output yang tidak kosong, workload telah dikonfigurasi dengan benar. Setelah semua workload dengan Sidecar Istio terinjeksi dikonfigurasi dengan benar, Anda dapat melanjutkan ke status Migrating.

Langkah 3: Mulai migrasi

Pada fase ini, Anda beralih ke status Migrating. Anda kemudian dapat secara bertahap mengganti Sidecar Istio dengan proxy mesh ASM di seluruh workload Anda.

  1. Ubah status ke Migrating. Setelah status berhasil diubah, pertama-tama terapkan semua resource API Istio Anda ke instans ASM. Kemudian, ikuti langkah-langkah di bawah ini untuk memigrasikan Sidecar Istio, gerbang masuk, gerbang keluar, dan gerbang timur-barat ke padanan ASM-nya.

  2. (Opsional) Deploy gerbang cross-cluster ASM.

    Di ASM, workload dengan proxy mesh terinjeksi secara otomatis menggunakan gerbang cross-cluster ASM untuk komunikasi antar-kluster, yang merupakan padanan dari gerbang timur-barat Istio. Jika Anda menggunakan gerbang timur-barat dalam pengaturan Istio Anda, Anda harus mendeploy gerbang cross-cluster ASM sebelum menginjeksikan proxy mesh ASM ke workload mana pun. Hal ini memastikan komunikasi antar-kluster tidak terganggu.

    Di Konsol ASM, konfigurasikan nama jaringan untuk kluster agar sesuai dengan topologi jaringan Istio Anda saat ini. Untuk kluster yang telah memiliki gerbang timur-barat Istio terdeploy, aktifkan gerbang cross-cluster. Untuk informasi selengkapnya, lihat Konfigurasi pengaturan jaringan untuk kluster dan aktifkan proxy mesh cross-cluster.

    Setelah gerbang cross-cluster diaktifkan, Service LoadBalancer akan dibuat secara otomatis, yang mengenakan biaya untuk instans CLB yang mendasarinya. Klik OK untuk mengonfirmasi konfigurasi.

    Catatan

    Konfigurasi jaringan di ASM harus identik dengan konfigurasi di Istio. Misalnya, jika kluster A berada di network-1 dan kluster B berada di network-2 dalam pengaturan Istio Anda, Anda harus menggunakan nama jaringan yang sama di ASM.

  3. Migrasikan Sidecar Istio ke proxy mesh ASM.

    $ kubectl --kubeconfig=${K8S_KUBECONFIG_PATH} -n ${NAMESPACE} patch ${DEPLOYMENT_NAME} --type='merge' -p '{"spec":{"template":{"metadata":{"labels":{"sidecar.asm.aliyun.com/inject":"true"}}}}}'
    Penting

    Perintah ini memodifikasi label workload, yang memicu restart bergulir. Apakah trafik terganggu atau tidak bergantung pada beberapa faktor, termasuk dukungan shutdown yang mulus pada protokol aplikasi (seperti HTTP, HTTP/2, dan gRPC), konfigurasi Sidecar Istio yang tepat untuk shutdown yang mulus, serta perilaku aplikasi yang sesuai (misalnya, apakah semua permintaan dapat diselesaikan dalam periode shutdown yang mulus). Untuk meminimalkan potensi gangguan, lakukan operasi ini pada jam sepi.

  4. Migrasikan gerbang masuk Istio ke gerbang masuk ASM.

    Untuk informasi selengkapnya, lihat Migrasikan gerbang masuk Istio self-built ke gerbang ASM.

  5. Migrasikan gerbang keluar Istio ke gerbang keluar ASM. Jika gerbang keluar diaktifkan di kluster, ikuti langkah-langkah berikut untuk memigrasikannya:

    1. Buat gerbang keluar di ASM. Untuk informasi selengkapnya, lihat Buat gerbang keluar. Buat resource lain yang diperlukan, seperti ServiceEntry untuk mendaftarkan layanan eksternal, aturan gateway untuk mengaktifkan port forwarding untuk gerbang keluar, dan layanan virtual untuk mengarahkan trafik ke gerbang keluar. Untuk informasi selengkapnya, lihat Kelola trafik ke layanan eksternal di ASM.

    2. Modifikasi layanan virtual untuk layanan eksternal yang ingin Anda migrasikan agar mengarah ke gerbang keluar ASM dan atur bobot yang diinginkan.

      File YAML berikut adalah contohnya. Untuk contoh lengkap, lihat Gerbang keluar 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 destinasi baru yang mengarah ke gerbang keluar ASM dan sesuaikan bobotnya.
              host: asm-egressgateway.istio-system.svc.cluster.local # Mengasumsikan gerbang keluar ASM Anda bernama asm-egressgateway.
              port:
                number: 80
            weight: 1

      Dalam contoh ini, trafik ke edition.cnn.com dibagi antara gerbang keluar Istio dan gerbang keluar ASM dengan rasio 99:1. Anda dapat secara bertahap menyesuaikan rasio ini hingga seluruh trafik diarahkan ke gerbang keluar ASM. Pantau Log akses gerbang keluar Istio untuk memverifikasi bahwa tidak ada lagi trafik yang melewatinya.

Langkah 4: Finalisasi migrasi

Sebelum melanjutkan, pastikan Anda telah menyelesaikan semua tugas berikut:

  • Semua Sidecar Istio telah dihapus.

  • Tidak ada trafik yang melewati gerbang timur-barat, gerbang masuk, atau gerbang keluar Istio.

  • Semua konfigurasi API Istio telah diimpor ke ASM.

  • Workload yang diinjeksi proxy mesh ASM berperilaku sesuai harapan.

Setelah memastikan semua prasyarat terpenuhi, Anda dapat menguninstall Istio dari kluster menggunakan perintah istioctl yang sesuai dengan versi Istio Anda.

Catatan

Versi istioctl yang berbeda memiliki perilaku yang berbeda. Untuk mencegah penghapusan resource secara tidak sengaja atau pembersihan yang tidak lengkap, Anda harus menggunakan tool istioctl yang sesuai dengan versi Istio yang diinstal di kluster Anda.

$ istioctl --kubeconfig=${K8S_KUBECONFIG_PATH} uninstall --purge

Setelah penguninstalan selesai, ubah status ke Finished. Jika transisi status gagal, periksa field status.message untuk informasi tentang resource Istio yang tersisa dan perlu dibersihkan secara manual. Setelah pembersihan selesai, tambahkan nilai spec.retryCounter sebesar 1 untuk mencoba ulang operasi. Migrasi selesai ketika field status.state bernilai Finished.