Cloud-native Gateway dari Microservices Engine (MSE) adalah layanan terkelola yang berfungsi sebagai ingress dan menyediakan kemampuan manajemen trafik dalam skala besar. Cloud-native Gateway mendukung berbagai sumber layanan seperti Container Service for Kubernetes (ACK), MSE Nacos, MSE ZooKeeper, registri Enterprise Distributed Application Service (EDAS), registri Serverless App Engine (SAE), alamat tetap, dan Domain Name System (DNS). Cloud-native Gateway memberikan solusi terpadu untuk mendukung versi layanan dan mengimplementasikan rilis canary. Topik ini menjelaskan cara mengimplementasikan strategi rilis layanan yang berbeda dengan menggunakan kluster ACK dan instance Nacos untuk penemuan layanan.
Prasyarat
Anda sudah memahami mekanisme deploy blue-green, pengujian A/B, dan rilis canary. Untuk informasi lebih lanjut, lihat Strategi rilis layanan.
Kluster ACK dikelola telah dibuat. Untuk informasi lebih lanjut, lihat Buat kluster ACK dikelola.
Sebuah gateway cloud-native MSE telah dibuat. Untuk informasi lebih lanjut, lihat Buat gateway cloud-native.
Sebuah mesin Nacos telah dibuat. Untuk informasi lebih lanjut, lihat Buat mesin Nacos.
ACK
Dalam contoh ini, kluster ACK digunakan untuk penemuan layanan. Layanan backend didaftarkan ke CoreDNS menggunakan API layanan berbasis anotasi. Layanan backend menyediakan Operasi API yang digunakan untuk memeriksa versi yang digunakan. Jalur permintaan adalah /version dan versi yang digunakan adalah v1. Gateway cloud-native diintegrasikan dengan kluster ACK dan dapat memperoleh informasi layanan dari kluster ACK secara real-time. Dengan cara ini, gateway cloud-native dapat mengekspos layanan backend kepada pengguna eksternal.

Deploy aplikasi
Masuk ke Konsol ACK. Gunakan kode YAML berikut untuk menerapkan aplikasi dengan versi v1.
Untuk informasi lebih lanjut tentang cara menerapkan aplikasi, lihat Buat aplikasi tanpa status menggunakan Deployment.
apiVersion: v1 kind: Service metadata: name: httpbin spec: ports: - port: 8080 protocol: TCP selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin-v1 spec: replicas: 3 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: containers: - image: specialyang/spring-cloud-httpbin-k8s:v1 imagePullPolicy: Always name: spring-cloud-httpbin-k8s ports: - containerPort: 8080Masuk ke Konsol MSE. Pada halaman Overview gateway yang diinginkan, klik Routes di panel navigasi di sebelah kiri. Lalu, klik tab Source. Klik Add Source untuk menambahkan layanan kontainer sebagai sumber layanan.

Di panel navigasi di sebelah kiri, klik Routes. Pilih tab Service. Klik Tambah Layanan. Di panel Tambah Layanan, tambahkan layanan httpbin yang ingin Anda ekspos ke gateway cloud-native.
Tambahkan versi v1 ke layanan httpbin.
Untuk informasi lebih lanjut tentang cara menambahkan versi layanan ke gateway cloud-native, lihat Kelola versi layanan.
CatatanAnda harus memfilter node v1 berdasarkan tag untuk v1. Saat ini, hanya v1 yang diterapkan. Oleh karena itu, node v1 mencakup 100% dari node instance.

Pada halaman Pengaturan Rute, buat rute untuk layanan untuk mengekspos layanan kepada pengguna eksternal. Rute Operasi API yang digunakan untuk mengekspos layanan httpbin adalah /version. Permintaan diteruskan ke versi v1 dari layanan httpbin.
Jalankan perintah berikut untuk mengirim permintaan uji:
for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo ""; doneOutput perintah:
version: v1 version: v1 version: v1 version: v1 version: v1 version: v1 version: v1 version: v1 version: v1 version: v1
Lakukan deploy blue-green
Dalam deploy blue-green, versi baru dari layanan harus menggunakan jumlah sumber daya yang sama dengan versi saat ini. Setelah deploy blue-green selesai, semua trafik dialihkan ke versi baru.

