Integrasikan tata kelola lalu lintas Microservices Engine (MSE) dengan pipeline CI/CD Jenkins untuk mengotomatiskan rilis canary bagi aplikasi layanan mikro. Alur kerja ini menggabungkan build, penerapan, verifikasi, dan promosi (atau rollback) ke dalam satu pipeline, sehingga mengurangi risiko penerapan sekaligus mempertahankan kecepatan rilis.
Cara kerja
Pipeline Jenkins mengotomatiskan seluruh siklus hidup rilis:
Build — Kemas kode sumber dan bangun gambar kontainer.
Deploy canary — Terapkan versi baru berdampingan dengan versi dasar yang stabil.
Route canary traffic — MSE mengarahkan sebagian trafik ke canary berdasarkan header, cookie, atau parameter permintaan yang Anda tentukan.
Verify — Pastikan perilaku canary sesuai harapan.
Promote or roll back — Promosikan canary ke produksi penuh jika lolos verifikasi, atau kembalikan ke versi dasar.
Diagram berikut menggambarkan arsitektur tersebut:
MSE mendukung tiga strategi routing canary:
| Strategi | Deskripsi |
|---|---|
| Berdasarkan persentase | Arahkan persentase tetap trafik ke canary. |
| Berdasarkan aturan | Arahkan trafik yang sesuai dengan header, cookie, atau parameter permintaan tertentu. |
| Berdasarkan tag | Tandai trafik canary dengan header bawaan seperti x-mse-tag: gray dan arahkan melalui seluruh rantai panggilan. |
Tutorial ini menggunakan routing berbasis tag dengan header x-mse-tag: gray.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengaktifkan Microservices Governance untuk aplikasi layanan mikro di kluster ACK
Menyebarkan Jenkins di kluster ACK dengan izin untuk mendorong gambar ke registri kontainer Anda
Menyebarkan aplikasi demo yang dijelaskan pada bagian berikutnya, atau menyiapkan aplikasi layanan mikro Anda sendiri
Sebarkan aplikasi demo
Tutorial ini menggunakan lima aplikasi yang diterapkan di kluster ACK:
| Aplikasi | Peran | Port kontainer |
|---|---|---|
| spring-cloud-zuul | Gerbang masuk (ingress gateway) | 20000 |
| spring-cloud-a | Aplikasi A | 20001 |
| spring-cloud-b | Aplikasi B | 8080 |
| spring-cloud-c | Aplikasi C | 20003 |
| nacos-server | Registrasi layanan (mode standalone) | -- |
Rantai panggilan adalah: spring-cloud-zuul -> spring-cloud-a -> spring-cloud-b -> spring-cloud-c.
Gerbang spring-cloud-zuul menangani trafik normal sebesar 100 QPS dan tambahan 10 QPS trafik canary. Permintaan dengan header x-mse-tag: gray secara otomatis diarahkan ke node downstream yang ditandai dengan gray. Anda dapat mengganti gray dengan nilai tag kustom apa pun sesuai kebutuhan Anda.
Langkah 1: Buat penerapan (deployment)
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan dan klik nama kluster Anda.
Di panel navigasi kiri, pilih Workloads > Deployments.
Klik Create from YAML dan terapkan file YAML berikut.
spring-cloud-zuul (gerbang masuk)
spring-cloud-a (versi dasar)
spring-cloud-b (versi dasar)
spring-cloud-c (versi dasar)
nacos-server (registrasi layanan) dan layanan SLB
Langkah 2: Verifikasi penerapan
Setelah semua aplikasi diterapkan, buka Konsol MSE dan periksa trafik untuk Aplikasi A. Seluruh trafik harus mengalir ke node untagged, tanpa trafik pada node canary.
Buat jalur (lane) untuk routing canary
Jalur menentukan cara MSE mengarahkan trafik canary melalui rantai panggilan layanan mikro. Pertama-tama, siapkan grup jalur, lalu buat jalur dengan aturan routing.
Langkah 1: Buat grup jalur
Masuk ke Konsol MSE dan pilih Wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Microservices Governance > Full link grayscale.
Klik Create Lane Group and Lane. Jika grup jalur sudah ada di namespace layanan mikro Anda, klik + Create Lane Group.
Konfigurasikan grup jalur:
Parameter Nilai Lane Group Name Nama deskriptif untuk grup jalur. Ingress Type Pilih Java Microservice Gateway. Lane Group Traffic Entry Pilih aplikasi ingress Anda (spring-cloud-zuul). Lane Group Application Pilih semua aplikasi dalam rantai panggilan. Klik OK.
Setelah pembuatan, verifikasi bahwa aplikasi ingress dan aplikasi terkait muncul di bagian applications involved in the lane group pada halaman Full link grayscale. Untuk mengubah grup jalur, klik
.
Langkah 2: Buat jalur
Di halaman Full link grayscale, pilih namespace layanan mikro yang sama dengan grup jalur Anda.
Klik Click to Create First Split Lane. Jika jalur sudah ada, klik Create Lane.
PentingSetelah Anda mengonfigurasi peluncuran kanari ujung ke ujung untuk aplikasi, aplikasi tersebut tidak lagi mendukung fitur seperti rilis canary dan routing berbasis tag.
Konfigurasikan parameter jalur: Kondisi routing mendukung jenis parameter berikut:
PentingTrafik yang tidak sesuai dengan kondisi routing canary mana pun akan diarahkan ke node untagged pada versi dasar.
Parameter Deskripsi Add Node Tag Tambahkan tag (misalnya, gray) untuk mengidentifikasi node canary.Enter lane information Atur Lane Tag dan gunakan Confirm Matching Relationship untuk memverifikasi jumlah node bertag. Configure Routing and Canary Release Rules Tentukan kondisi routing (lihat tabel berikut). Jenis parameter Deskripsi Parameter Parameter permintaan Header Header permintaan Cookie Cookie HTTP Body Content Badan permintaan berformat JSON Klik OK.
Setelah konfigurasi, gerbang mengarahkan trafik sebagai berikut:
Trafik yang tidak sesuai dengan aturan canary dialihkan ke versi dasar.

