Memperbarui konfigurasi kompresor EnvoyFilter

Beberapa kolom tingkat teratas di platform API filter envoy.extensions.filters.http.compressor.v3.Compressor tidak digunakan lagi di Envoy (lihat definisi sumber). Setelan ini telah dipindahkan ke dalam blok response_direction_config.common_config dan request_direction_config.common_config khusus.

Panduan ini memberikan konteks dan langkah-langkah yang diperlukan untuk memperbarui resource EnvoyFilter Anda ke format yang didukung. Beralih ke format modern ini memastikan konfigurasi Anda tetap kompatibel dengan update berikutnya, mendapatkan manfaat dari kejelasan struktural yang lebih baik, dan selaras dengan praktik terbaik modernisasi Cloud Service Mesh.

Memahami kebutuhan modernisasi

Filter Envoy Compressor menyediakan kompresi dan dekompresi body HTTP secara langsung, sehingga membantu mengurangi penggunaan bandwidth dan meningkatkan performa aplikasi.

Cloud Service Mesh dengan bidang kontrol TRAFFIC_DIRECTOR (lihat Memeriksa penerapan bidang kontrol) memerlukan penggunaan versi EnvoyFilter API yang didukung. Deployment lama yang menggunakan kolom tingkat teratas yang tidak digunakan lagi (seperti content_length, content_type, disable_on_etag_header, remove_accept_encoding_header, atau runtime_enabled) akan terus berfungsi, tetapi sebaiknya segera diperbarui untuk tujuan keandalan.

Saat menggunakan kolom yang tidak digunakan lagi ini, validasi akan di-roll out secara progresif di seluruh saluran rilis (Rapid, lalu Regular, lalu Stable). Validasi bidang kontrol berlaku berdasarkan waktu terjadinya deployment:

Jenis Penerapan Perilaku Validasi
Penerapan Lama (Diterapkan sebelum validasi diaktifkan) Bidang kontrol menetapkan status peringatan pada resource kustom (CR) EnvoyFilter Anda yang berbunyi: found usage of unsupported fields: [...]. Konfigurasi akan tetap diterapkan untuk kompatibilitas mundur, tetapi Anda harus bermigrasi ke kolom yang didukung untuk memastikan dukungan berkelanjutan.
Deployment yang Didukung (Di-deploy setelah validasi diaktifkan) Bidang kontrol secara ketat memblokir penggunaan kolom yang tidak didukung. Penerapan konfigurasi akan menghasilkan error pada resource EnvoyFilter dengan pesan: found usage of unsupported fields: [...], dan konfigurasi yang tidak didukung akan ditolak.

Memperbarui konfigurasi akan mengatasi peringatan dan error ini di status resource Anda, serta memastikan konfigurasi Anda mematuhi validasi.

Mengidentifikasi konfigurasi yang tidak digunakan lagi

Konfigurasi EnvoyFilter Anda perlu diperbarui jika Anda menyetel salah satu kolom berikut secara langsung di bawah blok typed_config:

  • min_content_length
  • content_length
  • content_type
  • disable_on_etag_header
  • remove_accept_encoding_header

Anda dapat mencantumkan EnvoyFilter menggunakan:

kubectl get envoyfilters --all-namespaces -o yaml

Periksa output untuk melihat patch EnvoyFilters envoy.filters.http.compressor.

Format konfigurasi

Bagian berikut memberikan contoh konfigurasi yang tidak digunakan lagi dan yang sudah dimodernisasi untuk filter Compressor Envoy dalam resource EnvoyFilter.

Contoh konfigurasi yang tidak digunakan lagi

Jika bagian patch EnvoyFilter Anda menyerupai cuplikan berikut, berarti patch tersebut menggunakan format yang tidak digunakan lagi:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: compressor-filter-update
  namespace: istio-system
spec:
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: GATEWAY
      listener:
        filterChain:
          filter:
            name: envoy.filters.network.http_connection_manager
            subFilter:
              name: envoy.filters.http.router
    patch:
      operation: INSERT_BEFORE
      value:
        name: envoy.filters.http.compressor
        typed_config:
          '@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
          # These top-level fields are DEPRECATED
          min_content_length: 1024
          content_type:
          - "application/javascript"
          - "application/json"
          disable_on_etag_header: true
          remove_accept_encoding_header: true
          compressor_library:
            name: gzip
            typed_config:
              '@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip

Contoh konfigurasi yang dimodernisasi

