All Products
Search
Document Center

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

Last Updated:Nov 10, 2025

Microservices Engine (MSE) memungkinkan Anda menerapkan peluncuran kanari ujung ke ujung berdasarkan gateway MSE Ingress. Dengan cara ini, Anda dapat menerapkan pembatasan trafik ujung ke ujung tanpa perlu mengubah kode bisnis Anda. Topik ini menjelaskan cara menggunakan gateway MSE Ingress untuk menerapkan peluncuran kanari ujung ke ujung.

Prasyarat

Batasan

Fitur peluncuran kanari ujung ke ujung terintegrasi dengan fitur routing berbasis tag. Jika Anda menggunakan Microservices Governance untuk menerapkan 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 tempat Anda telah men-deploy aplikasi Spring Cloud atau Dubbo dan tersedia versi baru untuk aplikasi tersebut, trafik akan diarahkan secara acak ke aplikasi-aplikasi tersebut tanpa memperhatikan versi yang digunakan. Dalam kasus ini, trafik yang memiliki karakteristik tertentu mungkin tidak diarahkan ke versi aplikasi yang diinginkan. Untuk mengatasi masalah ini, Anda dapat menggunakan fitur peluncuran kanari ujung ke ujung untuk mengisolasi versi tertentu dari aplikasi dari versi lainnya dan mengarahkan trafik permintaan yang sesuai dengan aturan tertentu ke versi aplikasi yang diinginkan. Anda dapat membuat jalur (lane) yang setara dengan lingkungan runtime independen untuk mengisolasi versi aplikasi dan mengonfigurasi aturan routing untuk gateway MSE Ingress guna mengarahkan trafik.

Skenario peluncuran kanari ujung ke ujung

Topik ini memberikan contoh tentang cara menerapkan peluncuran kanari ujung ke ujung dari gateway MSE Ingress ke aplikasi layanan mikro dalam skenario pemesanan pesanan di industri e-commerce. Dalam contoh ini, arsitektur aplikasi terdiri dari gateway MSE Ingress dan framework layanan mikro backend (Spring Cloud). Aplikasi backend berikut terlibat dalam proses pemanggilan backend: pusat transaksi (Aplikasi A), pusat komoditas (Aplikasi B), dan pusat inventaris (Aplikasi C). Anda dapat menggunakan klien atau halaman HTML untuk mengakses aplikasi backend ini yang terdaftar pada instans Nacos.

Setelah pelanggan melakukan pemesanan, trafik mengalir ke gateway MSE Ingress dan diarahkan secara berurutan ke pusat transaksi (Aplikasi A), pusat komoditas (Aplikasi B), dan pusat inventaris (Aplikasi C). Proses pemanggilan berikut digunakan: Pelanggan → gateway MSE Ingress → Aplikasi A → Aplikasi B → Aplikasi C.

Fitur-fitur versi aplikasi diperbarui seiring iterasi bisnis. Sebelum versi baru secara resmi dirilis untuk Aplikasi A dan Aplikasi C, Anda harus menguji versi tersebut pada kedua aplikasi menggunakan rilis canary. Setelah versi tersebut terbukti stabil, Anda dapat merilisnya untuk aplikasi. Untuk merilis fitur-fitur baru suatu versi, Anda harus merilis versi tersebut untuk Aplikasi A dan Aplikasi C. Fitur peluncuran kanari ujung ke ujung disediakan berdasarkan gateway MSE Ingress dan Microservices Governance. Anda dapat menerapkan peluncuran kanari ujung ke ujung dari gateway MSE Ingress ke beberapa aplikasi backend. Dengan cara ini, trafik canary yang memiliki karakteristik tertentu selalu dapat diarahkan ke versi canary aplikasi. Hal ini membantu Anda menguji suatu versi pada beberapa aplikasi menggunakan rilis canary. Jika suatu aplikasi tidak memiliki versi canary, trafik secara otomatis diarahkan ke lingkungan dasar aplikasi tersebut.

全链路灰度场景

Istilah

  • Lane

    Lingkungan terisolasi yang ditentukan untuk aplikasi dengan versi yang sama. Hanya trafik yang sesuai dengan aturan pengendalian trafik tertentu yang dapat diarahkan ke aplikasi yang ditandai dalam suatu lane. Suatu aplikasi dapat termasuk dalam beberapa lane. Satu lane dapat berisi beberapa aplikasi. Aplikasi memiliki hubungan banyak-ke-banyak dengan lane.

  • Lane group

    Kumpulan lane. Lane group digunakan untuk membedakan antara tim atau skenario yang berbeda.

  • MSE Ingress gateway

    Gateway MSE Ingress memungkinkan Anda mengelola trafik ingress berdasarkan gateway cloud-native MSE. Gateway MSE Ingress kompatibel dengan gateway NGINX Ingress dan mendukung lebih dari 50 anotasi dalam gateway NGINX Ingress. Gateway MSE Ingress mendukung rilis canary beberapa versi layanan secara bersamaan. Gateway MSE Ingress menyediakan kemampuan tata kelola layanan yang fleksibel dan perlindungan keamanan yang komprehensif. Gateway MSE Ingress cocok untuk tata kelola trafik dalam skenario di mana banyak aplikasi terdistribusi cloud-native tersedia.

Persiapan

