Mengonfigurasi ekstensi rute

Service Extensions memungkinkan Load Balancer Aplikasi yang didukung menggunakan plugin atau mengirimkan callout ke layanan backend untuk menyisipkan pemrosesan kustom di jalur pemrosesan. Ekstensi rute berjalan di jalur pemrosesan permintaan saat load balancer menerima header permintaan dan sebelum mengevaluasi peta URL. Halaman ini menjelaskan cara mengonfigurasi ekstensi rute.

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

Ekstensi rute untuk Load Balancer Aplikasi mengarah ke resource berikut:

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

Ekstensi rute mengelompokkan layanan ekstensi terkait ke dalam rantai. Anda dapat mengonfigurasi plugin dan info dalam rantai ekstensi yang sama. Rantai ekstensi memilih traffic yang akan ditindaklanjuti dengan menggunakan kondisi pencocokan Common Expression Language (CEL). Load balancer mengevaluasi permintaan terhadap kondisi kecocokan untuk rantai secara berurutan. Jika permintaan cocok dengan kondisi yang ditentukan oleh rantai, semua ekstensi dalam rantai akan bertindak berdasarkan permintaan tersebut. Hanya ada satu rantai yang cocok dengan permintaan tertentu.

Ekstensi 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 yang terkait dengan ekstensi Load Balancer Aplikasi, lihat halaman Kuota dan batas.

Mengonfigurasi menggunakan plugin

Bagian ini menggunakan contoh untuk menunjukkan cara mengonfigurasi ekstensi rute dengan menggunakan plugin yang menulis ulang header permintaan :host menjadi service-extensions.com saat jalur cocok dengan /extensions. Host sebelumnya dan host yang baru dikonfigurasi dipetakan ke layanan backend di berbagai region, yang menunjukkan perilaku perutean.

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 dalam ekstensi Media CDN.

