All Products
Search
Document Center

Microservices Engine:Implementasikan peluncuran kanari ujung ke ujung berdasarkan gateway MSE Ingress

Last Updated:Jul 18, 2026

Microservices Engine (MSE) memungkinkan Anda mengimplementasikan peluncuran kanari ujung ke ujung berdasarkan gateway MSE Ingress. Dengan cara ini, Anda dapat menerapkan pembatasan kecepatan trafik ujung ke ujung tanpa mengubah kode bisnis.

Prasyarat

Batasan penggunaan

Fitur peluncuran kanari ujung ke ujung terintegrasi dengan fitur routing berbasis tag. Jika Anda menggunakan Microservices Governance untuk mengimplementasikan fitur peluncuran kanari ujung ke ujung pada aplikasi Anda, kami menyarankan agar Anda tidak mengonfigurasi aturan rilis canary dan aturan routing berbasis tag untuk aplikasi tersebut.

Untuk informasi selengkapnya tentang versi Java dan framework yang didukung oleh peluncuran kanari ujung ke ujung, lihat Framework Java yang didukung oleh Microservices Governance.

Informasi latar belakang

Dalam skenario layanan mikro dengan aplikasi Spring Cloud atau Dubbo, trafik secara default didistribusikan secara acak di antara versi aplikasi. Artinya, trafik dengan karakteristik tertentu mungkin tidak mencapai versi yang dimaksud. Fitur peluncuran kanari ujung ke ujung mengatasi hal ini dengan mengisolasi versi aplikasi tertentu ke dalam lane — lingkungan runtime independen — dan mengarahkan trafik yang sesuai dengan aturan yang ditentukan ke versi yang diinginkan. Anda dapat membuat lane untuk mengisolasi versi aplikasi dan mengonfigurasi aturan routing untuk gateway MSE Ingress guna mengarahkan trafik.

Skenario

Contoh ini menunjukkan peluncuran kanari ujung ke ujung dari gateway MSE Ingress ke layanan mikro backend dalam skenario pemesanan e-commerce. Arsitektur terdiri dari gateway MSE Ingress dan backend Spring Cloud dengan tiga aplikasi: pusat transaksi (Aplikasi A), pusat komoditas (Aplikasi B), dan pusat inventaris (Aplikasi C). Klien atau halaman HTML mengakses aplikasi backend ini, yang terdaftar pada instans Nacos.

Setelah pelanggan melakukan pemesanan, trafik mengalir melalui gateway MSE Ingress dan diarahkan ke Aplikasi A, Aplikasi B, dan Aplikasi C secara berurutan: Pelanggan → gateway MSE Ingress → Aplikasi A → Aplikasi B → Aplikasi C.

Sebelum merilis versi baru Aplikasi A dan Aplikasi C, Anda harus menguji versi baru tersebut pada kedua aplikasi menggunakan rilis canary. Setelah versi tersebut terbukti stabil, Anda dapat merilisnya untuk Aplikasi A dan Aplikasi C. Fitur peluncuran kanari ujung ke ujung, yang dibangun di atas gateway MSE Ingress dan Microservices Governance, memastikan bahwa trafik canary dengan karakteristik tertentu selalu diarahkan ke versi canary di beberapa aplikasi. Jika suatu aplikasi tidak memiliki versi canary, trafik secara otomatis diarahkan ke lingkungan dasarnya.

全链路灰度场景

Istilah

  • Lane

    Lingkungan terisolasi yang didefinisikan untuk aplikasi dengan versi yang sama. Hanya trafik yang sesuai dengan aturan kontrol trafik tertentu yang diarahkan ke aplikasi dalam lane. Satu aplikasi dapat termasuk dalam beberapa lane, dan satu lane dapat berisi beberapa aplikasi. Aplikasi memiliki hubungan banyak-ke-banyak dengan lane.

  • Lane group

    Kumpulan lane, digunakan untuk membedakan antar tim atau skenario berbeda.

  • MSE Ingress gateway

    Gateway MSE Ingress mengelola trafik Ingress berdasarkan gateway cloud-native MSE. Gateway ini kompatibel dengan NGINX Ingress dan mendukung lebih dari 50 anotasi NGINX Ingress, memungkinkan rilis canary untuk beberapa versi layanan secara bersamaan. Dengan tata kelola layanan yang fleksibel dan perlindungan keamanan komprehensif, gateway ini memenuhi kebutuhan tata kelola trafik aplikasi terdistribusi cloud-native berskala besar.