Terapkan versi v2 untuk layanan httpbin menggunakan sumber daya API berbasis anotasi dari ACK. Jumlah replika adalah tiga.
apiVersion: apps/v1 kind: Deployment metadata: name: httpbin-v2 spec: replicas: 3 selector: matchLabels: app: httpbin version: v2 template: metadata: labels: app: httpbin version: v2 spec: containers: - image: specialyang/spring-cloud-httpbin-k8s:v2 imagePullPolicy: Always name: spring-cloud-httpbin-k8s ports: - containerPort: 8080Tambahkan versi v2 ke layanan httpbin.
Untuk informasi lebih lanjut tentang cara menambahkan versi layanan ke gateway cloud-native, lihat Kelola versi layanan.
CatatanAnda harus memfilter node v2 berdasarkan tag untuk v2. Saat ini, jumlah node v1 sama dengan jumlah node v2 dalam sebuah instance. Oleh karena itu, node v1 dan v2 masing-masing mencakup 50% dari node instance.

Ubah layanan dalam rute yang dibuat untuk beralih trafik dari v1 ke v2 dalam deploy blue-green.
Untuk informasi lebih lanjut tentang cara memodifikasi aturan routing untuk gateway cloud-native, lihat Modifikasi aturan routing.

Jalankan perintah berikut untuk mengirim permintaan uji:
for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo ""; doneOutput perintah:
version: v2 version: v2 version: v2 version: v2 version: v2 version: v2 version: v2 version: v2 version: v2 version: v2
Trafik yang mengakses sumber daya API menggunakan jalur permintaan /version telah beralih dari v1 ke v2.
Lakukan pengujian A/B
Pengujian A/B mengarahkan trafik ke versi baru layanan berdasarkan metadata permintaan pengguna. Pengujian A/B secara dinamis mengarahkan trafik berdasarkan isi permintaan. Dalam contoh ini, versi baru hanya dapat diakses oleh permintaan yang memiliki nilai User-Agent Android, dan permintaan lainnya dikirim ke versi asli.

Versi v1 dan v2 dari layanan httpbin masih digunakan. Selain itu, dua aturan routing perlu dibuat.
Permintaan yang cocok dengan jalur /version diarahkan ke versi v1.
Permintaan yang cocok dengan jalur /version dan berisi Android di header User-Agent diarahkan ke versi v2.
CatatanRute versi-v2 harus ditambahkan dengan header permintaan yang digunakan untuk pencocokan.
Jalankan perintah berikut untuk mengirim permintaan uji yang tidak berisi Android di header User-Agent:
curl ${GATEWAY_EXTERNAL_IP}/versionOutput perintah:
version: v1Jalankan perintah berikut untuk mengirim permintaan uji yang berisi Android di header User-Agent:
curl -H "User-Agent: Mozilla/5.0 (Linux; Android 4.0.3)" ${GATEWAY_EXTERNAL_IP}/versionOutput perintah:
version: v2
Permintaan didistribusikan ke versi layanan yang berbeda berdasarkan sistem operasi dari mana permintaan dikirim.
Lakukan rilis canary
Fitur rilis canary memungkinkan sejumlah kecil trafik diarahkan ke versi baru layanan. Setelah versi baru diverifikasi, lebih banyak trafik secara bertahap diarahkan ke versi baru hingga semua trafik diarahkan ke versi baru. Dalam proses ini, versi baru diperluas dan versi asli diperkecil untuk memaksimalkan pemanfaatan sumber daya.

Dalam rilis canary, jumlah replika di versi baru tidak perlu konsisten dengan versi asli. Satu-satunya persyaratan adalah bahwa sumber daya di versi baru harus cukup untuk menangani trafik canary ke versi tersebut. Dalam kasus ini, jumlah replika di versi baru diatur menjadi 1. Anda dapat melihat distribusi node versi di bagian Versi Layanan halaman Layanan.

Buat rute untuk meneruskan trafik ke versi baru dan asli layanan berdasarkan bobot node.
Dalam proses ini, Anda harus mengonfigurasi versi v1 dan v2 untuk layanan httpbin dan menentukan bobot berdasarkan mana trafik diarahkan. Sebagai contoh, Anda dapat memilih Label Routing untuk Layanan Tujuan dan mengatur bobot versi v1 menjadi 80% dan bobot versi v2 menjadi 20%.
Jalankan perintah berikut untuk mengirim permintaan uji:
for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo ""; doneOutput perintah:
version: v1 version: v1 version: v1 version: v1 version: v1 version: v2 version: v1 version: v2 version: v1 version: v1
Dua dari sepuluh permintaan mengakses versi v2. Rasio distribusi trafik ini adalah rasio yang diharapkan.
Dalam skenario bisnis nyata, Anda dapat secara bertahap meningkatkan persentase trafik untuk versi baru setelah versi tersebut diverifikasi. Saat Anda meningkatkan persentase trafik, Anda harus memperluas versi baru dan memperkecil versi asli.
Nacos
Dalam contoh ini, layanan backend menyediakan Operasi API yang digunakan untuk memeriksa versi yang digunakan. Jalur permintaan adalah /version dan versi yang digunakan adalah v1. Gateway cloud-native diintegrasikan dengan instance MSE Nacos dan dapat memperoleh informasi layanan dari instance MSE Nacos secara real-time. Dengan cara ini, gateway cloud-native dapat mengekspos layanan backend kepada pengguna eksternal.

