Memahami kompatibilitas Cloud Service Mesh

Panduan ini menjelaskan cara mengevaluasi kompatibilitas armada untuk modernisasi bidang kontrol dengan mengonfirmasi bahwa konfigurasi, infrastruktur, dan skalanya kompatibel dengan penerapan bidang kontrol TRAFFIC_DIRECTOR.

Mengaktifkan atau menonaktifkan pemeriksaan kompatibilitas

Untuk memulai pemeriksaan kompatibilitas, aktifkan mode validasi untuk armada, yang memicu audit berkelanjutan atas semua konfigurasi Istio, konfigurasi Infrastruktur, dan parameter skala. Mengaktifkan pemeriksaan ini tidak akan melakukan perubahan apa pun pada fleet atau cluster Anda; tindakan ini hanya mengaktifkan pelaporan kompatibilitas.

Mengaktifkan pemeriksaan

Untuk memulai audit kompatibilitas, jalankan perintah gcloud berikut:

gcloud alpha container fleet mesh update --modernization-compatibility validation-enabled --project FLEET_PROJECT_ID

Ganti FLEET_PROJECT_ID dengan ID project Host Fleet Anda. Umumnya, FLEET_PROJECT_ID memiliki nama yang sama dengan project.

Setelah diaktifkan, Cloud Service Mesh akan mulai mengevaluasi fleet dan semua cluster yang disediakan Cloud Service Mesh di fleet untuk kompatibilitas modernisasi.

Menonaktifkan pemeriksaan

Untuk menghentikan pelaporan hasil kompatibilitas, jalankan perintah berikut:

gcloud alpha container fleet mesh update --modernization-compatibility validation-disabled --project FLEET_PROJECT_ID

Perintah ini menghapus kondisi kompatibilitas modernisasi dari status keanggotaan, serta status ModernizationCompatible dari CR Istio individual.

Memahami kompatibilitas

Kompatibilitas modernisasi dilaporkan menggunakan kondisi di tingkat fleet dan keanggotaan (cluster). Sistem melakukan berbagai pemeriksaan pada waktu yang berbeda-beda, dengan semua pemeriksaan berjalan setidaknya sekali sehari. Tunggu hingga satu hari agar status diperbarui setelah mengaktifkan pemeriksaan atau menerapkan perbaikan.

Untuk melihat hasil ini, ambil status mesh terbaru dengan perintah berikut:

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

Kompatibilitas tingkat fleet

Lihat status modernisasi keseluruhan fleet Anda di bagian state.servicemesh.conditions.

  • Fleet kompatibel: Jika armada Anda kompatibel, Anda akan melihat kondisi dengan kode MODERNIZATION_COMPATIBLE:

    name: projects/project_id/locations/global/features/servicemesh
    state:
      servicemesh:
        conditions:
        - code: MODERNIZATION_COMPATIBLE
          details: 'Fleet is eligible for modernization.'
          documentationLink: https://cloud.google.com/service-mesh/...
          severity: INFO
    
  • Armada tidak kompatibel: Jika armada Anda belum kompatibel untuk modernisasi, Anda akan melihat kondisi dengan kode MODERNIZATION_INCOMPATIBLE:

    name: projects/project_id/locations/global/features/servicemesh
    state:
      servicemesh:
        conditions:
        - code: MODERNIZATION_INCOMPATIBLE
          details: 'Fleet is not yet eligible for modernization.'
          documentationLink: https://cloud.google.com/service-mesh/...
          severity: INFO
    

    Jika armada Anda tidak kompatibel, tinjau kondisi untuk mengetahui kesenjangan tertentu. Periksa kondisi tingkat armada dengan tingkat keparahan WARNING atau ERROR tambahan serta kondisi tingkat cluster di bagian membershipStates.servicemesh untuk mengatasi pemblokiran.

Kompatibilitas tingkat cluster

Cari kondisi dengan tingkat keparahan WARNING atau ERROR di bagian membershipStates.servicemesh untuk setiap cluster yang disediakan Cloud Service Mesh di fleet. Jika ada ketidakcocokan, outputnya akan mirip dengan ini:

membershipSpecs:
 projects/project_id/locations/global/memberships/cluster-a:
   mesh:
     management:MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/cluster-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
       details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING
     - code: WORKLOAD_IDENTITY_REQUIRED
       details: 'Workload Identity is not enabled for the cluster or at least one of the node pools.'
       documentationLink: https://cloud.google.com/...
       severity: ERROR
...

Ikuti documentationLink yang diberikan dalam setiap kondisi untuk memahami dan menyelesaikan ketidakcocokan tertentu.

Menyelesaikan masalah kompatibilitas

Mengatasi anotasi pod yang tidak kompatibel

Kode MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION menunjukkan bahwa cluster tidak dapat dimodernisasi ke bidang kontrol TRAFFIC_DIRECTOR karena Pod tertentu memiliki anotasi Istio yang tidak didukung atau tidak valid.

Contoh output dari perintah gcloud container fleet mesh describe dengan kondisi MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION yang ditetapkan untuk keanggotaan:

membershipStates:
  projects/project_id/locations/global/memberships/membership-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
       details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING

Untuk mengatasi anotasi pod ini:

  1. Identifikasi anotasi bermasalah: Periksa kolom details dari kondisi status untuk menemukan kunci anotasi yang tidak didukung atau tidak valid. Temukan semua Pod dengan kunci anotasi yang bermasalah.

  2. Perbaiki dan verifikasi:

    1. Ubah spesifikasi YAML untuk Deployment atau Pod Anda untuk memastikan hanya menggunakan anotasi yang didukung (semua anotasi lainnya tidak didukung). Hapus anotasi yang tidak didukung, perbaiki nilai yang tidak valid, dan terapkan kembali YAML yang diperbarui ke cluster Anda.
    2. Setelah semua anotasi Pod diperbaiki, kondisi MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION tidak akan lagi muncul untuk keanggotaan tersebut.

