All Products
Search
Document Center

Alibaba Cloud Service Mesh:Implementasi rilis biru-hijau dan canary dengan ASM

Last Updated:Mar 12, 2026

Service Mesh (ASM) memisahkan routing traffic dari penskalaan pod, memberikan Anda kendali berbasis persentase atas distribusi traffic ke setiap versi aplikasi—terlepas dari jumlah replika.

Panduan ini menjelaskan tiga strategi rilis menggunakan layanan virtual dan aturan tujuan, dengan aplikasi contoh Bookinfo:

  • Rilis biru-hijau — alihkan seluruh traffic dari satu versi ke versi lain dalam satu langkah.

  • Rilis canary berbasis bobot — bagi traffic antara dua versi berdasarkan persentase.

  • Rilis canary berbasis header — arahkan pengguna tertentu ke versi baru berdasarkan header permintaan.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Cara kerja

Aturan tujuan mendefinisikan subset bernama yang dipetakan ke label versi pada pod Anda. Layanan virtual mereferensikan subset tersebut untuk mengontrol versi mana yang menerima traffic dan dalam proporsi berapa.

Panduan ini mengikuti progresi realistis:

  1. Mendefinisikan subset untuk semua versi layanan mikro Bookinfo (aturan tujuan).

  2. Mengarahkan seluruh traffic ke v1 (garis dasar).

  3. Rilis biru-hijau: alihkan layanan reviews dari v1 ke v2.

  4. Rilis canary berbasis bobot: bagi traffic antara reviews v2 dan v3.

  5. Rilis canary berbasis header: arahkan pengguna tertentu ke reviews v3.

Langkah 1: Buat aturan tujuan

Definisikan subset untuk setiap layanan mikro Bookinfo agar layanan virtual dapat mereferensikannya berdasarkan nama. Untuk informasi lebih lanjut, lihat Manage destination rules.

Terapkan aturan tujuan berikut ke instans ASM Anda:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: productpage
spec:
  host: productpage
  subsets:
  - name: v1
    labels:
      version: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ratings
spec:
  host: ratings
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v2-mysql
    labels:
      version: v2-mysql
  - name: v2-mysql-vm
    labels:
      version: v2-mysql-vm
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: details
spec:
  host: details
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

Verifikasi bahwa aturan tujuan telah dibuat:

kubectl get destinationrules -o name

Output yang diharapkan:

destinationrule.networking.istio.io/productpage
destinationrule.networking.istio.io/reviews
destinationrule.networking.istio.io/ratings
destinationrule.networking.istio.io/details

Langkah 2: Arahkan seluruh traffic ke v1 (garis dasar)

Buat layanan virtual untuk mengarahkan seluruh traffic ke subset v1 dari setiap layanan mikro Bookinfo. Hal ini menetapkan garis dasar yang stabil sebelum Anda mengalihkan traffic. Untuk informasi lebih lanjut, lihat Manage virtual services.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: productpage
spec:
  hosts:
  - productpage
  http:
  - route:
    - destination:
        host: productpage
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - route:
    - destination:
        host: ratings
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: details
spec:
  hosts:
  - details
  http:
  - route:
    - destination:
        host: details
        subset: v1

Verifikasi garis dasar

Refresh halaman produk Bookinfo di browser Anda. Bagian ulasan ditampilkan tanpa peringkat bintang, karena reviews v1 tidak memanggil layanan ratings.

Konfirmasi aturan routing:

kubectl get virtualservice reviews -o yaml

Output harus menunjukkan subset: v1 sebagai satu-satunya tujuan untuk layanan reviews.

Pada tahap ini, pod untuk reviews v2 dan v3 sedang berjalan tetapi tidak menerima traffic.

Langkah 3: Rilis biru-hijau — alihkan ke reviews v2

Rilis biru-hijau mengalihkan seluruh traffic dari satu versi ke versi lain dalam satu langkah. Perbarui layanan virtual reviews untuk mengarahkan 100% traffic ke subset v2:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
      weight: 50
    - destination:
        host: reviews
        subset: v3
      weight: 50

Verifikasi rilis biru-hijau

Refresh halaman produk Bookinfo. Bagian ulasan kini menampilkan peringkat bintang hitam, yang mengonfirmasi bahwa seluruh traffic mencapai reviews v2.

Konfirmasi aturan routing:

kubectl get virtualservice reviews -o yaml

Output harus menunjukkan subset: v2 sebagai satu-satunya tujuan.

Note: Untuk rollback, terapkan kembali layanan virtual Langkah 2 yang mengarahkan traffic ke subset v1.

Langkah 4: Rilis canary berbasis bobot — bagi traffic antara v2 dan v3

Alih-alih mengalihkan seluruh traffic sekaligus, alihkan secara bertahap persentase tertentu ke versi baru. Layanan virtual berikut membagi traffic 50/50 antara reviews v2 dan v3:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
      weight: 50
    - destination:
        host: reviews
        subset: v3
      weight: 50

Nilai weight mengontrol persentase traffic untuk setiap versi. Bobot harus berjumlah total 100.

Verifikasi rilis canary

Refresh halaman produk Bookinfo beberapa kali. Bagian ulasan bergantian antara bintang hitam (v2) dan bintang merah (v3) dengan frekuensi yang kira-kira sama.

Note: Untuk rollback, atur weight: 100 pada tujuan v2 dan weight: 0 pada v3, atau hapus tujuan v3 sepenuhnya.

Langkah 5: Rilis canary berbasis header — arahkan berdasarkan identitas pengguna

Arahkan pengguna tertentu ke versi baru berdasarkan Header HTTP, sementara pengguna lain tetap berada di versi saat ini. Pendekatan ini berguna untuk pengujian internal sebelum peluncuran yang lebih luas.

Aplikasi Bookinfo meneruskan username yang login sebagai Header HTTP end-user. Layanan virtual berikut mengarahkan pengguna jason ke reviews v3 dan semua pengguna lain ke reviews v2:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews
        subset: v3
  - route:
    - destination:
        host: reviews
        subset: v2

Verifikasi rilis berbasis header

  1. Tanpa login, refresh halaman produk Bookinfo. Bagian ulasan menampilkan bintang hitam (v2).

  2. Klik Sign in di pojok kanan atas. Masukkan jason sebagai username. Tidak diperlukan password.

  3. Setelah login, refresh halaman. Bagian ulasan kini menampilkan bintang merah (v3).

Hal ini berfungsi karena halaman produk Bookinfo menyertakan header end-user dalam permintaan ke layanan mikro backend. Ketika end-user cocok dengan jason, layanan virtual mengarahkan permintaan ke reviews v3.

Pembersihan

Untuk menghapus aturan routing yang dibuat dalam panduan ini, hapus layanan virtual dan aturan tujuan:

kubectl delete virtualservice productpage reviews ratings details
kubectl delete destinationrule productpage reviews ratings details

Langkah selanjutnya