Mengonfigurasi ekstensi traffic

Service Extensions memungkinkan Load Balancer Aplikasi yang didukung untuk menggunakan plugin atau mengirim callout ke layanan backend guna menyisipkan pemrosesan kustom di jalur pemrosesan. Ekstensi traffic berjalan terakhir di jalur pemrosesan permintaan dan pertama di pemrosesan respons untuk mengubah header dan payload tanpa memengaruhi pilihan layanan backend service. Halaman ini menjelaskan cara mengonfigurasi ekstensi traffic.

Untuk mengetahui ringkasan tentang ekstensi Load Balancer Aplikasi, lihat Ringkasan ekstensi Cloud Load Balancing.

Ekstensi traffic untuk Load Balancer Aplikasi mengarah ke resource berikut:

  • Aturan penerusan yang akan dilampirkan
  • Plugin atau layanan backend callout yang backend-nya menjalankan ext_proc gRPC API

Ekstensi traffic mengelompokkan layanan ekstensi terkait ke dalam satu atau beberapa rantai. Anda dapat mengonfigurasi plugin dan callout dalam rantai ekstensi yang sama. Setiap rantai ekstensi memilih traffic yang akan ditindaklanjuti menggunakan Common Expression Language (CEL) kondisi kecocokan. Load balancer mengevaluasi permintaan terhadap kondisi kecocokan setiap rantai secara berurutan. Saat permintaan cocok dengan kondisi yang ditentukan oleh rantai, semua ekstensi dalam rantai akan menindaklanjuti permintaan tersebut. Hanya satu rantai yang cocok dengan permintaan tertentu.

Setiap ekstensi dalam rantai dapat memiliki kumpulan peristiwa yang didukungnya sendiri. Perubahan yang dilakukan oleh ekstensi pada konten permintaan dan respons dapat dilihat oleh ekstensi yang tersisa dalam rantai. Untuk ekstensi yang dikonfigurasi untuk mendukung peristiwa respons, urutan ekstensi akan dibalik di jalur respons.

Ekstensi traffic mereferensikan aturan penerusan load balancer yang akan dilampirkan. Setelah Anda mengonfigurasi resource, load balancer akan mulai mengirim permintaan yang cocok ke layanan ekstensi.

Untuk mengetahui informasi tentang batas terkait ekstensi, lihat halaman Kuota dan batas.

Mengonfigurasi menggunakan plugin

Bagian ini menunjukkan cara mengonfigurasi ekstensi traffic menggunakan plugin.

Semua resource ekstensi yang mereferensikan plugin tertentu harus memiliki jenis yang sama. Ekstensi juga harus memiliki skema load balancing yang sama. Anda tidak dapat mengonfigurasi ekstensi Cloud Load Balancing dengan plugin yang sudah digunakan di ekstensi Media CDN.

Sebelum memulai

  1. Buat plugin yang berisi kode kustom Anda.

  2. Buat dan konfigurasi Load Balancer Aplikasi yang mendukung plugin ekstensi traffic.

    Misalnya, siapkan Load Balancer Aplikasi eksternal global dengan backend grup instance VM.

  3. Siapkan cara untuk mengirim permintaan pengujian ke layanan Anda—misalnya, dengan menjalankan curl. Jika Anda menggunakan load balancer internal, buat VM klien untuk pengujian.

Mengonfigurasi ekstensi traffic menggunakan plugin

