All Products
Search
Document Center

Microservices Engine:Konfigurasikan peluncuran kanari ujung ke ujung dengan ALB Ingress

Last Updated:Mar 12, 2026

Peluncuran kanari standar hanya mencakup satu layanan dalam satu waktu. Ketika versi kanari dari layanan hulu memanggil layanan hilir, permintaan tersebut kembali ke versi dasar layanan hilir, yang mungkin tidak kompatibel. Peluncuran kanari ujung ke ujung mengatasi hal ini dengan mengarahkan lalu lintas bertag melalui versi kanari setiap layanan dalam rantai panggilan, bahkan ketika beberapa layanan tidak memiliki penerapan kanari. Microservices Engine (MSE) menyebarkan konteks kanari secara otomatis di seluruh panggilan antarlayanan. Dikombinasikan dengan Application Load Balancer (ALB) Ingress untuk pemisahan lalu lintas di gerbang, solusi ini menghadirkan peluncuran kanari ujung ke ujung tanpa perubahan pada kode bisnis Anda.

Cara kerja

ALB Ingress memisahkan lalu lintas masuk berdasarkan nama domain dan mengirimkan lalu lintas kanari ke versi kanari layanan pertama. MSE kemudian menyebarkan tag kanari melalui setiap panggilan berikutnya, sehingga setiap layanan hilir mengarahkan permintaan ke versi kanarinya sendiri.

Alur panggilan dalam contoh ini:

Client request --> ALB Ingress gateway --> Application A --> Application B --> Application C
  • Permintaan ke www.aliyundoc.com diarahkan ke lingkungan dasar (versi stabil semua aplikasi).

  • Permintaan ke www.example.com diarahkan ke lingkungan kanari (versi kanari semua aplikasi).

Implementation process

MSE mengorganisasi peluncuran kanari ujung ke ujung berdasarkan dua konsep:

  • Lane group — sekumpulan aplikasi yang berpartisipasi dalam rantai panggilan.

  • Lane — lingkungan isolasi lalu lintas (misalnya "canary") dalam suatu lane group. Setiap lane diidentifikasi oleh sebuah tag, misalnya gray.

Skenario contoh

Arsitektur aplikasi dalam contoh ini:

  • Gerbang ALB Ingress — memisahkan lalu lintas di lapisan ingress

  • Tiga aplikasi Spring Cloud — pusat transaksi (Application A), pusat komoditas (Application B), dan pusat inventaris (Application C)

  • Nacos — menangani penemuan layanan di antara aplikasi

  • Metode akses — berbasis klien atau berbasis HTML

Application A dapat berupa aplikasi Spring Boot. Urutan panggilan: gerbang ALB Ingress > Application A > Application B > Application C.

Pengarahan berbasis domain memisahkan lingkungan dasar dari lingkungan kanari:

Domain Lingkungan
www.aliyundoc.com Dasar (versi stabil)
www.example.com Kanari (versi baru)

Scenario architecture

Catatan penggunaan

  • Jika kluster menggunakan plug-in jaringan Flannel, layanan backend gerbang ALB Ingress harus bertipe NodePort atau LoadBalancer.

  • vSwitch gerbang ALB Ingress harus berada dalam Virtual Private Cloud (VPC) yang sama dengan kluster Container Service for Kubernetes (ACK). Untuk wilayah yang didukung, lihat Wilayah dan zona yang didukung.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Aktifkan Microservices Governance MSE

Aktifkan Microservices Governance di tingkat namespace atau untuk satu aplikasi saja.

Opsi 1: Aktifkan berdasarkan namespace

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

  2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance.

  3. Di halaman Application list, klik ACK Application Access.

  4. Pada dialog ACK Application Access, atur parameter berikut dan klik OK.

ACK namespace access dialog
Parameter Deskripsi
Cluster type Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster. Jika Anda belum memberi otorisasi kepada ACK untuk memanggil MSE, klik Please Authorize.
Cluster Name/ID Pilih kluster target. Gunakan pencarian berdasarkan kata kunci jika diperlukan.
ack-onepilot Menampilkan status instalasi. Jika belum diinstal, sistem akan menginstalnya secara otomatis saat Anda memilih kluster. Jika Anda menggunakan pengguna Resource Access Management (RAM) tanpa izin yang diperlukan, buka Konsol ACK, buka detail kluster, klik Add-ons, temukan ack-onepilot, lalu klik Install. Lihat Komponen ack-onepilot dan Instal dan tingkatkan komponen governance mikrolayanan MSE.
Access Type Pilih Namespace Access.
Cluster Namespace Pilih namespace target.
Microservices Governance Namespace Pilih namespace governance.
Catatan

Setelah ack-onepilot diinstal, agen akan disuntikkan secara otomatis, yang dapat meningkatkan waktu startup aplikasi hingga 10 detik.

Catatan