Sebelum memulai

  1. Buat plugin yang berisi kode kustom Anda.

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

    Ikuti petunjuk di halaman Menyiapkan Load Balancer Aplikasi internal lintas region dengan backend grup instance VM untuk semua langkah, kecuali langkah berikut:

    • Beri nama layanan backend sebagai service-one.
    • Arahkan service-one ke instance virtual machine (VM) di region A.
    • Arahkan gl7-gilb-url-map ke service-one secara default.
  3. Siapkan layanan backend tambahan, service-two, dan arahkan ke VM di region B.

  4. Ke peta URL, tambahkan pencocok jalur yang mengarah ke service-two. Gunakan perintah gcloud compute url-maps add-path-matcher dengan nilai sampel berikut:

      gcloud compute url-maps add-path-matcher gl7-gilb-url-map \
          --path-matcher-name=rewrite-host \
          --default-service=service-two \
          --new-hosts=service-extensions.com \
          --location=global
    
  5. 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 rute menggunakan plugin

  1. Periksa perilaku sebelum ekstensi dikonfigurasi.

    1. Verifikasi bahwa permintaan tanpa jalur eksplisit akan menuju region A:

      curl 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 berikut ini dan menunjukkan bahwa halaman ditayangkan dari VM di region A:

      Page served from region-A-vm
      
    2. Pastikan tidak ada kecocokan untuk /extensions di peta URL:

      curl FORWARDING_RULE_IP/extensions
      

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

      Output menunjukkan bahwa tidak ada kecocokan untuk /extensions dalam peta URL. Outputnya mirip dengan hal berikut ini:

      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <html><head>
      <title>404 Not Found</title>
      </head><body>
      ...
      
  2. Konfigurasi ekstensi rute.

    Konsol

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

      Buka Ekstensi Layanan

    2. Klik Buat ekstensi.

      Wizard akan terbuka untuk memandu Anda melalui beberapa langkah awal.

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

      Daftar Load Balancer Aplikasi yang didukung akan muncul.

    4. Untuk jenis load balancer, pilih Load Balancer Aplikasi internal lintas-region. Kemudian, klik Lanjutkan.

    5. Untuk jenis ekstensi, pilih Ekstensi rute, lalu klik Lanjutkan.

    6. Untuk membuka formulir Buat ekstensi, klik Lanjutkan.

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

    7. Di bagian Dasar-Dasar, 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 maksimum 1.024 karakter.

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

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

        Untuk menambahkan lebih banyak pasangan nilai kunci, klik Tambahkan label. Anda dapat menambahkan maksimum 64 pasangan nilai kunci.

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

    8. Untuk Aturan penerusan, pilih satu atau beberapa aturan penerusan untuk dikaitkan dengan ekstensi—misalnya, cr-ilb-forwarding-rule.

      Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan tampak dinonaktifkan.

    9. Untuk Rantai ekstensi, tambahkan satu atau beberapa rantai ekstensi untuk dieksekusi untuk permintaan yang cocok.

      Untuk menambahkan rangkaian ekstensi, lakukan langkah-langkah berikut, lalu klik Selesai:

      • Untuk Rantai ekstensi baru, tentukan nama unik.

        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.

      • Untuk mencocokkan permintaan yang rantai ekstensinya dieksekusi, untuk Kondisi kecocokan, tentukan ekspresi Common Expression Language (CEL) —misalnya, request.path.startsWith("/extensions").

        Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, klik Dapatkan bantuan sintaksis atau lihat referensi bahasa pencocokan CEL.

      • Tambahkan ekstensi yang akan dieksekusi untuk permintaan yang cocok. Untuk ekstensi rute, Anda hanya dapat menentukan satu ekstensi.

        Di bagian Ekstensi, lakukan tindakan berikut, lalu klik Selesai:

        • Untuk Programmability type, pilih Plugins.

        • Untuk Nama ekstensi, tentukan nama unik.

          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 berupa huruf atau angka.

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

        • Untuk Teruskan header, klik Tambahkan header, lalu tambahkan header HTTP untuk diteruskan ke ekstensi (dari klien atau backend). Jika header tidak ditentukan, semua header akan dikirim.

        • Opsional: Jika waktu tunggu ekstensi habis atau gagal dan Anda ingin pemrosesan permintaan atau respons dilanjutkan, untuk Fail open, pilih Diaktifkan.

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

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

    10. Klik Buat ekstensi.

    gcloud

    1. Tentukan plugin dalam file YAML dan kaitkan dengan aturan penerusan global—misalnya, cr-ilb-forwarding-rule.

      cat >route-plugin.yaml <<EOF
          name: route-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/cr-ilb-forwarding-rule
          loadBalancingScheme: INTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.path.startsWith("/extensions")'
            extensions:
            - name: 'ext1'
              service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN
              failOpen: false
              supportedEvents:
              - REQUEST_HEADERS
      EOF
      

      Ganti kode berikut:

      • PROJECT_ID: project ID.
      • 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 plugin yang sepenuhnya memenuhi syarat.
    2. Impor ekstensi rute. Gunakan perintah gcloud service-extensions lb-route-extensions import dengan nilai contoh berikut.

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

    Setelah ekstensi rute dibuat, perlu waktu beberapa saat agar plugin baru didistribusikan di semua lokasi. Waktu dapat bervariasi di berbagai lokasi karena plugin tidak dikirimkan ke semua lokasi secara bersamaan.

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

    curl FORWARDING_RULE_IP/extensions
    

    Outputnya mirip dengan berikut ini dan menunjukkan bahwa halaman ditayangkan dari VM di region B:

    Page served from region-B-vm
    

    Untuk memverifikasi bahwa plugin hanya berjalan untuk permintaan dengan awalan jalur /extension, ulangi perintah curl tanpa jalur.

    curl FORWARDING_RULE_IP
    

    Outputnya mirip dengan hal berikut ini:

    Page served from region-A-vm
    

Mengonfigurasi menggunakan info

Bagian ini menunjukkan cara mengonfigurasi ekstensi rute menggunakan balon teks.

Sebelum memulai

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

Mengonfigurasi ekstensi rute menggunakan info

