Spring Cloud Gateway pada Kubernetes tidak dapat menemukan layanan kontainer secara native, sehingga menghasilkan kinerja yang lebih rendah dibandingkan gateway NGINX Ingress serta memerlukan pengembangan kustom untuk observabilitas dan keamanan. Dalam skenario migrasi cloud dan cloud hibrida, hal ini sering menghasilkan arsitektur dua lapis—Ingress ditambah Spring Cloud Gateway—yang menambah hop jaringan, konsumsi sumber daya, serta biaya operasi & pemeliharaan (O&M).
Gateway cloud-native Microservices Engine (MSE) menyatukan gateway trafik dan gateway layanan mikro dalam satu lapisan berkinerja tinggi, terintegrasi erat, dan siap pakai, sehingga secara signifikan mengurangi biaya layanan. Panduan ini menjelaskan lima langkah untuk memigrasikan rute, sumber layanan, autentikasi, dan trafik dari Spring Cloud Gateway Anda ke gateway cloud-native MSE.
Pemetaan Spring Cloud Gateway ke gateway cloud-native
Sebelum memulai, tinjau cara konsep inti di Spring Cloud Gateway dipetakan ke gateway cloud-native:
| Spring Cloud Gateway | Cloud-native gateway | Catatan |
|---|---|---|
| Registri Nacos | Sumber layanan | Gateway cloud-native menarik daftar layanan dari sumber layanan yang dikonfigurasi (Nacos, ACK, EDAS, atau SAE). |
spring.cloud.gateway.routes | Aturan routing | Definisikan rute di Konsol MSE, bukan dalam file YAML. Setiap rute memetakan predikat path ke layanan backend. |
Predikat rute (Path=) | Kondisi pencocokan rute | Mendukung pencocokan path. |
uri: lb://service-a | Layanan backend + versi | Pilih layanan yang diimpor dari sumber layanan, lalu konfigurasikan versi targetnya. |
| Aturan load balancing Ribbon | Kebijakan load balancing | Konfigurasikan melalui pengaturan layanan di Konsol MSE. |
| Pemutus sirkuit Hystrix | Kebijakan tingkat rute | Gateway cloud-native menyediakan kebijakan throttling, timeout, dan lainnya per rute. |
AddResponseHeader filter | Kebijakan pengaturan Header | Konfigurasikan sebagai kebijakan tingkat rute di Konsol MSE. |
| Filter autentikasi kustom | Autentikasi JWT / OIDC / IDaaS / kustom | Plugin autentikasi menggantikan kode filter kustom. |
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat gateway cloud-native di Konsol MSE. Lihat Buat gateway cloud-native
Memahami konsep gateway cloud-native. Lihat Pelajari lebih lanjut tentang gateway cloud-native
Membuat backup file konfigurasi Spring Cloud Gateway saat ini (
application.yml,bootstrap.yml, dan konfigurasi eksternal apa pun di Nacos atau Git)
Langkah 1: Identifikasi dan konfigurasikan sumber layanan
Gateway cloud-native memerlukan sumber layanan untuk menemukan layanan backend Anda. Bergantung pada pengaturan Anda, Anda mungkin sudah memiliki sumber yang kompatibel atau perlu mengonfigurasi yang baru.
Kapan melewati langkah ini
Lewati ke Langkah 2 jika salah satu kondisi berikut berlaku:
Anda menggunakan Container Service for Kubernetes (ACK) dengan penemuan layanan Kubernetes
Anda menggunakan instans MSE Nacos yang telah ditingkatkan ke versi yang mendukung Mesh Configuration Protocol (MCP)
Anda tidak menggunakan mekanisme penemuan layanan dan mengandalkan nama domain atau alamat IP tetap
Siapkan sumber layanan berdasarkan jenis registri
Pilih opsi yang sesuai dengan registri Anda saat ini:
Instans MSE Nacos
Beli instans MSE Nacos. Lihat Buat engine Nacos.
Daftarkan layanan Anda ke instans MSE Nacos dengan memperbarui konfigurasi atau kode aplikasi Anda. Lihat Dokumentasi Nacos Java SDK.
(Opsional) Untuk aplikasi Java, gunakan agen Microservices Governance MSE untuk mengotomatiskan migrasi pendaftaran. Lihat Solusi migrasi berbasis MSE Sync.
Registri Enterprise Distributed Application Service (EDAS)
Tambahkan registri EDAS Anda sebagai sumber layanan secara langsung. Lihat Tambahkan sumber layanan.
Registri Serverless App Engine (SAE)
Tambahkan registri SAE Anda sebagai sumber layanan secara langsung. Lihat Tambahkan sumber layanan.
Verifikasi sumber layanan
Setelah menambahkan sumber layanan, buka Konsol MSE dan navigasikan ke gateway cloud-native Anda. Pastikan sumber layanan muncul dalam daftar sumber layanan dan berfungsi dengan benar.
Langkah 2: Migrasi konfigurasi routing dan layanan
Terjemahkan konfigurasi YAML Spring Cloud Gateway Anda ke pengaturan gateway cloud-native di Konsol MSE. Contoh berikut menunjukkan konfigurasi tipikal dan cara setiap bagian dipetakan ke konsol.
Contoh konfigurasi Spring Cloud Gateway
Pengikatan registri:
spring:
application:
name: gateway-demo
cloud:
nacos:
discovery:
server-addr: nacos-server:8848
config:
enabled: falseRute dan load balancing:
spring:
cloud:
gateway:
default-filters:
- AddResponseHeader=X-Response-Default-Foo, Default-Bar
routes:
- id: websocket_test
uri: ws://localhost:9000
order: 9000
predicates:
- Path=/echo
- id: default_path_to_service-a
uri: lb://service-a
order: 10000
predicates:
- Path=/sleep
service-a:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
ConnectTimeout: 1000
ReadTimeout: 8000
MaxAutoRetries: 3
MaxAutoRetriesNextServer: 2
MaxTotalConnections: 20000
MaxConnectionsPerHost: 5000
hystrix:
command:
service-a:
execution:
isolation:
thread:
timeoutInMilliseconds: 60000
strategy: SEMAPHORE
semaphore:
maxConcurrentRequests: 60000Migrasi setiap bagian konfigurasi
Lakukan operasi berikut di Konsol MSE:
1. Ganti pengikatan registri dengan sumber layanan
Blok spring.cloud.nacos.discovery digantikan oleh sumber layanan yang Anda konfigurasi di Langkah 1. Tidak diperlukan tindakan tambahan.
2. Impor layanan backend
Impor setiap layanan backend yang dirujuk dalam rute Anda (misalnya, service-a).
Di Konsol MSE, buka gateway cloud-native Anda dan impor layanan dari sumber layanan Anda. Lihat Tambahkan layanan.
Konfigurasikan versi yang sesuai untuk setiap layanan yang diimpor. Lihat Kelola versi layanan.
Pengaturan load balancing Ribbon dan pemutus sirkuit Hystrix (WeightedResponseTimeRule, ConnectTimeout, ReadTimeout, batas retry dan konkurensi) dipetakan ke kebijakan layanan dan rute gateway cloud-native. Konfigurasikan di konsol.
3. Buat aturan routing
Terjemahkan setiap entri rute menjadi aturan routing gateway cloud-native. Lihat Buat aturan routing.
Untuk contoh di atas, buat dua aturan routing:
| Rute Spring Cloud Gateway | Rute gateway cloud-native |
|---|---|
websocket_test: path /echo -> ws://localhost:9000 | Pencocokan path: /echo, backend: layanan WebSocket di localhost:9000 |
default_path_to_service-a: path /sleep -> lb://service-a | Pencocokan path: /sleep, backend: service-a (diimpor dari sumber layanan) |
4. Konfigurasikan kebijakan tingkat rute
default-filters di Spring Cloud Gateway (seperti AddResponseHeader) dipetakan ke kebijakan tingkat rute pada gateway cloud-native. Konfigurasikan kebijakan berikut sesuai kebutuhan:
Verifikasi konfigurasi routing
Setelah membuat aturan routing, kirim permintaan uji ke titik akhir gateway cloud-native untuk setiap rute yang dimigrasikan. Pastikan permintaan mencapai layanan backend yang benar dan mengembalikan respons yang diharapkan.
# Uji rute WebSocket /echo
curl -v http://<cloud-native-gateway-endpoint>/echo
# Uji rute /sleep
curl -v http://<cloud-native-gateway-endpoint>/sleepLangkah 3: Siapkan autentikasi
Jika Spring Cloud Gateway Anda menggunakan filter autentikasi kustom, gantilah dengan metode autentikasi gateway cloud-native. Pilih metode yang sesuai dengan penyedia identitas Anda:
Verifikasi autentikasi
Setelah mengonfigurasi autentikasi, kirim permintaan tanpa kredensial yang valid dan pastikan gateway mengembalikan respons 401 Unauthorized. Kemudian kirim permintaan dengan kredensial yang valid dan pastikan permintaan tersebut mencapai layanan backend.
# Harapkan respons 401 Unauthorized
curl -v http://<cloud-native-gateway-endpoint>/sleep
# Harapkan respons 200 OK dengan token yang valid
curl -v -H "Authorization: Bearer <valid-token>" http://<cloud-native-gateway-endpoint>/sleepLangkah 4: Siapkan observabilitas
Gateway cloud-native menyediakan pemantauan, peringatan, pengiriman log, dan tracing—menggantikan integrasi kustom yang biasanya diperlukan dengan Spring Cloud Gateway. Aktifkan kemampuan yang sesuai dengan kebutuhan Anda:
Verifikasi observabilitas
Setelah mengaktifkan pemantauan dan pengiriman log, hasilkan trafik uji. Pastikan metrik muncul di dasbor gateway dan log mencapai tujuan yang ditentukan.
Langkah 5: Migrasi trafik
Dengan aturan routing, autentikasi, dan observabilitas yang telah siap, migrasikan trafik produksi dari Spring Cloud Gateway ke gateway cloud-native. Empat strategi migrasi tersedia, masing-masing dengan keseimbangan biaya dan risiko yang berbeda:
| Strategi | Biaya | Risiko | Deskripsi |
|---|---|---|---|
| Migrasi iteratif | Tinggi | Rendah | Ubah URL akses beberapa layanan sekaligus di sisi pemanggil atau klien. Validasi setiap batch sebelum melanjutkan. |
| Migrasi bertahap di sisi proxy | Sedang | Sedang | Kelompokkan layanan berdasarkan jenis (inti vs. non-inti) di proxy asli. Migrasikan layanan non-inti terlebih dahulu, lalu layanan inti. |
| Migrasi penuh berbasis DNS | Rendah | Tinggi | Arahkan nama domain asli langsung ke URL akses gateway cloud-native. Seluruh trafik beralih sekaligus. |
| Migrasi prosedural (direkomendasikan) | Relatif rendah | Relatif rendah | Kombinasi terstruktur dari strategi di atas. Lihat prosedur yang direkomendasikan di bawah. |
Prosedur yang direkomendasikan
Buat backup konfigurasi Anda. Pastikan Anda memiliki salinan semua file konfigurasi Spring Cloud Gateway (
application.yml,bootstrap.yml, dan konfigurasi eksternal apa pun). Backup ini menjadi garis dasar rollback Anda.Uji dengan batch kecil. Migrasikan beberapa layanan non-kritis ke gateway cloud-native dan validasi routing, autentikasi, serta perilaku responsnya.
Migrasikan layanan inti secara berurutan. Setelah batch uji lolos validasi, migrasikan layanan inti satu per satu. Pantau laju error dan latensi di dasbor gateway setelah setiap layanan dimigrasikan.
Jalankan uji stres. Sebelum mengalihkan seluruh trafik, jalankan uji stres terhadap gateway cloud-native untuk memastikan gateway mampu menangani throughput yang diharapkan.
Lakukan migrasi penuh berbasis DNS. Asosiasikan nama domain asli Anda dengan URL akses gateway cloud-native untuk mengalihkan seluruh trafik yang tersisa.
Pertahankan gateway asli tetap berjalan. Pertahankan penerapan Spring Cloud Gateway selama periode rollback. Jika terjadi masalah, kembalikan rekaman DNS agar mengarah kembali ke gateway asli.
Rollback
Jika Anda mengalami masalah setelah mengalihkan trafik, kembalikan rekaman DNS agar mengarah kembali ke Spring Cloud Gateway. Karena konfigurasi asli dan pendaftaran layanan tetap utuh selama migrasi, rollback hanya memerlukan perubahan DNS.