Prasyarat

Aktifkan Microservices Governance untuk aplikasi

  1. Aktifkan Edisi Profesional MSE Microservices Governance.

    Untuk informasi selengkapnya, lihat Aktifkan Microservices Governance.

  2. Aktifkan Microservices Governance untuk aplikasi.

    1. Masuk ke Konsol MSE.

    2. Di panel navigasi kiri, pilih Microservices Governance > O&M Center > K8s cluster list. Temukan kluster yang ingin Anda kelola, lalu klik Manage di kolom Actions.

    3. Pada halaman cluster details, temukan namespace yang ingin Anda kelola, lalu klik Activate Microservices Governance di kolom Operation. Pada pesan yang muncul, klik OK.

Deploy aplikasi demo

  1. Masuk ke Container Service Management Console.

  2. Di panel navigasi kiri, klik Clusters.

  3. Pada halaman Cluster List, klik nama kluster tujuan atau klik Details di kolom Actions.

  4. Di panel navigasi kiri halaman manajemen kluster, pilih Workload > Deployments.

  5. Pada halaman Stateless, pilih Namespaces dan klik Create from YAML.

  6. Konfigurasikan templat dan klik Create.

    Pada contoh ini, aplikasi Nacos Server dideploy untuk penemuan layanan. Aplikasi A, B, dan C dideploy. Versi dasar dan canary dideploy untuk Aplikasi A dan C, sedangkan hanya versi dasar yang dideploy untuk Aplikasi B.

    Deploy aplikasi nacos-server.

    Tampilkan konten YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nacos-server
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nacos-server
      template:
        metadata:
          labels:
            app: nacos-server
        spec:
          containers:
          - env:
            - name: MODE
              value: standalone
            image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/nacos-server:v2.1.2
            imagePullPolicy: Always
            name: nacos-server
          dnsPolicy: ClusterFirst
          restartPolicy: Always
    
    # Konfigurasi layanan nacos-server.
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nacos-server
    spec:
      ports:
      - port: 8848
        protocol: TCP
        targetPort: 8848
      selector:
        app: nacos-server
      type: ClusterIP
    • Deploy Aplikasi A.

      • Kode YAML untuk versi dasar

        Tampilkan kode YAML untuk versi dasar

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-a
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-a
          template:
            metadata:
              labels:
                app: spring-cloud-a
                msePilotAutoEnable: 'on'
                msePilotCreateAppName: spring-cloud-a
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
                imagePullPolicy: Always
                name: spring-cloud-a
                ports:
                - containerPort: 20001
                livenessProbe:
                  tcpSocket:
                    port: 20001
                  initialDelaySeconds: 10
                  periodSeconds: 30
      • Kode YAML untuk versi canary

        Tampilkan kode YAML untuk versi canary

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-a-gray
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-a-gray
          strategy:
          template:
            metadata:
              labels:
                app: spring-cloud-a-gray
                msePilotAutoEnable: 'on'
                alicloud.service.tag: gray
                msePilotCreateAppName: spring-cloud-a
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
                imagePullPolicy: Always
                name: spring-cloud-a-gray
                ports:
                - containerPort: 20001
                livenessProbe:
                  tcpSocket:
                    port: 20001
                  initialDelaySeconds: 10
                  periodSeconds: 30
    • Deploy Aplikasi B.

      • Kode YAML untuk versi dasar

        Tampilkan kode YAML untuk versi dasar

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-b
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-b
          strategy:
          template:
            metadata:
              labels:
                app: spring-cloud-b
                msePilotAutoEnable: 'on'
                msePilotCreateAppName: spring-cloud-b
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-b:3.0.1
                imagePullPolicy: Always
                name: spring-cloud-b
                ports:
                - containerPort: 8080
                livenessProbe:
                  tcpSocket:
                    port: 20002
                  initialDelaySeconds: 10
                  periodSeconds: 30
    • Deploy Aplikasi C.

      • Kode YAML untuk versi dasar

        Tampilkan kode YAML untuk versi dasar

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-c
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-c
          template:
            metadata:
              labels:
                app: spring-cloud-c
                msePilotAutoEnable: 'on'
                msePilotCreateAppName: spring-cloud-c
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
                imagePullPolicy: Always
                name: spring-cloud-c
                ports:
                - containerPort: 8080
                livenessProbe:
                  tcpSocket:
                    port: 20003
                  initialDelaySeconds: 10
                  periodSeconds: 30
      • Kode YAML untuk versi canary

        Tampilkan kode YAML untuk versi canary

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-c-gray
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-c-gray
          template:
            metadata:
              labels:
                app: spring-cloud-c-gray
                msePilotAutoEnable: 'on'
                alicloud.service.tag: gray
                msePilotCreateAppName: spring-cloud-c
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
                imagePullPolicy: IfNotPresent
                name: spring-cloud-c-gray
                ports:
                - containerPort: 8080
                livenessProbe:
                  tcpSocket:
                    port: 20003
                  initialDelaySeconds: 10
                  periodSeconds: 30
  7. Konfigurasikan dua layanan Kubernetes untuk Aplikasi A, yang merupakan aplikasi ingress.

    1. Masuk ke Konsol ACK.

    2. Di panel navigasi kiri halaman manajemen kluster, pilih Network > Services.

    3. Pada halaman Service, pilih Namespaces, klik Create from YAML, konfigurasikan templat, lalu klik Create.

      • Kode YAML untuk layanan spring-cloud-a-base yang dideploy untuk versi dasar Aplikasi A

        Lihat konten YAML

        apiVersion: v1
        kind: Service
        metadata:
          name: spring-cloud-a-base
        spec:
          ports:
            - name: http
              port: 20001
              protocol: TCP
              targetPort: 20001
          selector:
            app: spring-cloud-a
      • Kode YAML untuk layanan spring-cloud-a-gray yang dideploy untuk versi canary Aplikasi A

        Lihat konten YAML

        apiVersion: v1
        kind: Service
        metadata:
          name: spring-cloud-a-gray
        spec:
          ports:
            - name: http
              port: 20001
              protocol: TCP
              targetPort: 20001
          selector:
            app: spring-cloud-a-gray