Trafik yang sesuai dengan aturan canary dialihkan ke versi canary.

Konfigurasikan pipeline Jenkins
Langkah 1: Siapkan kredensial registri gambar
Buat Kubernetes Secret agar Jenkins dapat mendorong gambar ke registri kontainer Anda. Setelah menghasilkan file config.json dengan kredensial registri Anda, jalankan:
kubectl create secret generic jenkins-docker-cfg -n jenkins --from-file=/root/.docker/config.jsonUntuk detailnya, lihat Siapkan Jenkins untuk membangun pipeline pengiriman aplikasi.
Langkah 2: Buat pipeline
Di Dasbor Jenkins, klik New Item di panel navigasi kiri.
Masukkan nama pipeline, pilih Pipeline sebagai tipe, lalu klik OK.
Di halaman konfigurasi, klik tab Pipeline dan atur hal berikut:
Definition: Pilih Pipeline script from SCM.
SCM: Pilih Git.
Repository URL: Masukkan URL repositori Git Anda. Tutorial ini menggunakan
https://github.com/aliyun/alibabacloud-microservice-demo/tree/master/mse-simple-demo. > Catatan: Jika instans Jenkins Anda tidak dapat mengakses GitHub, gunakan mirror Gitee sebagai gantinya.Script Path: Masukkan
Jenkinsfile.
Klik Save.
Jenkinsfile menentukan empat tahap pipeline:
Tahap pipeline:
| Tahap | Fungsinya | Kontainer |
|---|---|---|
| Code packaging | Membangun aplikasi dengan Maven (mvn clean package). | maven |
| Image building and releasing | Membangun dan mendorong gambar kontainer dengan Kaniko. | kaniko |
| Canary deployment | Memperbarui file YAML penerapan gray dengan tag gambar baru dan menerapkannya. | kubectl |
| Completing canary deployment | Menunggu input manual. Masukkan true untuk promosi atau false untuk rollback. | kubectl |
Parameter pipeline:
| Parameter | Bawaan | Deskripsi |
|---|---|---|
image_region | cn-shanghai | Wilayah Container Registry. |
image_namespace | yizhan | Namespace Container Registry. |
image_reponame | spring-cloud-a | Nama repositori gambar. |
image_tag | gray | Tag gambar untuk build canary. |
branch | master | Cabang Git tempat melakukan build. |
number_of_pods | 2 | Jumlah replika pod. |
Jalankan pipeline dan verifikasi
Langkah 1: Bangun pipeline
Di Dasbor Jenkins, klik
di samping nama pipeline.Klik Build.
CatatanBuild pertama menarik konfigurasi dari repositori Git dan menginisialisasi pipeline. Jika terjadi error, klik Build with Parameters, konfigurasikan parameter, lalu bangun ulang.
Tunggu hingga tahap Code packaging, Image building and releasing, dan Canary deployment selesai. Pipeline akan berhenti di tahap Completing canary deployment, menunggu konfirmasi Anda.
Langkah 2: Verifikasi penerapan canary
Masuk ke Konsol ACK. Navigasi ke kluster Anda dan pilih Workloads > Deployments.
Pastikan deployment
spring-cloud-a-grayada dan menggunakan gambarspring-cloud-a:gray.Navigasi ke Network > Services, pilih namespace Anda, lalu klik public endpoint layanan zuul-slb.
Uji routing trafik: Trafik normal (tanpa header canary) — diarahkan ke versi dasar: Output yang diharapkan: Trafik canary (dengan tag canary) — diarahkan ke node canary: Output yang diharapkan:
curl http://<zuul-slb-public-endpoint>/A/aA[10.4.XX.XX] -> B[10.4.XX.XX] -> C[10.4.XX.XX]%curl http://<zuul-slb-public-endpoint>/A/a?name=xiaomingAgray[10.4.XX.XX] -> B[10.4.XX.XX] -> C[10.4.XX.XX]%Di Konsol MSE, buka halaman detail aplikasi dan pastikan trafik canary diarahkan ke node canary.
Promosikan ke rilis penuh
Setelah verifikasi berhasil, promosikan canary ke produksi.
Di Dasbor Jenkins, klik nama pipeline.
Klik tahap Completing canary deployment, masukkan
truedi kotak dialog Are you sure that you want to enable a full release, lalu klik OK.Di Konsol ACK, verifikasi bahwa:
Deployment
spring-cloud-a-graydihapus.Deployment
spring-cloud-akini menggunakan gambarspring-cloud-a:gray.
Di Konsol MSE, pastikan trafik canary tidak lagi muncul.
Rollback
Jika verifikasi gagal, kembalikan ke versi dasar.
Di Dasbor Jenkins, klik nama pipeline.
Klik tahap Completing canary deployment, masukkan
falsedi kotak dialog Are you sure that you want to enable a full release, lalu klik OK.Di Konsol ACK, verifikasi bahwa:
Deployment
spring-cloud-a-graydihapus.Deployment
spring-cloud-atetap menggunakan versi gambar aslinya.
Di Konsol MSE, pastikan trafik canary tidak lagi muncul.