Jika kluster tidak berada di salah satu wilayah berikut — Qingdao, Hangzhou, Beijing, Shanghai, Shanghai-Finance Cloud, Shenzhen, Hong Kong (Tiongkok), Singapura, Frankfurt, Sydney, Silicon Valley, atau Virginia — pastikan kluster dapat mengakses Internet dan terhubung ke acm.aliyun.com:8080.

Opsi 2: Aktifkan untuk satu aplikasi

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

  2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance.

  3. Di halaman Application list, klik ACK Application Access.

  4. Pada dialog ACK Application Access, atur parameter berikut dan klik OK.

Single application access dialog
Parameter Deskripsi
Cluster type Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster. Jika Anda belum memberi otorisasi kepada ACK untuk memanggil MSE, klik Please Authorize.
Cluster Name/ID Pilih kluster target. Gunakan pencarian berdasarkan kata kunci jika diperlukan.
ack-onepilot Menampilkan status instalasi. Lihat Opsi 1 di atas untuk detailnya.
Access Type Pilih Single Application Access.
Access Procedure Ikuti langkah-langkah berikut: 1. Buka Workloads > Deployments di Konsol ACK dan alihkan ke namespace aplikasi. 2. Temukan aplikasi target dan klik View In YAML. 3. Tambahkan label berikut dan klik Update.
spec:
  template:
    metadata:
      labels:
        # Atur ke "on" untuk mengaktifkan governance MSE. Nilai harus diapit tanda kutip ganda.
        msePilotAutoEnable: "on"
        # Tentukan namespace governance. Jika namespace belum ada, akan dibuat otomatis.
        mseNamespace: default
        # Tentukan nama aplikasi untuk MSE. Nama harus diapit tanda kutip ganda.
        msePilotCreateAppName: "your-deployment-name"

Langkah 1: Terapkan aplikasi demo

Terapkan versi dasar dan kanari dari Aplikasi A, B, dan C, serta server Nacos untuk penemuan layanan. Setiap aplikasi memiliki dua deployment: versi dasar dan versi kanari yang ditandai dengan alicloud.service.tag: gray.

  1. Masuk ke ACK console. Pada panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster Anda dan klik namanya. Di panel navigasi kiri, pilih Workloads > Deployments.

  3. Pilih namespace dan klik Create from YAML. Salin konten YAML berikut dan klik Create.

# Versi dasar Aplikasi A (pusat transaksi)
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-cloud-a
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spring-cloud-a
  template:
    metadata:
      labels:
        msePilotCreateAppName: spring-cloud-a
        app: 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

# Versi kanari Aplikasi A
# "alicloud.service.tag: gray" mengidentifikasi deployment ini sebagai versi kanari.
# MSE menggunakan label ini untuk mengarahkan trafik bertag kanari ke pod-pod ini.
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-cloud-a-new
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spring-cloud-a-new
  strategy:
  template:
    metadata:
      labels:
        # Label ini memberi tahu MSE bahwa pod termasuk dalam lane "gray" (kanari).
        alicloud.service.tag: gray
        msePilotCreateAppName: spring-cloud-a
        app: spring-cloud-a-new
    spec:
      containers:
      - env:
        - name: JAVA_HOME
          value: /usr/lib/jvm/java-1.8-openjdk/jre
        # Mengaktifkan propagasi konteks kanari di seluruh panggilan hilir.
        - name: profiler.micro.service.tag.trace.enable
          value: "true"
        image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
        imagePullPolicy: Always
        name: spring-cloud-a-new
        ports:
        - containerPort: 20001
        livenessProbe:
          tcpSocket:
            port: 20001
          initialDelaySeconds: 10
          periodSeconds: 30

# Versi dasar Aplikasi B (pusat komoditas)
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-cloud-b
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spring-cloud-b
  strategy:
  template:
    metadata:
      labels:
        msePilotCreateAppName: spring-cloud-b
        app: 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

# Versi kanari Aplikasi B
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-cloud-b-new
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spring-cloud-b-new
  template:
    metadata:
      labels:
        alicloud.service.tag: gray
        msePilotCreateAppName: spring-cloud-b
        app: spring-cloud-b-new
    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-new
        ports:
        - containerPort: 8080
        livenessProbe:
          tcpSocket:
            port: 20002
          initialDelaySeconds: 10
          periodSeconds: 30

# Versi dasar Aplikasi C (pusat inventaris)
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-cloud-c
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spring-cloud-c
  template:
    metadata:
      labels:
        msePilotCreateAppName: spring-cloud-c
        app: 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

# Versi kanari Aplikasi C
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-cloud-c-new
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spring-cloud-c-new
  template:
    metadata:
      labels:
        alicloud.service.tag: gray
        msePilotCreateAppName: spring-cloud-c
        app: spring-cloud-c-new
    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-new
        ports:
        - containerPort: 8080
        livenessProbe:
          tcpSocket:
            port: 20003
          initialDelaySeconds: 10
          periodSeconds: 30

# Server Nacos untuk penemuan layanan
---
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