Mengatasi konfigurasi yang tidak kompatibel

Kode MODERNIZATION_INCOMPATIBLE_CONFIG menunjukkan bahwa cluster tidak dapat dimodernisasi ke bidang kontrol TRAFFIC_DIRECTOR karena konfigurasi yang tidak kompatibel. Ketidakcocokan ini dapat berasal dari:

  • CR Istio tertentu yang menggunakan fitur atau kolom yang tidak didukung atau berisi nilai yang tidak valid.
  • Setelan Istio MeshConfig tidak valid atau tidak didukung.
  • Melebihi batas skalabilitas.
  • Penggunaan anotasi namespace atau layanan yang tidak didukung.

Contoh output dari perintah gcloud container fleet mesh describe dengan kondisi MODERNIZATION_INCOMPATIBLE_CONFIG yang ditetapkan untuk keanggotaan:

membershipSpecs:
 projects/project_id/locations/global/memberships/membership-a:
   mesh:
     management:MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/membership-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_CONFIG
       details: 'One or more configs have warnings. Due to the following reason(s): Istio sidecar scale exceeds limit, MeshConfig "accessLogFile" is unsupported. Invalid Config Types: [Gateway, ServiceEntry], where more details are shown on individual config resources.See documentation link for more detail.'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING

Untuk menyelesaikan konfigurasi ini:

  1. Analisis detail kondisi: Periksa kolom details dari kondisi status. Ringkasan error individual dan identifikasi jenis resource dengan masalah konfigurasi. Untuk contoh detail yang diberikan, Anda akan diminta untuk mengatasi masalah skala dan MeshConfig serta memeriksa error pada resource Gateway dan ServiceEntry.

  2. Mengidentifikasi dan menyelidiki resource yang tidak kompatibel: Gunakan contoh skrip berikut untuk mencantumkan Resource Kustom (CR) Istio yang gagal dalam pemeriksaan kompatibilitas. Skrip ini disediakan sebagai contoh; tinjau dan analisis skrip tersebut untuk memastikan skrip tersebut memenuhi persyaratan lingkungan dan operasional Anda sebelum menjalankannya di cluster Anda. Skrip ini memerlukan penginstalan kubectl dan jq. Output mencakup detail error spesifik yang ditemukan di bagian status.conditions (jenis: ModernizationCompatible, status: "False") setiap resource.

    for resource in authorizationpolicies destinationrules envoyfilters gateways peerauthentications proxyconfigs requestauthentications serviceentries sidecars telemetries virtualservices wasmplugins workloadentries workloadgroups; do
      echo "--- Checking $resource ---"
      kubectl get $resource --all-namespaces -o json | \
      jq -r '.items[] | select(.status.conditions != null and any(.status.conditions[]; .type == "ModernizationCompatible" and .status == "False")) | {"kind": .kind, "name": .metadata.name, "namespace": .metadata.namespace, "message": [.status.conditions[] | select(.type == "ModernizationCompatible").message]}'
    done
    

    Contoh Output:

    --- Checking serviceentries ---
    {
      "kind": "ServiceEntry",
      "name": "demo-service-entry",
      "namespace": "se",
      "message": [
        "WARNING: unsupported resolution type: DNS_ROUND_ROBIN"
      ]
    }
    ..
    --- Checking workloadentries ---
    {
      "kind": "WorkloadEntry",
      "name": "demo-we",
      "namespace": "default",
      "message": [
        "WARNING: This API is not supported"
      ]
    }
    
  3. Perbaiki dan terapkan konfigurasi: Ubah YAML Anda dengan menghapus kolom yang tidak didukung atau mengganti nilai yang tidak valid dengan nilai yang kompatibel. Untuk mendapatkan bantuan, lihat Fitur yang didukung dari Cloud Service Mesh terkelola dan API Istio yang tidak didukung dalam dokumentasi. (Misalnya, dalam contoh yang diberikan, perbarui resolusi ServiceEntry dari DNS_ROUND_ROBIN menjadi DNS).

  4. Verifikasi perbaikan: Setelah menerapkan perbaikan, tunggu hingga 24 jam agar pemeriksaan berkala memperbarui status.

    • Kondisi ModernizationCompatible pada resource tetap harus berubah menjadi status: "True". Periksa status resource menggunakan:

      kubectl get resource name -n namespace -o yaml
      

      Contoh output:

      status:
        conditions:
        - lastTransitionTime: "2026-06-05T06:12:52.219963391Z"
          message: Resource is compatible for modernization
          reason: Compatible
          status: "True"
          type: ModernizationCompatible
      
    • Jalankan kembali perintah gcloud container fleet mesh describe. Setelah semua masalah terkait diselesaikan, kondisi MODERNIZATION_INCOMPATIBLE_CONFIG tidak akan muncul lagi untuk langganan tersebut.

Mengatasi skala armada yang tidak kompatibel

Kode MODERNIZATION_INCOMPATIBLE_FLEET_SCALE menunjukkan bahwa fleet tidak dapat di-upgrade ke bidang kontrol TRAFFIC_DIRECTOR karena skala resource di seluruh fleet melampaui batas yang didukung untuk upgrade.

Pada fase ini, kami mendukung modernisasi armada dengan batasan berikut: