Menggunakan Spring Cloud Gateway

Catatan

Azure Spring Apps adalah nama baru untuk layanan Azure Spring Cloud. Meskipun layanan memiliki nama baru, Anda akan melihat nama lama di beberapa tempat untuk sementara saat kami berupaya memperbarui aset seperti cuplikan layar, video, dan diagram.

Artikel ini berlaku untuk:❌ Basic/Standard ✔️ Enterprise

Artikel ini memperlihatkan kepada Anda cara menggunakan VMware Spring Cloud Gateway dengan paket Azure Spring Apps Enterprise untuk merutekan permintaan ke aplikasi Anda.

VMware Spring Cloud Gateway adalah komponen VMware Tanzu komersial berdasarkan proyek Spring Cloud Gateway sumber terbuka. Spring Cloud Gateway menangani masalah lintas pemotongan untuk tim pengembangan API, seperti akses menyeluruh (SSO), kontrol akses, pembatasan laju, ketahanan, keamanan, dan banyak lagi. Anda dapat mempercepat pengiriman API menggunakan pola asli cloud modern, dan bahasa pemrograman apa pun yang Anda pilih untuk pengembangan API.

Spring Cloud Gateway menyertakan fitur-fitur berikut:

  • Konfigurasi perutean dinamis, independen dari aplikasi individual yang dapat diterapkan dan diubah tanpa kompilasi ulang.
  • Filter rute API komersial untuk mengangkut klaim JSON Web Token (JWT) resmi ke layanan aplikasi.
  • Otorisasi sertifikat klien.
  • Pendekatan pembatasan tarif.
  • Konfigurasi pemutus sirkuit.
  • Dukungan untuk mengakses layanan aplikasi melalui kredensial Autentikasi Dasar HTTP.

Untuk berintegrasi dengan portal API untuk VMware Tanzu, VMware Spring Cloud Gateway secara otomatis menghasilkan dokumentasi OpenAPI versi 3 setelah penambahan atau perubahan konfigurasi rute apa pun.

Prasyarat

Mengonfigurasi rute

Bagian ini menjelaskan cara menambahkan, memperbarui, dan mengelola rute API untuk aplikasi yang menggunakan Spring Cloud Gateway.

Definisi konfigurasi rute mencakup bagian-bagian berikut:

  • OpenAPI URI: URI ini mereferensikan spesifikasi OpenAPI. Anda dapat menggunakan titik akhir URI publik seperti https://petstore3.swagger.io/api/v3/openapi.json atau URI yang dibangun seperti http://<app-name>/{relative-path-to-OpenAPI-spec}, di mana <app-name> adalah nama aplikasi di Azure Spring Apps yang menyertakan definisi API. Spesifikasi OpenAPI 2.0 dan OpenAPI 3.0 didukung. Spesifikasi ditampilkan di portal API jika diaktifkan.
  • rute: Daftar aturan rute untuk mengarahkan lalu lintas ke aplikasi dan menerapkan filter.
  • protokol: Protokol backend aplikasi tempat Spring Cloud Gateway merutekan lalu lintas. Nilai protokol yang didukung adalah HTTP atau HTTPS, dan defaultnya adalah HTTP. Untuk mengamankan lalu lintas dari Spring Cloud Gateway ke aplikasi yang mendukung HTTPS, Anda perlu mengatur protokol ke HTTPS dalam konfigurasi rute Anda.
  • rute tingkat aplikasi: Ada tiga properti rute yang dapat Anda konfigurasikan di tingkat aplikasi untuk menghindari pengulangan di semua atau sebagian besar rute dalam konfigurasi rute. Aturan perutean konkret mengambil alih aturan perutean tingkat aplikasi untuk properti yang sama. Anda dapat menentukan properti berikut di tingkat aplikasi: predicates, , filtersdan ssoEnabled. Jika Anda menggunakan OpenAPI URI fitur untuk menentukan rute, satu-satunya properti perutean tingkat aplikasi yang akan didukung adalah filters.

Gunakan perintah berikut untuk membuat konfigurasi rute. Nilainya --app-name harus menjadi nama aplikasi yang dihosting di Azure Spring Apps tempat permintaan dirutekan.

az spring gateway route-config create \
    --name <route-config-name> \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --app-name <app-name> \
    --routes-file <routes-file.json>

Contoh berikut menunjukkan file JSON yang diteruskan ke --routes-file parameter dalam perintah buat:

{
   "predicates": [
      "<app-level-predicate-of-route>",
   ],
   "ssoEnabled": false,
   "filters": [
      "<app-level-filter-of-route>",
   ],
   "openApi": {
      "uri": "<OpenAPI-URI>"
   },
   "protocol": "<protocol-of-routed-app>",
   "routes": [
      {
         "title": "<title-of-route>",
         "description": "<description-of-route>",
         "predicates": [
            "<predicate-of-route>",
         ],
         "ssoEnabled": true,
         "filters": [
            "<filter-of-route>",
         ],
         "tags": [
            "<tag-of-route>"
         ],
         "order": 0
      }
   ]
}

Tabel berikut mencantumkan definisi rute. Semua properti bersifat opsional.

