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
- Instans layanan paket Azure Spring Apps Enterprise yang sudah disediakan dengan Spring Cloud Gateway diaktifkan. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat dan menyebarkan aplikasi ke Azure Spring Apps menggunakan paket Enterprise.
- Azure CLI versi 2.0.67 atau yang lebih baru. Gunakan perintah berikut untuk menginstal ekstensi Azure Spring Apps:
az extension add --name spring
.
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 sepertihttp://<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
atauHTTPS
, dan defaultnya adalahHTTP
. Untuk mengamankan lalu lintas dari Spring Cloud Gateway ke aplikasi yang mendukung HTTPS, Anda perlu mengatur protokol keHTTPS
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
, ,filters
danssoEnabled
. Jika Anda menggunakanOpenAPI URI
fitur untuk menentukan rute, satu-satunya properti perutean tingkat aplikasi yang akan didukung adalahfilters
.
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.
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>
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.
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
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:
Gunakan perintah berikut untuk mengakses
test health check
API melalui titik akhir gateway:curl https://<endpoint-url>/test/api/healthcheck
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.