Deploy aplikasi
Masuk ke Konsol ACK. Gunakan kode YAML berikut untuk menerapkan aplikasi dengan versi v1.
Untuk informasi lebih lanjut tentang cara menerapkan aplikasi, lihat Buat aplikasi tanpa status menggunakan Deployment.
CatatanVariabel
${NACOS_SERVER_ADDRESS}dalam file YAML harus diganti dengan alamat instance MSE Nacos Anda. Jika instance MSE Nacos Anda berada di VPC yang sama dengan gateway, Anda dapat mengganti variabel tersebut dengan titik akhir internal instance. Jika tidak, ganti variabel tersebut dengan titik akhir publik instance.Di ACK, data dalam label pod dapat dianggap sebagai metadata node. Di Nacos, metadata node ditentukan oleh data yang dibawa saat layanan didaftarkan. Dalam kerangka Spring Cloud, Anda dapat menggunakan variabel lingkungan
spring.cloud.nacos.discovery.metadata.xxxuntuk menambahkan metadata untuk node. Dalam contoh ini,versiondigunakan untuk membedakan node yang memiliki versi berbeda. Dalam hal ini, aturspring.cloud.nacos.discovery.metadata.versionke v1 untuk aplikasi.
apiVersion: apps/v1 kind: Deployment metadata: name: httpbin-v1 spec: replicas: 3 selector: matchLabels: app: httpbin template: metadata: labels: app: httpbin spec: containers: - image: specialyang/spring-cloud-httpbin-nacos:v1 imagePullPolicy: Always name: spring-cloud-httpbin-nacos ports: - containerPort: 8080 env: - name: spring.cloud.nacos.discovery.server-addr value: ${NACOS_SERVER_ADDRESS} - name: spring.cloud.nacos.discovery.metadata.version value: v1Masuk ke Konsol MSE. Pada halaman Overview gateway yang diinginkan, klik Routes di panel navigasi di sebelah kiri. Lalu, klik tab Source untuk menambahkan instance MSE Nacos sebagai sumber layanan.
Di panel navigasi di sebelah kiri, klik Routes. Lalu, klik tab Service untuk mengimpor layanan httpbin yang ingin Anda ekspos ke gateway cloud-native, dan pilih MSE Nacos sebagai sumber layanan.
Tambahkan versi v1 ke layanan httpbin.
CatatanAnda harus memfilter node v1 berdasarkan tag untuk v1. Saat ini, hanya v1 yang diterapkan. Oleh karena itu, node v1 mencakup 100% dari node instance.

Pada halaman Pengaturan Rute, buat rute untuk layanan untuk mengekspos layanan kepada pengguna eksternal. Rute Operasi API yang digunakan untuk mengekspos layanan httpbin adalah /version. Permintaan diteruskan ke versi v1 dari layanan httpbin.
Jalankan perintah berikut untuk mengirim permintaan uji:
for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo ""; doneOutput perintah:
version: v1 version: v1 version: v1 version: v1 version: v1 version: v1 version: v1 version: v1 version: v1 version: v1
Lakukan deploy blue-green
Dalam deploy blue-green, versi baru layanan harus menggunakan jumlah sumber daya yang sama dengan versi saat ini. Setelah deploy blue-green selesai, trafik dialihkan ke versi baru.

Terapkan versi baru v2 dari layanan httpbin.
CatatanProsedur untuk mendaftarkan aplikasi dengan instance Nacos sama dengan prosedur untuk mendaftarkan layanan dengan kluster ACK. Tambahkan konfigurasi
spring.cloud.nacos.discovery.metadata.version=v2untuk aplikasi. Saat aplikasi dimulai, aplikasi secara otomatis didaftarkan ke instance Nacos dan membawa metadata kustom. Gateway cloud-native dapat menggunakan metadata tersebut untuk membedakan node dari versi yang berbeda.apiVersion: apps/v1 kind: Deployment metadata: name: httpbin-v2 spec: replicas: 3 selector: matchLabels: app: httpbin template: metadata: labels: app: httpbin spec: containers: - image: specialyang/spring-cloud-httpbin-nacos:v2 imagePullPolicy: Always name: spring-cloud-httpbin-nacos ports: - containerPort: 8080 env: - name: spring.cloud.nacos.discovery.server-addr value: ${NACOS_SERVER_ADDRESS} - name: spring.cloud.nacos.discovery.metadata.version value: v2Tambahkan versi v2 ke layanan httpbin.
Untuk informasi lebih lanjut tentang cara menambahkan versi layanan ke gateway cloud-native, lihat Kelola versi layanan.
CatatanAnda harus memfilter node v2 berdasarkan tag untuk v2. Saat ini, jumlah node v1 sama dengan jumlah node v2 dalam sebuah instance. Oleh karena itu, node v1 dan v2 masing-masing mencakup 50% dari node instance.