Properti Deskripsi
title Judul untuk diterapkan ke metode dalam dokumentasi OpenAPI yang dihasilkan.
description Deskripsi untuk diterapkan ke metode dalam dokumentasi OpenAPI yang dihasilkan.
uri URI lengkap, yang mengambil alih nama aplikasi yang dirutekan permintaan.
ssoEnabled Nilai yang menunjukkan apakah akan mengaktifkan validasi SSO. Lihat Mengonfigurasi akses menyeluruh.
tokenRelay Meneruskan token identitas pengguna yang saat ini diautentikasi ke aplikasi.
predikat Daftar predikat. Lihat Predikat yang Tersedia.
filter Daftar filter. Lihat Filter yang Tersedia.
urutan Urutan pemrosesan rute. Urutan yang lebih rendah diproses dengan prioritas yang lebih tinggi, seperti di Spring Cloud Gateway.
tag Tag klasifikasi yang diterapkan ke metode dalam dokumentasi OpenAPI yang dihasilkan.

Catatan

Karena alasan keamanan atau kompatibilitas, tidak semua filter/predikat didukung di Azure Spring Apps. Versi berikut ini masih belum didukung:

  • BasicAuth
  • JWTKey

Menggunakan rute untuk Spring Cloud Gateway

Gunakan langkah-langkah berikut untuk membuat aplikasi sampel menggunakan Spring Cloud Gateway.

  1. Gunakan perintah berikut untuk membuat aplikasi pengujian bernama test-app di Azure Spring Apps:

    az spring app create \
        name test-app \
        resource-group <resource-group-name> \
        service <Azure-Spring-Apps-instance-name>
    
  2. Tetapkan titik akhir publik ke gateway untuk mengaksesnya.

    Untuk melihat status berjalan dan sumber daya yang diberikan ke Spring Cloud Gateway, buka instans Azure Spring Apps Anda di portal Azure, pilih bagian Spring Cloud Gateway, lalu pilih Gambaran Umum.

    Untuk menetapkan titik akhir publik, pilih Ya di samping Tetapkan titik akhir. URL muncul dalam beberapa menit. Simpan URL untuk digunakan nanti.

    Screenshot of Azure portal Azure Spring Apps overview page with 'Assign endpoint' highlighted.

    Anda juga dapat menggunakan Azure CLI untuk menetapkan titik akhir. Gunakan perintah berikut untuk menetapkan titik akhir.

    az spring gateway update \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --assign-endpoint true
    
  3. Buat aturan untuk mengakses titik akhir pemeriksaan kesehatan aplikasi pengujian melalui Spring Cloud Gateway.

    Simpan konten berikut ke file test-api.json . Konfigurasi ini mencakup filter RateLimit, yang memungkinkan 20 permintaan setiap 10 detik, dan filter RewritePath, yang memungkinkan titik akhir permintaan mencapai titik akhir pemeriksaan kesehatan Spring Boot standar.

    {
      "protocol": "HTTP",
      "routes": [
        {
          "title": "Test API",
          "description": "Retrieve a health check from our application",
          "predicates": [
            "Path=/test/api/healthcheck",
            "Method=GET"
          ],
          "filters": [
            "RateLimit=20,10s",
            "RewritePath=/api/healthcheck,/actuator/health"
          ],
          "tags": [
            "test"
          ]
        }
      ]
    }
    

    Kemudian, gunakan perintah berikut untuk menerapkan aturan ke aplikasi test-app:

    az spring gateway route-config create \
        --name test-api-routes \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --app-name test-app \
        --routes-file test-api.json
    

    Anda juga dapat melihat rute di portal, seperti yang ditunjukkan pada cuplikan layar berikut:

    Screenshot of Azure portal Azure Spring Apps Spring Cloud Gateway page showing 'Routing rules' pane.

  4. Gunakan perintah berikut untuk mengakses test health check API melalui titik akhir gateway:

    curl https://<endpoint-url>/test/api/healthcheck
    
  5. Gunakan perintah berikut untuk mengkueri aturan perutean:

    az spring gateway route-config show \
        --name test-api-routes \
        --query '{appResourceId:properties.appResourceId, routes:properties.routes}'
    
    az spring gateway route-config list \
        --query '[].{name:name, appResourceId:properties.appResourceId, routes:properties.routes}'
    

Menggunakan filter

Proyek Spring Cloud Gateway sumber terbuka mencakup banyak filter bawaan untuk digunakan dalam rute Gateway. Spring Cloud Gateway menyediakan banyak filter kustom selain filter yang disertakan dalam proyek OSS.

Contoh berikut menunjukkan cara menerapkan AddRequestHeadersIfNotPresent filter ke rute:

[
  {
    "predicates": [
      "Path=/api/**",
      "Method=GET"
    ],
    "filters": [
      "AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
    ]
  }
]

Kemudian, terapkan definisi rute menggunakan perintah Azure CLI berikut:

az spring gateway route-config create \
    --name <route-config-name> \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --app <app-name>
    --routes-file <json-file-with-routes>

Untuk informasi selengkapnya tentang filter rute yang tersedia, lihat Cara menggunakan Filter Rute VMware Spring Cloud Gateway dengan paket Azure Spring Apps Enterprise.

Langkah berikutnya