Langkah 1: Buat lane group

  1. Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Microservices Governance > Full link Grayscale.

  3. Pada halaman End-to-end Canary Release, klik Create Lane Groups and Lanes. Jika lane group sudah ada di namespace mikroservis yang dipilih, klik +Create Lane Group.

  4. Pada panel Create Lane Group, atur parameter lane group dan klik OK.

    Parameter

    Deskripsi

    Name of Lane Group

    Masukkan nama untuk kelompok lajur.

    Entry Type

    Pilih Other Gateways.

    Untuk gateway lain seperti gateway NGINX Ingress, gateway APISIX, dan gateway Java yang dikelola sendiri, Anda harus mengimplementasikan aturan pengalihan canary pada gateway tersebut.

    Lane group involves application

    Pilih semua layanan yang terlibat dalam aplikasi ingress atau gateway Ingress Anda.

    Setelah lane group dibuat, verifikasi bahwa aplikasi ingress dan semua aplikasi yang terlibat sudah benar. Anda dapat melihat lane group di bagian Lane Groups and Involved Applications pada halaman End-to-end Canary Release. Untuk mengubah informasi lane group, klik ikon 编辑 di sebelah kanan dan perbarui informasinya.

Langkah 2: Buat lane

  1. Di bagian atas halaman End-to-end canary release, pilih wilayah yang sama dengan lane group Anda, lalu klik Create First Split Lane di bagian bawah halaman.

    Jika lane sudah ada di namespace mikroservis yang dipilih, klik Create Lane.

    Penting

    Jika fitur peluncuran kanari ujung ke ujung diaktifkan untuk aplikasi, kami menyarankan agar Anda tidak menggunakan fitur rilis canary dan routing berbasis tag untuk aplikasi tersebut.

  2. Pada panel Create Lane, atur parameter lane dan klik OK.

    Penting

    Jika gateway Anda adalah gateway Ingress, Anda harus mengonfigurasi aturan routing Ingress di Konsol ACK.

    Parameter

    Deskripsi

    Add Node Tag

    • Metode konfigurasi: Di Konsol ACK, tambahkan alicloud.service.tag: ${tag} ke spec.template.metadata.labels dalam file YAML aplikasi.

    • Tambahkan tag: Tambahkan pasangan kunci-nilai berikut ke spec.template.metadata.labels.

      • msePilotCreateAppName:${AppName}

      • alicloud.service.tag:{tag}

    Lane Name

    Masukkan nama untuk lane.

    Lane Tag

    Setelah Anda Add Node Tag, daftar tag yang sesuai akan muncul di daftar drop-down. Saat Anda memilih tag, aplikasi yang sesuai akan ditambahkan secara otomatis.

    Setelah lane dibuat, Anda dapat melihat atau mengonfigurasi informasinya di bagian Traffic Distribution pada halaman End-to-end Canary Release.

    • Klik ikon 图标 untuk melihat persentase trafik lane.

    • Klik ikon Application Status icon di kolom Actions daftar lane untuk mengatur status aplikasi dalam lane.

      • Aktifkan lane: Klik Enable. Ini mengaktifkan lane, dan trafik diarahkan sesuai konfigurasi lane. Trafik yang cocok diarahkan terlebih dahulu ke versi aplikasi dengan tag lane yang sesuai. Jika tidak ada versi bertag, trafik diarahkan ke versi tanpa tag.

      • Nonaktifkan lane: Klik Close. Trafik untuk aplikasi ini diarahkan ke versi tanpa tag.

      • Ubah lane: Klik Edit untuk mengubah konfigurasi lane.

      • Hapus lane: Klik Delete untuk menghapus lane.