Contoh berikut membantu Anda mengonfigurasi ekstensi traffic menggunakan plugin yang menambahkan header respons, hello: service-extensions, saat host cocok dengan example.com.

  1. Periksa apakah ada kecocokan untuk example.com di peta URL.

    1. Jalankan perintah curl berikut terhadap aturan penerusan di VM klien:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      Ganti FORWARDING_RULE_IP dengan alamat IP aturan penerusan. Untuk menemukan alamat IP, gunakan perintah gcloud compute forwarding-rules describe.

      Outputnya mirip dengan hal berikut ini:

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
  2. Konfigurasi ekstensi traffic.

    Konsol

    1. Di Google Cloud konsol, buka halaman Service Extensions.

      Buka Service Extensions

    2. Klik Create extension.

      Wizard akan terbuka untuk memandu Anda melalui beberapa langkah awal.

    3. Untuk produk, pilih Load Balancing. Kemudian, klik Continue.

      Daftar Load Balancer Aplikasi yang didukung akan muncul.

    4. Untuk jenis load balancer, pilih Load Balancer Aplikasi eksternal global atau Load Balancer Aplikasi internal lintas region. Kemudian, klik Continue.

    5. Untuk jenis ekstensi, pilih Traffic extensions, lalu klik Continue.

    6. Untuk membuka formulir Create extension, klik Continue.

      Di formulir Create extension, perhatikan bahwa pilihan sebelumnya, yang muncul di bagian atas halaman, tidak dapat diedit.

    7. Di bagian Basics, lakukan hal berikut:

      1. Tentukan nama unik untuk ekstensi.

        Nama harus dimulai dengan huruf kecil, diikuti dengan maksimal 62 huruf kecil, angka, atau tanda hubung, dan tidak boleh diakhiri dengan tanda hubung.

      2. Opsional: Masukkan deskripsi singkat tentang ekstensi menggunakan maksimal 1.024 karakter.

    8. Opsional: Di bagian Labels, klik Add label. Kemudian, di baris yang muncul, lakukan hal berikut:

      • Untuk Key, masukkan nama kunci.
      • Untuk Value, masukkan nilai untuk kunci.

      Untuk menambahkan pasangan nilai kunci lainnya, klik Add label. Anda dapat menambahkan maksimal 64 pasangan nilai kunci.

      Untuk mengetahui informasi selengkapnya tentang label, lihat Membuat dan memperbarui label untuk project.

    9. Untuk Forwarding rules, pilih satu atau beberapa aturan penerusan yang akan dikaitkan dengan ekstensi—misalnya, http-content-rule.

      Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan akan terlihat tidak tersedia.

    10. Untuk Extension, guna menambahkan ekstensi yang akan dijalankan untuk permintaan yang cocok, lakukan hal berikut:

      • Untuk mencocokkan permintaan yang akan menjalankan rantai ekstensi, untuk Match condition, tentukan Common Expression Language (CEL) ekspresi—misalnya, request.host == "example.com".

        Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, klik Get syntax help atau lihat Referensi bahasa pencocokan CEL.

      • Untuk Programmability type, pilih Plugins.

      • Untuk Plugin, pilih plugin yang dibuat menggunakan Service Extensions untuk jenis produk dan ekstensi yang sama.

      • Untuk Events, pilih satu atau beberapa jenis peristiwa HTTP yang memanggil ekstensi.

      • Untuk Forward attributes, pilih atribut yang Anda inginkan untuk diteruskan oleh ekstensi. Untuk mengetahui informasi selengkapnya, lihat Atribut yang didukung.

      • Untuk Forward headers, klik Add header, lalu tambahkan header HTTP yang akan diteruskan ke ekstensi (dari klien atau backend). Jika header tidak ditentukan, semua header akan dikirim.

      • Opsional: Jika ekstensi mengalami error atau waktu tunggu habis dan Anda ingin pemrosesan permintaan atau respons dilanjutkan, untuk Fail open, pilih Enabled. Ekstensi berikutnya dalam rantai juga akan dijalankan.

        Secara default, opsi Fail open tidak dipilih. Dalam hal ini, saat terjadi error, pemrosesan permintaan atau respons akan berhenti. Jika header respons belum dikirimkan ke klien hilir, kode status HTTP 500 generik akan ditampilkan ke klien. Jika header respons telah dikirimkan, aliran HTTP ke klien akan direset.

        Opsi default untuk tidak memilih Fail open lebih disukai saat memprioritaskan keamanan atau integritas. Mengaktifkan Fail open, terutama untuk operasi non-kritis, akan membantu saat memprioritaskan ketersediaan.

      Jika Anda ingin menentukan lebih dari satu ekstensi atau rantai ekstensi, bukan satu ekstensi, klik tombol Switch to advanced mode di akhir formulir, lalu tentukan ekstensi dan rantai yang diperlukan. Ekstensi berjalan dalam urutan yang tercantum.

      Tentukan nama unik untuk setiap ekstensi dan rantai ekstensi. Nama harus sesuai dengan RFC-1034, hanya menggunakan huruf kecil, angka, dan tanda hubung, serta memiliki panjang maksimum 63 karakter. Selain itu, karakter pertama harus berupa huruf dan karakter terakhir harus berupa huruf atau angka.

    11. Klik Create extension.

    gcloud

    1. Tentukan plugin dalam file YAML dan kaitkan dengan aturan penerusan—misalnya, http-content-rule.

      cat >traffic-plugin.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/http-content-rule
          loadBalancingScheme: EXTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext1'
              service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN
              failOpen: false
              supportedEvents:
              - RESPONSE_HEADERS
              forwardAttributes:
              - request.host
              - request.path
      EOF
      

      Ganti kode berikut:

      • PROJECT_ID: ID project.
      • REGION: region aturan penerusan. Nilai harus cocok dengan nilai yang ditentukan untuk lokasi plugin.
      • LOCATION: lokasi plugin sebagai global atau region.
      • WASM_PLUGIN: ID atau nama lengkap plugin.

      Untuk mengetahui informasi selengkapnya tentang kolom dalam file YAML, lihat ExtensionChain dalam dokumentasi API. Untuk mengetahui informasi tentang atribut yang didukung, lihat Atribut yang didukung.

    2. Impor ekstensi traffic. Gunakan perintah gcloud service-extensions lb-traffic-extensions import dengan nilai contoh berikut.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic-plugin.yaml \
          --location=global
      

    Setelah ekstensi traffic dibuat, plugin baru memerlukan waktu beberapa saat untuk didistribusikan ke semua lokasi. Waktu dapat bervariasi di setiap lokasi karena plugin tidak dikirimkan ke semua lokasi secara bersamaan.

  3. Untuk memverifikasi bahwa ekstensi traffic berfungsi seperti yang diharapkan, gunakan perintah curl yang sama:

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    Output mencakup header respons hello: service-extensions.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    

    Untuk memvalidasi bahwa ekstensi hanya menargetkan traffic example.com, ulangi perintah curl tanpa header host.

    curl -D - FORWARDING_RULE_IP
    

    Outputnya mirip dengan hal berikut ini:

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    