Aktifkan Microservices Governance untuk aplikasi

  1. Aktifkan MSE Microservices Governance Edisi Profesional.

    Untuk informasi selengkapnya, lihat Aktifkan Microservices Governance.

  2. Aktifkan Microservices Governance untuk aplikasi.

    1. Masuk ke Konsol MSE.

    2. Di panel navigasi sebelah 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 Konsol ACK.

  2. Di panel navigasi sebelah kiri, klik Clusters.

  3. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik nama kluster tersebut atau klik Details di kolom Actions. Halaman detail kluster akan muncul.

  4. Di panel navigasi sebelah kiri halaman detail, pilih Workloads > Deployments.

  5. Pada halaman Stateless, pilih Namespace dan klik Create From YAML.

  6. Konfigurasikan parameter dan klik Create.

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

    Deploy aplikasi nacos-server.

    Tampilkan kode 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, yaitu aplikasi ingress.

    1. Masuk ke Konsol ACK.

    2. Di panel navigasi sebelah kiri halaman detail, pilih Network > Services

    3. Pada halaman Services, pilih namespace dan klik Create Resources in YAML. Pada halaman Buat, konfigurasikan parameter, lalu klik Create.

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

        Tampilkan kode 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

        Tampilkan kode 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 grup lane

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

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

  3. Pada halaman Full link grayscale, klik Create Lane Group and Lane. Jika grup lane tersedia di namespace layanan mikro yang Anda pilih, klik Create Lane Group.

  4. Pada panel Create Lane Group, konfigurasikan parameter dan klik OK.

    Parameter

    Deskripsi

    Lane Group Name

    Masukkan nama grup lane.

    Ingress Type

    Pilih Other Gateways.

    Gateway lainnya mencakup NGINX Ingress, APISIX, dan gateway Java yang dikelola sendiri. Anda harus menerapkan aturan pengalihan canary di gateway.

    Lane Group Application

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

    Setelah grup lane dibuat, periksa apakah aplikasi ingress dan aplikasi terkait lainnya valid. Anda dapat melihat grup lane yang telah Anda buat di bagian Lane Groups and Involved Applications pada halaman Full link grayscale. Untuk mengubah informasi grup lane, klik ikon 编辑 di sebelah kanan dan modifikasi informasinya.

Langkah 2: Buat lane

  1. Pada halaman Grayscale tautan penuh, pilih wilayah tempat grup lane berada di bilah navigasi atas, lalu klik Create First Split Lane di bagian bawah.

    Jika lane tersedia di namespace layanan mikro yang Anda pilih, 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, konfigurasikan parameter 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.

    • Tetapkan nama 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 node tag dikonfigurasi, tag tersebut akan ditampilkan dalam daftar drop-down Tag Lane. Jika Anda memilih tag yang telah Anda konfigurasi dari daftar drop-down, tag tersebut akan secara otomatis ditambahkan ke aplikasi dalam lane.

    Setelah Anda membuat lane, Anda dapat melihat atau mengonfigurasi informasi lane di bagian Traffic Distribution pada halaman Full link grayscale.

    • Klik ikon 图标 untuk melihat persentase trafik lane.

    • Klik ikon 应用状态图标 untuk mengonfigurasi status aplikasi lane di kolom Actions.

      • Aktifkan lane: Klik Enable. Trafik diarahkan berdasarkan konfigurasi lane. Trafik diprioritaskan ke versi aplikasi yang memiliki tag lane. Jika versi aplikasi bertag tidak ada, trafik diarahkan ke versi aplikasi tanpa tag.

      • Nonaktifkan lane: Klik Disable. Trafik aplikasi dalam lane selanjutnya diarahkan ke versi aplikasi tanpa tag.

      • Edit informasi lane: Klik Edit.

      • Hapus lane: Klik Delete.

Langkah 3: Konfigurasikan aturan Ingress untuk versi dasar

Jika nama domain bisnis adalah example.com dan Anda ingin mengarahkan seluruh trafik permintaan untuk example.com hanya ke lingkungan garis dasar (online), Anda dapat menggunakan kode berikut untuk mengonfigurasi aturan Ingress untuk lingkungan garis dasar.

Tampilkan kode 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 lingkungan garis dasar.

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

Hasil berikut dikembalikan:

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

Jika Anda menggunakan kebijakan berbasis header untuk membedakan antara trafik produksi dan canary, Anda dapat mengarahkan permintaan yang berisi Header HTTP x-user-id: 100 ke lingkungan canary saat mengakses example.com. Trafik diprioritaskan ke versi rilis canary setiap aplikasi dalam rantai pemanggilan. Jika versi rilis canary tidak tersedia untuk suatu aplikasi, trafik diarahkan ke versi garis dasar untuk pemulihan bencana. Gunakan kode berikut untuk mengonfigurasi aturan Ingress untuk lingkungan canary.

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 menerapkan kemampuan rilis canary, konfigurasi header, dan kontrol header. Untuk informasi selengkapnya tentang cara menggunakan anotasi, lihat Penggunaan lanjutan MSE Ingress.

Gunakan perintah curl untuk mengakses example.com dan arahkan trafik ke lingkungan canary. Permintaan harus berisi Header HTTP x-user-id: 100.

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

Hasil berikut menunjukkan bahwa trafik canary diprioritaskan ke versi canary Aplikasi A dan C. Untuk Aplikasi B, trafik diarahkan ke versi dasar karena tidak tersedia versi canary untuk aplikasi tersebut.

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 aplikasi tunggal.

    1. Pada halaman Grayscale tautan penuh, klik tab grup lane yang ingin Anda lihat informasi pemantaunya.

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

  • Lihat grafik pemantauan semua aplikasi dalam grup lane.

    1. Pada halaman Grayscale tautan penuh, klik tab grup lane yang ingin Anda lihat informasi pemantaunya.

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