Langkah 3: Konfigurasikan aturan Ingress untuk versi dasar

Jika nama domain layanan adalah example.com dan Anda ingin mengarahkan trafik hanya ke versi dasar (versi online), gunakan YAML berikut untuk mengonfigurasi aturan Ingress untuk versi dasar.

Lihat konten YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: spring-cloud-a
  namespace: default
spec:
  ingressClassName: mse
  rules:
    - host: example.com
      http:
        paths:
          - backend:
              service:
                name: spring-cloud-a-base
                port:
                  number: 20001
            path: /
            pathType: Prefix

Gunakan perintah curl untuk mengakses example.com dan arahkan trafik ke versi dasar.

curl -H "host: example.com" http://47.98.xxx.xx/a

Hasil contoh:

A[192.168.0.98][config=base] -> B[192.168.0.157] -> C[192.168.0.161]

Langkah 4: Konfigurasikan aturan routing Ingress untuk versi canary

Anda menggunakan aturan routing berbasis header untuk membedakan trafik dasar dari trafik canary. Untuk mengarahkan permintaan dengan Header HTTP x-user-id: 100 ke versi canary saat mengakses example.com, konfigurasikan aturan routing Ingress berikut. Permintaan diarahkan terlebih dahulu ke versi canary setiap aplikasi. Jika suatu aplikasi tidak memiliki versi canary, permintaan diarahkan ke versi dasarnya.

Tampilkan kode YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/canary: 'true'
    nginx.ingress.kubernetes.io/canary-by-header: x-user-id
    nginx.ingress.kubernetes.io/canary-by-header-value: '100'
    mse.ingress.kubernetes.io/request-header-control-update: x-mse-tag gray
  name: spring-cloud-a-gray
  namespace: default
spec:
  ingressClassName: mse
  rules:
    - host: example.com
      http:
        paths:
          - backend:
              service:
                name: spring-cloud-a-gray
                port:
                  number: 20001
            path: /
            pathType: Prefix

Kode di atas menggunakan anotasi untuk mengimplementasikan rilis canary, konfigurasi header, dan kontrol header. Untuk informasi selengkapnya tentang anotasi ini, lihat Container Service for Kubernetes: Penggunaan lanjutan MSE Ingress.

Jalankan perintah curl untuk mengakses example.com dan arahkan permintaan dengan Header HTTP x-user-id: 100 ke versi canary.

curl -H "host: example.com" -H "x-user-id: 100" http://47.98.xxx.xx/a

Hasil contoh: trafik canary diarahkan ke versi canary Aplikasi A dan C. Aplikasi B menerima trafik pada versi dasarnya karena tidak tersedia versi canary.

Agray[192.168.0.128][config=base] -> B[192.168.0.152] -> Cgray[192.168.0.151]

Lihat grafik pemantauan trafik aplikasi di Konsol MSE

  • Lihat grafik pemantauan satu aplikasi.

    1. Pada halaman Full link grayscale, klik tab lane group yang ingin Anda lihat informasi pemantauannya.

    2. Di bagian Lane Groups and Involved Applications, klik nama aplikasi yang ingin Anda lihat informasi pemantauannya. Data permintaan per detik (QPS) ditampilkan di bagian QPS data di sebelah kanan halaman.

  • Lihat grafik pemantauan semua aplikasi dalam lane group.

    1. Pada halaman Full link grayscale, klik tab lane group yang ingin Anda lihat informasi pemantauannya.

    2. Di sebelah kanan bagian Application QPS Monitoring, klik View Traffic Details untuk melihat grafik pemantauan trafik semua aplikasi dalam lane group.