Mengonfigurasi ekstensi traffic ke layanan yang dikelola pengguna menggunakan callout

Bagian ini menunjukkan cara mengonfigurasi ekstensi traffic ke layanan backend callout yang dikelola pengguna menggunakan callout.

Sebelum memulai

Buat resource yang diperlukan seperti yang dijelaskan dalam Mengonfigurasi layanan backend callout.

Mengonfigurasi ekstensi traffic menggunakan callout

Contoh berikut membantu Anda mengonfigurasi ekstensi traffic menggunakan callout yang akan dipanggil saat host cocok dengan example.com. Server ekstensi traffic di callout-vm menambahkan header respons, hello: service-extensions, ke permintaan yang cocok.

  1. Periksa apakah ada kecocokan untuk example.com di peta URL.

    1. Jalankan perintah curl berikut terhadap aturan penerusan di VM klien:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      Ganti FORWARDING_RULE_IP dengan alamat IP aturan penerusan. Untuk menemukan alamat IP, gunakan perintah gcloud compute forwarding-rules describe.

      Outputnya mirip dengan hal berikut ini:

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
      Page served from: l7-ilb-backend-example-1c7t
      
  2. Konfigurasi ekstensi traffic.

    Konsol

    1. Di Google Cloud konsol, buka halaman Service Extensions.

      Buka Service Extensions

    2. Klik Create extension.

      Wizard akan terbuka untuk memandu Anda melalui beberapa langkah awal.

    3. Untuk produk, pilih Load Balancing. Kemudian, klik Continue.

      Daftar Load Balancer Aplikasi yang didukung akan muncul.

    4. Pilih jenis load balancer. Untuk load balancer regional, tentukan juga region. Klik Continue.

    5. Untuk jenis ekstensi, pilih Traffic extensions, lalu klik Continue.

    6. Untuk membuka formulir Create extension, klik Continue.

      Di formulir Create extension, perhatikan bahwa pilihan sebelumnya, yang muncul di bagian atas halaman, tidak dapat diedit.

    7. Di bagian Basics, lakukan hal berikut:

      1. Tentukan nama unik untuk ekstensi.

        Nama harus dimulai dengan huruf kecil, diikuti dengan maksimal 62 huruf kecil, angka, atau tanda hubung, dan tidak boleh diakhiri dengan tanda hubung.

      2. Opsional: Masukkan deskripsi singkat tentang ekstensi menggunakan maksimal 1.024 karakter.

    8. Opsional: Di bagian Labels, klik Add label. Kemudian, di baris yang muncul, lakukan hal berikut:

      • Untuk Key, masukkan nama kunci.
      • Untuk Value, masukkan nilai untuk kunci.

      Untuk menambahkan pasangan nilai kunci lainnya, klik Add label. Anda dapat menambahkan maksimal 64 pasangan nilai kunci.

      Untuk mengetahui informasi selengkapnya tentang label, lihat Membuat dan memperbarui label untuk project.

    9. Untuk Forwarding rules, pilih satu atau beberapa aturan penerusan yang akan dikaitkan dengan ekstensi—misalnya, l7-ilb-forwarding-rule.

      Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan akan terlihat tidak tersedia.

    10. Untuk Extension, guna menambahkan ekstensi yang akan dijalankan untuk permintaan yang cocok, lakukan hal berikut:

      • Untuk Programmability type, pilih Callouts.

      • Untuk mencocokkan permintaan yang akan menjalankan rantai ekstensi, untuk Match condition, tentukan Common Expression Language (CEL) ekspresi—misalnya, request.host == "example.com".

        Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, klik Get syntax help atau lihat Referensi bahasa pencocokan CEL.

      • Untuk Authority, masukkan header authority dari permintaan gRPC yang dikirim dari load balancer ke layanan ekstensi service.

      • Untuk Backend service, pilih layanan backend yang dibuat dengan mengikuti petunjuk di Mengonfigurasi layanan backend callout.

      • Untuk Timeout, tentukan nilai antara 10 dan 1.000 milidetik setelah pesan di aliran mengalami waktu tunggu habis.

      • Untuk Events, pilih satu atau beberapa jenis peristiwa HTTP yang memanggil ekstensi.

      • Untuk Forward attributes, pilih atribut yang Anda inginkan untuk diteruskan oleh ekstensi. Untuk mengetahui informasi selengkapnya, lihat Atribut yang didukung.

      • Untuk Forward headers, klik Add header, lalu tambahkan header HTTP yang akan diteruskan ke ekstensi (dari klien atau backend). Jika header tidak ditentukan, semua header akan dikirim.

      • Opsional: Jika ekstensi mengalami error atau waktu tunggu habis dan Anda ingin pemrosesan permintaan atau respons dilanjutkan, untuk Fail open, pilih Enabled. Ekstensi berikutnya dalam rantai juga akan dijalankan.

        Secara default, opsi Fail open tidak dipilih. Dalam hal ini, saat terjadi error, pemrosesan permintaan atau respons akan berhenti. Jika header respons belum dikirimkan ke klien hilir, kode status HTTP 500 generik akan ditampilkan ke klien. Jika header respons telah dikirimkan, aliran HTTP ke klien akan direset.

        Opsi default untuk tidak memilih Fail open lebih disukai saat memprioritaskan keamanan atau integritas. Mengaktifkan Fail open, terutama untuk operasi non-kritis, akan membantu saat memprioritaskan ketersediaan.

      • Untuk Metadata, klik Add metadata dan tentukan nilai contoh seperti yang disarankan. Untuk Key, tentukan key, dan untuk Value, tentukan value.

        Klik Add metadata untuk menambahkan pasangan nilai kunci lainnya. Untuk Key, tentukan fr, dan untuk Value, tentukan forwarding_rule_id.

        Kolom Metadata memungkinkan Anda meneruskan informasi tambahan apa pun dari load balancer ke server ekstensi. Metadata dikirim dalam pesan ProcessingRequest dan dienkode sebagai protobuf.Struct. Teks apa pun dalam metadata yang cocok dengan ID aturan penerusan yang ditentukan akan diganti dengan URL resource yang sepenuhnya memenuhi syarat dari aturan penerusan yang terkait dengan permintaan klien.

        Ukuran total metadata harus kurang dari 1 KiB. Jumlah total kunci dalam metadata harus kurang dari 20. Panjang setiap kunci harus kurang dari 64 karakter. Panjang setiap nilai harus kurang dari 1.024 karakter. Semua nilai harus berupa string.

      Jika Anda ingin menentukan lebih dari satu ekstensi atau rantai ekstensi, bukan satu ekstensi, klik tombol Switch to advanced mode di akhir formulir, lalu tentukan ekstensi dan rantai yang diperlukan. Ekstensi berjalan dalam urutan yang tercantum.

      Tentukan nama unik untuk setiap ekstensi dan rantai ekstensi. Nama harus sesuai dengan RFC-1034, hanya menggunakan huruf kecil, angka, dan tanda hubung, serta memiliki panjang maksimum 63 karakter. Selain itu, karakter pertama harus berupa huruf dan karakter terakhir harus berupa huruf atau angka.

    11. Klik Create extension.

    gcloud

    1. Tentukan callout dalam file YAML dan kaitkan dengan aturan penerusan. Gunakan nilai contoh yang disediakan.

      cat >traffic.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/l7-ilb-forwarding-rule
          loadBalancingScheme: INTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext11'
              authority: ext11.com
              service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-callout-service
              failOpen: false
              timeout: 0.1s
              metadata:
                "key": "value"
                "fr": "forwarding_rule_id"
              supportedEvents:
              - RESPONSE_HEADERS
              forwardAttributes:
              - request.host
              - request.path
      EOF
      

      Ganti PROJECT_ID dengan ID project.

      Kolom metadata dalam konfigurasi ekstensi memungkinkan Anda meneruskan informasi tambahan apa pun dari load balancer ke server ekstensi. Metadata dikirim dalam pesan ProcessingRequest dan dienkode sebagai protobuf.Struct. Teks apa pun dalam metadata yang cocok dengan ID aturan penerusan yang ditentukan akan diganti dengan URL resource yang sepenuhnya memenuhi syarat dari aturan penerusan yang terkait dengan permintaan klien.

      Ukuran total metadata harus kurang dari 1 KiB. Jumlah total kunci dalam metadata harus kurang dari 16. Panjang setiap kunci harus kurang dari 64 karakter. Panjang setiap nilai harus kurang dari 1.024 karakter. Semua nilai harus berupa string.

      Untuk mengetahui informasi selengkapnya tentang kolom dalam file YAML, lihat ExtensionChain dalam dokumentasi API. Untuk mengetahui informasi tentang atribut yang didukung, lihat Atribut yang didukung.

    2. Impor ekstensi traffic. Gunakan gcloud service-extensions lb-traffic-extensions import perintah dengan nilai contoh berikut.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic.yaml \
          --location=us-west1
      
  3. Verifikasi bahwa ekstensi traffic berfungsi seperti yang diharapkan. Gunakan perintah curl yang sama:

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    Output mencakup header respons hello: service-extensions.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

    Untuk memvalidasi bahwa ekstensi hanya menargetkan traffic example.com, ulangi perintah curl tanpa header host.

    curl -D - FORWARDING_RULE_IP
    

    Outputnya mirip dengan hal berikut ini:

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

Langkah berikutnya