Kolom yang tidak digunakan lagi harus dipindahkan ke objek response_direction_config (atau request_direction_config jika berlaku):

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: compressor-filter-update
  namespace: istio-system
spec:
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: GATEWAY
      listener:
        filterChain:
          filter:
            name: envoy.filters.network.http_connection_manager
            subFilter:
              name: envoy.filters.http.router
    patch:
      operation: INSERT_BEFORE
      value:
        name: envoy.filters.http.compressor
        typed_config:
          '@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
          compressor_library:
            name: gzip
            typed_config:
              '@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip
          response_direction_config:
            disable_on_etag_header: true # MOVED
            remove_accept_encoding_header: true # MOVED
            common_config:
              min_content_length: 1024  # MOVED
              content_type:          # MOVED
              - "application/javascript"
              - "application/json"
              enabled:
                default_value: true
                runtime_key: "compressor.enabled"

Kolom dan jalur migrasi yang didukung

Untuk mengetahui daftar lengkap kolom yang didukung, lihat panduan Ekstensibilitas bidang data menggunakan EnvoyFilter. Tabel berikut menjelaskan pemetaan untuk memigrasikan kolom yang tidak digunakan lagi yang paling umum.

Jalur Kolom yang Tidak Digunakan Lagi Jalur Kolom Modern Catatan
typed_config.min_content_length typed_config.response_direction_config.common_config.min_content_length
ATAU
typed_config.request_direction_config.common_config.min_content_length
Menetapkan ukuran respons ATAU permintaan minimum masing-masing untuk memicu kompresi.
typed_config.content_length typed_config.response_direction_config.common_config.min_content_length
ATAU
typed_config.request_direction_config.common_config.min_content_length
Alias sebelumnya untuk min_content_length. Ubah nama menjadi min_content_length di jalur baru.
typed_config.content_type typed_config.response_direction_config.common_config.content_type
ATAU
typed_config.request_direction_config.common_config.content_type
Array jenis konten yang akan dikompresi.
typed_config.disable_on_etag_header typed_config.response_direction_config.disable_on_etag_header Menonaktifkan kompresi jika respons berisi header ETag.
typed_config.remove_accept_encoding_header typed_config.response_direction_config.remove_accept_encoding_header Menghapus header Accept-Encoding dari permintaan sebelum mengirim ke upstream.

Rencana migrasi

Sebaiknya perbarui konfigurasi EnvoyFilter Anda dengan mengikuti praktik terbaik deployment dan pengujian standar organisasi Anda. Pertimbangkan langkah-langkah umum berikut selama migrasi:

  • Identifikasi: Temukan semua resource EnvoyFilter menggunakan filter Compressor dengan kolom yang tidak digunakan lagi seperti yang dijelaskan dalam Mengidentifikasi konfigurasi yang tidak digunakan lagi.
  • Pengujian: Ubah YAML resource EnvoyFilter dan uji perubahan di lingkungan pra-produksi. Pastikan kompresi aktif untuk jenis dan ukuran konten yang diharapkan.
  • Pantau dan validasi:
    • Periksa status resource EnvoyFilter untuk mengonfirmasi bahwa peringatan atau error found usage of unsupported fields: [...] tidak ada lagi.
    • Pantau metrik utama: Penggunaan CPU, latensi, dan penggunaan bandwidth.
    • Periksa header respons (misalnya, Content-Encoding: gzip) dan konfirmasi kompresi.
  • Deploy: Terapkan konfigurasi EnvoyFilter yang didukung ke beban kerja produksi.

Manfaat modernisasi

  • Kejelasan Status Resource: Menghapus peringatan dan error found usage of unsupported fields: [...] dari status resource kompresor EnvoyFilter Anda.
  • Standardisasi: Sesuai dengan praktik terbaik konfigurasi Envoy saat ini dan validasi TRAFFIC_DIRECTOR.
  • Kompatibilitas pada masa mendatang: Memastikan konfigurasi Anda berfungsi dengan lancar dengan versi Envoy dan Cloud Service Mesh mendatang.

Pemecahan masalah dan dukungan

Jika Anda mengalami masalah, pertimbangkan hal berikut:

  • Periksa kembali sintaksis YAML dan penempatan kolom.
  • Periksa log proxy Envoy untuk melihat pesan error mendetail: kubectl logs -l app=your-app -c istio-proxy -n your-namespace.
  • Lakukan roll back ke konfigurasi EnvoyFilter sebelumnya jika diperlukan.
  • Hubungi Google Cloud Dukungan untuk mendapatkan bantuan lebih lanjut.