Contoh berikut menunjukkan cara mengonfigurasi ekstensi rute yang akan dipanggil saat jalur cocok dengan /extensions. Server anotasi rute di callout-vm mengubah header Host menjadi service-extensions.com, menetapkan jalur ke /, lalu mengirimkan instruksi ke load balancer untuk menghitung ulang rute. Kemudian, traffic mengalir ke l7-ilb-backend-service2, bukan l7-ilb-backend-service.

  1. Periksa apakah ada kecocokan untuk /extensions di peta URL.

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

      curl FORWARDING_RULE_IP/extensions
      

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

      Output menunjukkan bahwa tidak ada kecocokan untuk /extensions dalam peta URL. Outputnya mirip dengan hal berikut ini:

      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <html><head>
      <title>404 Not Found</title>
      </head><body>
      ...
      
  2. Konfigurasi ekstensi rute.

    Konsol

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

      Buka Ekstensi Layanan

    2. Klik Buat ekstensi.

      Wizard akan terbuka untuk memandu Anda melalui beberapa langkah awal.

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

      Daftar Load Balancer Aplikasi yang didukung akan muncul.

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

    5. Untuk jenis ekstensi, pilih Ekstensi rute, lalu klik Lanjutkan.

    6. Untuk membuka formulir Buat ekstensi, klik Lanjutkan.

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

    7. Di bagian Dasar-Dasar, 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 maksimum 1.024 karakter.

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

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

        Untuk menambahkan lebih banyak pasangan nilai kunci, klik Tambahkan label. Anda dapat menambahkan maksimum 64 pasangan nilai kunci.

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

    8. Untuk Aturan penerusan, pilih satu atau beberapa aturan penerusan untuk dikaitkan dengan ekstensi—misalnya, l7-ilb-forwarding-rule.

      Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan tampak dinonaktifkan.

    9. Untuk Rantai ekstensi, tambahkan satu atau beberapa rantai ekstensi untuk dieksekusi untuk permintaan yang cocok.

      Untuk menambahkan rangkaian ekstensi, lakukan langkah-langkah berikut, lalu klik Selesai.

      • Untuk Rantai ekstensi baru, tentukan nama unik.

        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.

      • Untuk mencocokkan permintaan yang rantai ekstensinya dieksekusi, untuk Kondisi kecocokan, tentukan ekspresi Common Expression Language (CEL) —misalnya, request.path.startsWith("/extensions").

        Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, klik Dapatkan bantuan sintaksis atau lihat referensi bahasa pencocokan CEL.

      • Tambahkan ekstensi yang akan dieksekusi untuk permintaan yang cocok. Untuk ekstensi rute, Anda hanya dapat menentukan satu ekstensi.

        Di bagian Ekstensi, lakukan tindakan berikut, lalu klik Selesai:

        • Untuk Jenis kemampuan pemrograman, pilih Info tambahan.

        • Untuk Nama ekstensi, tentukan nama unik.

          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 berupa huruf atau angka.

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

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

        • Untuk Waktu tunggu, tentukan nilai antara 10 dan 1.000 milidetik, setelah itu pesan di stream akan mencapai waktu tunggu saat load balancer masih menunggu respons dari layanan ext_proc.

        • Untuk Teruskan header, klik Tambahkan header, lalu tambahkan header HTTP untuk diteruskan ke ekstensi (dari klien atau backend). Jika header tidak ditentukan, semua header akan dikirim.

        • Opsional: Jika waktu tunggu ekstensi habis atau gagal dan Anda ingin pemrosesan permintaan atau respons dilanjutkan, untuk Fail open, pilih Diaktifkan. Ekstensi berikutnya dalam rantai juga dieksekusi.

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

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

        • Untuk Metadata, klik Tambahkan metadata dan tentukan nilai contoh seperti yang disarankan. Untuk Kunci, tentukan key, dan untuk Nilai, tentukan value.

          Klik Tambahkan metadata untuk menambahkan pasangan nilai kunci lainnya. Untuk Kunci, tentukan fr, dan untuk Nilai, tentukan forwarding_rule_id.

          Kolom Metadata memungkinkan Anda meneruskan informasi tambahan 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.

          Total ukuran 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.

    10. Klik Buat ekstensi.

    gcloud

    1. Tentukan info tambahan dalam file YAML dan kaitkan dengan aturan penerusan. Gunakan nilai sampel yang diberikan.

      cat >route.yaml <<EOF
          name: route-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.path.startsWith("/extensions")'
            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"
      EOF
      

      Ganti PROJECT_ID dengan project ID.

      Kolom metadata dalam konfigurasi ekstensi memungkinkan Anda meneruskan informasi tambahan 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.

      Total ukuran 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.

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

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

    curl FORWARDING_RULE_IP/extensions
    

    Output menunjukkan bahwa traffic cocok dengan host virtual service-extensions.com dan mencapai layanan l7-ilb-backend-service2 meskipun permintaan aslinya tidak. Outputnya mirip dengan hal berikut ini:

    Page served from second backend service
    

    Untuk memvalidasi bahwa anotasi hanya menargetkan permintaan dengan awalan /extension, ulangi perintah curl tanpa awalan path.

    curl FORWARDING_RULE_IP
    

    Outputnya mirip dengan hal berikut ini:

    Page served from: l7-ilb-backend-example-1c7t
    

Batasan untuk ekstensi rute

  • Ekstensi rute tidak mendukung pemrosesan isi HTTP.
  • Respons langsung dari ekstensi ke klien tidak didukung untuk ekstensi rute. Jika server ekstensi rute Anda merespons permintaan pemrosesan dengan respons pemrosesan yang berisi respons langsung, load balancer akan mengabaikan respons pemrosesan.

Untuk batasan yang berlaku untuk semua ekstensi, lihat Batasan untuk ekstensi.

Langkah berikutnya