# Layanan server Nacos
---
apiVersion: v1
kind: Service
metadata:
  name: nacos-server
spec:
  ports:
  - port: 8848
    protocol: TCP
    targetPort: 8848
  selector:
    app: nacos-server
  type: ClusterIP

Konfigurasikan pengaturan jaringan

Buat dua Service Kubernetes untuk Aplikasi A: satu untuk versi dasar dan satu untuk versi kanari. ALB Ingress mengarahkan lalu lintas ke Service ini berdasarkan nama domain.

# Service untuk versi dasar Aplikasi A
apiVersion: v1
kind: Service
metadata:
  name: spring-cloud-a-base
spec:
  ports:
    - name: http
      nodePort: 32605
      port: 20001
      protocol: TCP
      targetPort: 20001
  selector:
    app: spring-cloud-a
  sessionAffinity: None
  type: NodePort

---
# Service untuk versi kanari Aplikasi A
apiVersion: v1
kind: Service
metadata:
  name: spring-cloud-a-gray
spec:
  ports:
    - name: http
      nodePort: 31622
      port: 20001
      protocol: TCP
      targetPort: 20001
  selector:
    app: spring-cloud-a-new
  sessionAffinity: None
  type: NodePort

Langkah 2: Konfigurasikan pengarahan ALB Ingress

  1. Buat objek AlbConfig. Lihat Buat objek AlbConfig.

    Penting

    vSwitch gerbang ALB Ingress harus berada dalam VPC yang sama dengan kluster. Jika tidak, bisnis Anda akan terganggu.

  2. Buat resource Ingress. Simpan YAML berikut sebagai gray-ingress.yaml.

    • Untuk kluster yang menjalankan Kubernetes sebelum V1.19:

      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      metadata:
        name: demo
        namespace: default
      spec:
        ingressClassName: alb
        rules:
          - host: www.aliyundoc.com
            http:
              paths:
                - path: /a
                  backend:
                    serviceName: spring-clud-a-base
                    servicePort: 20001
          - host: www.example.com
            http:
              paths:
                - backend:
                    serviceName: spring-cloud-a-gray
                    servicePort: 20001
                  path: /a
                  pathType: ImplementationSpecific
    • Untuk kluster yang menjalankan Kubernetes V1.19 atau lebih baru:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: cafe-ingress
      spec:
        ingressClassName: alb
        rules:
         - host: www.aliyundoc.com
           http:
            paths:
            - path: /a
              pathType: ImplementationSpecific
              backend:
                service:
                  name: spring-clud-a-base
                  port:
                    number: 20001
         - host: www.example.com
           http:
            paths:
            - path: /a
              pathType: ImplementationSpecific
              backend:
                service:
                  name: spring-clud-a-base-gray
                  port:
                    number: 20001
  3. Terapkan resource Ingress:

    kubectl apply -f gray-ingress.yaml

kubectl apply output

Jika kolom ADDRESS kosong pada output, periksa event di halaman detail Ingress dan tinjau kembali prasyarat untuk pemecahan masalah.

Langkah 3: Buat lane group dan lane di Konsol MSE

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

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

  3. Klik Create lane groups and lanes.. Jika lane group sudah ada, klik + untuk Create Lane Group.

  4. Di panel Create Lane Group, tambahkan tiga aplikasi — spring-cloud-a, spring-cloud-b, dan spring-cloud-c — lalu klik OK.

  5. Di bagian bawah halaman Full link Grayscale, klik Create First Split Lane. Di panel Create Lane, pilih tag gray dan klik OK.

Verifikasi hasil

Kirim permintaan uji untuk memastikan lalu lintas mengalir dengan benar melalui seluruh rantai panggilan.

Verifikasi pengarahan lingkungan dasar:

curl -H"Host:aliyundoc.base.com" http://<alb-endpoint>/a

Output yang diharapkan:

A[172.18.XX.XX] -> B[172.18.XX.XX] -> C[172.18.XX.XX]%

Tidak ada nama aplikasi yang memiliki akhiran "gray", yang menegaskan bahwa ketiga layanan menangani permintaan menggunakan versi dasarnya.

Verifikasi pengarahan lingkungan kanari:

curl -H"Host:www.example.com" http://<alb-endpoint>/a

Output yang diharapkan:

Agray[172.18.XX.XX] -> Bgray[172.18.XX.XX] -> Cgray[172.18.XX.XX]%

Akhiran "gray" pada setiap nama aplikasi menegaskan bahwa MSE menyebarkan konteks kanari melalui seluruh rantai panggilan — dari Aplikasi A ke B hingga C. Hal ini membuktikan bahwa pengarahan berbasis domain di lapisan ALB dan pengarahan berbasis lane di lapisan MSE berfungsi dengan benar.

Catatan

Ganti <alb-endpoint> dengan titik akhir aktual gerbang ALB Ingress (misalnya, alb-828vagckg5omzfy49n.cn-beijing.alb.aliyuncs.com). Temukan titik akhir ini di output kubectl get ingress.