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 penskalaan. 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 mulai mengevaluasi fleet dan semua cluster yang disediakan Cloud Service Mesh dalam 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 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. Mengidentifikasi 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 guna menghapus atau mengubah anotasi yang diidentifikasi, dan pastikan anotasi tersebut tidak menyertakan anotasi yang tidak didukung. Terapkan kembali YAML yang telah diupdate ke cluster Anda.
    2. Setelah semua anotasi Pod diperbaiki, kondisi MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION tidak akan muncul lagi untuk langganan 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 (Custom Resource) 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 skrip berikut untuk mencantumkan semua Custom Resource (CR) Istio yang gagal dalam pemeriksaan kompatibilitas. 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 gateways proxyconfigs peerauthentications 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 tersebut tidak akan muncul lagi untuk langganan tersebut.MODERNIZATION_INCOMPATIBLE_CONFIG