Ubah layanan tujuan dalam rute yang dibuat untuk beralih trafik dari v1 ke v2 dalam deploy blue-green.
Untuk informasi lebih lanjut tentang cara memodifikasi aturan routing untuk gateway cloud-native, lihat Modifikasi aturan routing.
Jalankan perintah berikut untuk mengirim permintaan uji:
for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo ""; doneOutput perintah:
version: v2 version: v2 version: v2 version: v2 version: v2 version: v2 version: v2 version: v2 version: v2 version: v2
Trafik yang mengakses sumber daya API menggunakan jalur permintaan /version telah beralih dari v1 ke v2.
Lakukan pengujian A/B
Pengujian A/B mengarahkan trafik ke versi baru layanan berdasarkan metadata permintaan pengguna. Pengujian A/B secara dinamis mengarahkan trafik berdasarkan isi permintaan. Dalam contoh ini, versi baru hanya dapat diakses oleh permintaan yang memiliki nilai User-Agent Android, dan permintaan lainnya dikirim ke versi asli.

Versi v1 dan v2 dari layanan httpbin masih digunakan. Selain itu, dua aturan routing perlu dibuat.
Permintaan yang cocok dengan jalur /version diarahkan ke versi v1.
Permintaan yang cocok dengan jalur /version dan berisi Android di header User-Agent diarahkan ke versi v2.
CatatanRute versi-v2 harus ditambahkan dengan header permintaan yang digunakan untuk pencocokan.
Jalankan perintah berikut untuk mengirim permintaan uji yang tidak berisi Android di header User-Agent:
curl ${GATEWAY_EXTERNAL_IP}/versionOutput perintah:
version: v1Jalankan perintah berikut untuk mengirim permintaan uji yang berisi Android di header User-Agent:
curl -H "User-Agent: Mozilla/5.0 (Linux; Android 4.0.3)" ${GATEWAY_EXTERNAL_IP}/versionOutput perintah:
version: v2
Permintaan didistribusikan ke versi layanan yang berbeda berdasarkan sistem operasi dari mana permintaan dikirim.
Lakukan rilis canary
Fitur rilis canary memungkinkan sejumlah kecil trafik diarahkan ke versi baru layanan. Setelah versi baru diverifikasi, lebih banyak trafik secara bertahap diarahkan ke versi baru hingga semua trafik diarahkan ke versi baru. Dalam proses ini, versi baru diperluas dan versi asli diperkecil untuk memaksimalkan pemanfaatan sumber daya.

Dalam rilis canary, jumlah replika di versi baru tidak perlu konsisten dengan versi asli. Satu-satunya persyaratan adalah bahwa sumber daya di versi baru harus cukup untuk menangani trafik canary ke versi tersebut. Dalam kasus ini, jumlah replika di versi baru diatur menjadi 1. Anda dapat melihat distribusi node versi di bagian Versi Layanan halaman Layanan.

Buat rute untuk meneruskan trafik ke versi baru dan asli layanan berdasarkan bobot node.
Dalam proses ini, Anda harus mengonfigurasi versi v1 dan v2 untuk layanan httpbin dan menentukan bobot berdasarkan mana trafik diarahkan. Sebagai contoh, Anda dapat memilih Label Routing untuk Layanan Tujuan dan mengatur bobot versi v1 menjadi 80% dan bobot versi v2 menjadi 20%.
Jalankan perintah berikut untuk mengirim permintaan uji:
for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo ""; doneOutput perintah:
version: v1 version: v1 version: v1 version: v1 version: v1 version: v2 version: v1 version: v2 version: v1 version: v1
Dua dari sepuluh permintaan mengakses versi v2. Rasio distribusi trafik ini adalah rasio yang diharapkan.
Dalam skenario bisnis nyata, Anda dapat secara bertahap meningkatkan persentase trafik untuk versi baru setelah versi tersebut diverifikasi. Saat Anda meningkatkan persentase trafik, Anda harus memperluas versi baru dan memperkecil versi asli.