Meng-uninstal Cloud Service Mesh terkelola

Halaman ini menjelaskan cara menghapus instalasi Cloud Service Mesh terkelola. Jika Anda menghapus Cloud Service Mesh dalam cluster, ikuti panduan penghapusan dalam cluster.

Jika Anda menggunakan penyiapan lama dengan beberapa bidang kontrol yang disediakan, maka mengikuti petunjuk ini akan menghapus semua bidang kontrol yang disediakan.

Bidang kontrol yang dikelola oleh asmcli tidak didukung untuk deinstalasi, tetapi cluster yang memiliki bidang kontrol yang dikelola oleh asmcli --managed atau mesh API didukung. Jika Anda tidak yakin dengan bidang kontrol, jalankan perintah berikut:

kubectl get controlplanerevisions -n istio-system -l 'app.kubernetes.io/created-by!=asmcli'

Uninstal didukung jika ada item yang tercantum dalam output.

Meng-uninstal Cloud Service Mesh

Gunakan perintah berikut untuk meng-uninstal semua komponen Cloud Service Mesh.

  1. Untuk mencegah gangguan pada traffic aplikasi:

    • Turunkan versi kebijakan mTLS STRICT ke PERMISSIVE.
    • Hapus AuthorizationPolicy yang dapat memblokir traffic.
  2. Nonaktifkan multi-cluster jika ada cluster lain yang menjalankan penemuan endpoint di cluster yang Anda hapus instalasinya.

    kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"manual"}}'
    
  3. Temukan secret yang perlu dibersihkan, lalu hapus secret tersebut:

    kubectl get secrets -n istio-system -l istio/multiCluster=true
    
    kubectl delete secret SECRET_NAME
    

    Dengan SECRET_NAME adalah nama rahasia. Ulangi langkah ini untuk setiap secret yang tercantum.

  4. Nonaktifkan injeksi otomatis sidecar di namespace Anda, jika diaktifkan. Jalankan perintah berikut untuk menampilkan label namespace:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    Outputnya mirip dengan hal berikut ini:

     NAME   STATUS   AGE     LABELS
     demo   Active   4d17h   istio.io/rev=asm-181-5

    1. Jika Anda melihat istio.io/rev= di output pada kolom LABELS, hapus:

       kubectl label namespace YOUR_NAMESPACE istio.io/rev-
      
    2. Jika Anda melihat istio-injection di output pada kolom LABELS, hapus:

       kubectl label namespace YOUR_NAMESPACE istio-injection-
      
    3. Jika Anda tidak melihat label istio.io/rev atau istio-injection, berarti penyisipan otomatis tidak diaktifkan di namespace.

  5. Mulai ulang workload Anda yang telah disisipkan sidecar untuk menghapus proxy.

  6. Pastikan tidak ada proxy yang terhubung ke bidang kontrol terkelola:

      kubectl get pods --all-namespaces -o json | jq -r '
      .items[] |
      select(
         .spec.containers[].env[]? |
         select(.name == "PROXY_CONFIG" and (.value | contains("\"discoveryAddress\":\"meshconfig.googleapis.com:443\"")))
      ) |
      "\(.metadata.namespace)\t\(.metadata.name)"
      '
    
  7. Perbarui pengelolaan spesifikasi keanggotaan fitur mesh menjadi not-installed:

     gcloud alpha container fleet mesh update \
       --project FLEET_PROJECT_ID \
       --memberships MEMBERSHIP_NAME \
       --location MEMBERSHIP_LOCATION \
       --management not-installed
    

    Ganti kode berikut:

    • MEMBERSHIP_NAME adalah nama keanggotaan yang tercantum saat Anda memverifikasi bahwa cluster Anda terdaftar ke fleet.
    • MEMBERSHIP_LOCATION adalah lokasi keanggotaan Anda (baik wilayah, atau global).
  8. Verifikasi status keanggotaan fitur mesh untuk status bidang kontrol adalah DISABLED.

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    

    Outputnya mirip dengan:

     servicemesh:
       controlPlaneManagement:
         details:
         - code: DISABLED
           details: Control Plane Management is not enabled.
         state: DISABLED
       dataPlaneManagement:
         details:
         - code: DISABLED
           details: Data Plane Management is not enabled.
         state: DISABLED
     state:
       description: 'Please see https://cloud.google.com/service-mesh/docs/install for instructions to onboard to Anthos Service Mesh.'
    ...
    

    Jika status bidang kontrol adalah DEPROVISIONING, periksa lagi setelah beberapa menit.

    1. Jika status bidang kontrol adalah STALLED, penghapusan instalasi akan diblokir agar tidak beroperasi karena kondisi error internal. Jika masalah berlanjut, hubungi Dukungan.
  9. Secara opsional, Hapus CR Istio, CRD Istio, configmap istio-(revisi), configmap asm-options, dan namespace istio-system untuk menghapus mesh layanan dari cluster atau menggunakannya di mesh layanan yang kompatibel dengan Istio API lainnya.

    1. Hapus CR Istio:

      kubectl delete gateways,virtualservices,destinationrules,serviceentries,envoyfilters,sidecars,peerauthentications,requestauthentications,authorizationpolicies,telemetries,wasmplugins,proxyconfigs --all --all-namespaces
      
    2. Hapus CRD Istio:

      kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl delete
      
    3. Hapus istio-(revision) configmap. Anda dapat melewati langkah ini jika Anda menghapus namespace istio-system.

      kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system
      

      Ganti RELEASE_CHANNEL dengan saluran rilis Anda (asm-managed, asm-managed-stable, atau asm-managed-rapid).

    4. Hapus asm-options configmap:

      kubectl delete configmap asm-options -n istio-system
      
    5. Hapus namespace istio-system:

      kubectl delete namespace istio-system --ignore-not-found=true
      
    6. Periksa apakah penghapusan berhasil:

      kubectl get ns
      

      Output harus menunjukkan status Terminating dan ditampilkan seperti yang ditunjukkan, jika tidak, Anda mungkin harus menghapus secara manual semua resource yang tersisa di namespace dan mencoba lagi.

      NAME                 STATUS       AGE
      istio-system         Terminating  71m
      
  10. Jika CNI terkelola diaktifkan di cluster Anda(default untuk penginstalan modern), hapus resource CNI:

    • Cluster standar: Periksa dan hapus ConfigMap istio-cni-plugin-config:

      1. Periksa apakah ConfigMap istio-cni-plugin-config ada:

           kubectl get configmap istio-cni-plugin-config -n kube-system
        
      2. Jika ada, hapus ConfigMap istio-cni-plugin-config:

           kubectl delete configmap istio-cni-plugin-config -n kube-system
        
    • Cluster Autopilot: GKE Autopilot membatasi modifikasi pada resource di namespace kube-system. Jika Anda mempertahankan cluster Autopilot setelah menghapus Managed Cloud Service Mesh, hubungi Dukungan agar Dukungan menghapus istio-cni-plugin-config ConfigMap dari kube-system.

  11. Jika Anda menggunakan Certificate Authority Service, lakukan pembersihan izin dan kumpulan CA yang dibuat saat mengonfigurasi Certificate Authority Service untuk Managed Cloud Service Mesh.

  12. Jika Anda mengaktifkan konfigurasi default fleet Managed Cloud Service Mesh dan ingin menonaktifkannya untuk cluster mendatang, nonaktifkan konfigurasi tersebut. Anda dapat melewati langkah ini jika hanya menghapus instalasi dari satu cluster.

     gcloud container hub mesh disable --fleet-default-member-config --project FLEET_PROJECT_ID
    

    Dengan FLEET_PROJECT_ID sebagai ID project Host Fleet Anda.

  13. Jika Anda berencana berhenti menggunakan Cloud Service Mesh di tingkat fleet, nonaktifkan fitur mesh layanan untuk project host fleet Anda.

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    Dengan FLEET_PROJECT_ID sebagai ID project Host Fleet Anda.

Setelah langkah-langkah ini selesai, semua komponen Cloud Service Mesh, termasuk proxy, otoritas sertifikat, serta peran dan binding RBAC, akan dihapus secara sistematis dari cluster. Selama proses penginstalan, akun layanan milik Google diberi izin yang diperlukan untuk membuat resource mesh layanan dalam cluster. Petunjuk penghapusan instalasi ini tidak mencabut izin ini, sehingga memungkinkan aktivasi ulang Cloud Service Mesh yang lancar di masa mendatang.