All Products
Search
Document Center

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

Last Updated:Aug 28, 2026

Dalam arsitektur microservices, pengembangan fitur sering kali memerlukan modifikasi pada beberapa layanan. Untuk menguji perubahan tersebut, setiap layanan biasanya memiliki lingkungan canary untuk menangani sebagian traffic. Panduan ini menjelaskan cara memastikan bahwa permintaan yang diarahkan ke lingkungan canary tetap berada di dalamnya sepanjang rantai panggilan. Bahkan jika beberapa layanan dalam rantai tidak memiliki versi canary, permintaan tetap diteruskan dengan benar ke lingkungan canary layanan downstream berikutnya yang tersedia. Dengan menggabungkan routing fleksibel dari gerbang Alibaba Cloud Application Load Balancer (ALB) Ingress dan kemampuan peluncuran kanari ujung ke ujung dari MSE Microservices Governance, Anda dapat menerapkan pola ini tanpa mengubah kode aplikasi.

Prosedur

Catatan penggunaan

  • Jika Anda menggunakan plug-in jaringan Flannel, Service backend untuk gerbang ALB Ingress hanya mendukung tipe NodePort dan LoadBalancer.

  • vSwitch instans ALB harus berada dalam VPC (Virtual Private Cloud) yang sama dengan kluster ACK. Untuk informasi lebih lanjut tentang wilayah yang didukung oleh ALB, lihat Wilayah dan zona yang didukung.

Kasus penggunaan: Peluncuran kanari ujung ke ujung dengan routing berbasis domain

Pada kasus ini, arsitektur aplikasi terdiri dari gerbang ALB Ingress dan arsitektur microservice Spring Cloud di backend. Rantai panggilan backend melibatkan tiga layanan: pusat transaksi (Aplikasi A), pusat produk (Aplikasi B), dan pusat inventaris (Aplikasi C). Anda dapat mengakses layanan backend melalui client atau HTML. Server Nacos digunakan untuk service discovery di antara layanan-layanan tersebut.

Anda dapat menggunakan nama domain berbeda untuk membedakan antara lingkungan dasar dan canary. Misalnya, akses www.example.com untuk meminta lingkungan canary dan akses www.aliyundoc.com untuk meminta lingkungan dasar.

Seperti yang ditunjukkan pada gambar berikut, rantai panggilannya adalah Ingress-ALB > A > B > C. Aplikasi A dapat berupa aplikasi Spring Boot.

场景

Sebelum memulai

Buat kluster Kubernetes

Buat kluster Kubernetes versi 1.18 atau yang lebih baru. Untuk informasi lebih lanjut, lihat Buat kluster ACK yang dikelola atau Buat kluster khusus ACK (tidak dilanjutkan).

Hubungkan ke kluster ACK dengan kubectl

Hubungkan ke kluster ACK menggunakan kubectl. Untuk informasi lebih lanjut, lihat Hubungkan ke kluster ACK menggunakan kubectl.

Instal komponen ALB Ingress Controller

Instal komponen ALB Ingress Controller untuk kluster ACK Anda. Anda dapat menggunakan salah satu metode berikut:

  • Saat membuat kluster ACK, pilih ALB Ingress untuk bidang Ingress pada halaman Component Configuration untuk menginstal komponen ALB Ingress Controller.

  • Jika Anda memiliki kluster ACK yang sudah ada, Anda dapat menginstal komponen ALB Ingress Controller pada halaman Add-ons. Untuk informasi lebih lanjut, lihat Kelola add-on.

Aktifkan MSE Microservices Governance

  1. Pada halaman aktivasi MSE Microservices Governance, aktifkan Edisi Profesional Microservices Governance.

    Untuk informasi lebih lanjut tentang penagihan MSE Microservices Governance, lihat Penagihan MSE Microservices Governance.

  2. Aktifkan Microservices Governance untuk aplikasi microservice di kluster Container Service for Kubernetes (ACK). Anda dapat memilih metode yang sesuai berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Aktifkan Microservices Governance untuk aplikasi microservice Java di kluster ACK atau ACS.

    Aktifkan Microservices Governance untuk aplikasi dalam namespace ACK

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

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

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

    4. Pada kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.

      Atur Onboarding Type menjadi Namespace atau Single Application. Dari daftar drop-down Container Cluster Namespace, pilih namespace target, misalnya default. Pada bidang Governance Namespace, masukkan nama untuk namespace yang sesuai.

      Parameter

      Deskripsi

      Cluster type

      Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.

      Catatan

      Jika Anda belum memberikan otorisasi kepada Container Service for Kubernetes untuk memanggil MSE, klik Authorize Now untuk memberikan izin yang diperlukan.

      Cluster Name/ID

      Pilih Cluster Name/ID dari kluster yang ingin Anda hubungkan ke pusat governance MSE. Anda dapat mencari kluster berdasarkan kata kunci.

      ack-onepilot

      Menampilkan status komponen ack-onepilot. Untuk informasi lebih lanjut tentang komponen ini dan cara meningkatkannya, lihat komponen ack-onepilot dan Instal dan tingkatkan komponen governance microservices MSE.

      • Jika ack-onepilot belum diinstal, sistem akan secara otomatis memulai instalasi setelah Anda memilih kluster dan menampilkan pesan "The installation process takes about 1 minute. Wait for a while."

        Jika Anda menggunakan Pengguna RAM dan menerima error izin, login ke Konsol Container Service for Kubernetes. Buka kluster target, lalu di panel navigasi kiri, klik Add-ons. Temukan ack-onepilot dan klik Install.

      • Jika ack-onepilot sudah diinstal, UI akan menampilkan versi yang diinstal, misalnya, Installed 4.2.0.

      Catatan
      • Anda dapat melihat detail komponen ack-onepilot dengan login ke Konsol Container Service for Kubernetes, buka kluster target, lalu pilih Operations > Add-ons.

      • Setelah ack-onepilot diinstal, komponen tersebut secara otomatis menyuntikkan agen Java. Hal ini dapat meningkatkan waktu startup aplikasi hingga 10 detik.

      • Saat menghubungkan berdasarkan namespace, jika kluster target Anda tidak berada di salah satu wilayah yang tercantum, pastikan kluster tersebut memiliki akses jaringan publik dan dapat terhubung ke acm.aliyun.com:8080: Tiongkok (Qingdao), Tiongkok (Hangzhou), Tiongkok (Beijing), Tiongkok (Shanghai), Shanghai Finance Cloud, Tiongkok (Shenzhen), Hong Kong (Tiongkok), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).

      Access Type

      Pilih Namespace Access.

      Cluster Namespace

      Pilih Cluster Namespace.

      Microservices Governance Namespace

      Pilih Microservices Governance Namespace.

    Aktifkan Microservices Governance untuk aplikasi

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

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

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

    4. Pada kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.

      Atur Onboarding Type menjadi Single Application. Pada bagian Edit Labels (format YAML), tambahkan label berikut di bawah spec.template.metadata.labels dalam file YAML Deployment aplikasi: msePilotAutoEnable: "on" untuk mengaktifkan governance microservices, mseNamespace: default untuk menentukan namespace MSE, dan msePilotCreateAppName: "your-deployment-name" untuk mengatur nama aplikasi. Ganti your-deployment-name dengan nama Deployment yang sebenarnya.

      Parameter

      Deskripsi

      Cluster type

      Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.

      Catatan

      Jika Anda belum memberikan otorisasi kepada Container Service for Kubernetes untuk memanggil MSE, klik Authorize Now untuk memberikan izin yang diperlukan.

      Cluster Name/ID

      Pilih Cluster Name/ID dari kluster yang ingin Anda hubungkan ke pusat governance MSE. Anda dapat mencari kluster berdasarkan kata kunci.

      ack-onepilot

      Menampilkan status komponen ack-onepilot. Untuk informasi lebih lanjut tentang komponen ini dan cara meningkatkannya, lihat komponen ack-onepilot dan Instal dan tingkatkan komponen governance microservices MSE.

      • Jika ack-onepilot belum diinstal, sistem akan secara otomatis memulai instalasi setelah Anda memilih kluster dan menampilkan pesan "The installation process takes about 1 minute. Wait for a while."

        Jika Anda menggunakan Pengguna RAM dan menerima error izin, login ke Konsol Container Service for Kubernetes. Buka kluster target, lalu di panel navigasi kiri, klik Add-ons. Temukan ack-onepilot dan klik Install.

      • Jika ack-onepilot sudah diinstal, UI akan menampilkan versi yang diinstal, misalnya, Installed 4.2.0.

      Catatan
      • Anda dapat melihat detail komponen ack-onepilot dengan login ke Konsol Container Service for Kubernetes, buka kluster target, lalu pilih Operations > Add-ons.

      • Setelah ack-onepilot diinstal, komponen tersebut secara otomatis menyuntikkan agen Java. Hal ini dapat meningkatkan waktu startup aplikasi hingga 10 detik.

      • Saat menghubungkan berdasarkan namespace, jika kluster target Anda tidak berada di salah satu wilayah yang tercantum, pastikan kluster tersebut memiliki akses jaringan publik dan dapat terhubung ke acm.aliyun.com:8080: Tiongkok (Qingdao), Tiongkok (Hangzhou), Tiongkok (Beijing), Tiongkok (Shanghai), Shanghai Finance Cloud, Tiongkok (Shenzhen), Hong Kong (Tiongkok), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).

      Access Type

      Pilih Single Application Access.

      Access Procedure

      Ikuti langkah-langkah berikut.

      Step 1: Di Konsol Container Service for Kubernetes, buka halaman Workloads > Deployments kluster Anda dan alihkan ke namespace aplikasi Anda.

      Step 2: Temukan aplikasi target dan klik Edit YAML.

      Step 3: Edit bidang labels seperti pada contoh berikut dan klik Update.

      spec:
        template:
          metadata:
            labels:
              # Setel ke "on" untuk mengaktifkan koneksi. Nilai harus diapit tanda kutip ganda.
              msePilotAutoEnable: "on"
              # Tentukan namespace governance target. Jika namespace tidak ada, akan dibuat secara otomatis.
              mseNamespace: default
              # Tentukan nama aplikasi yang akan ditampilkan di MSE. Nilai harus diapit tanda kutip ganda.
              msePilotCreateAppName: "your-deployment-name"

Deploy aplikasi demo

  1. Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  3. Pada halaman Stateless, pilih namespace, lalu klik Create from YAML. Tempel konten berikut ke editor, lalu klik Create.

    Pada contoh ini, tiga aplikasi (A, B, dan C) di-deploy. Versi dasar dan versi canary di-deploy untuk setiap aplikasi. Aplikasi Nacos Server juga di-deploy untuk service discovery.

    # Versi dasar aplikasi A
    ---
    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 canary aplikasi A
    ---
    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:
            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
            - 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
    ---
    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 canary 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
    ---
    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 canary 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
    
    # Nacos Server
    ---
    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 Service Nacos Server
    ---
    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

Konfigurasikan dua Service Kubernetes untuk aplikasi ingress A: spring-cloud-a-base untuk versi dasar dan spring-cloud-a-gray untuk versi canary.

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

---
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 1: Konfigurasikan routing ALB

  1. Buat objek AlbConfig. Untuk informasi lebih lanjut, lihat Buat AlbConfig.

    Penting

    Pastikan vSwitch instans ALB berada dalam VPC yang sama dengan kluster. Jika tidak, layanan Anda mungkin terganggu.

  2. Konfigurasikan Ingress.

    Salin konten berikut ke file bernama gray-ingress.yaml.

    • Untuk kluster dengan versi Kubernetes sebelum 1.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-cloud-a-base
                    servicePort: 20001
          - host: www.example.com
            http:
              paths:
                - backend:
                    serviceName: spring-cloud-a-gray
                    servicePort: 20001
                  path: /a
                  pathType: ImplementationSpecific
    • Untuk kluster dengan versi Kubernetes 1.19 atau yang lebih baru:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: cafe-ingress
      spec:
        ingressClassName: alb
        rules:
         - host: www.aliyundoc.com
           http:
            paths:
            # Konfigurasikan context path.
            - path: /a
              pathType: ImplementationSpecific
              backend:
                service:
                  name: spring-cloud-a-base
                  port:
                    number: 20001
         - host: www.example.com
           http:
            paths:
            # Konfigurasikan context path.
            - path: /a
              pathType: ImplementationSpecific
              backend:
                service:
                  name: spring-cloud-a-gray
                  port:
                    number: 20001
  3. Jalankan perintah berikut:

    kubectl apply -f gray-ingress.yaml

    Jalankan perintah berikut untuk memverifikasi bahwa resource Ingress canary telah dibuat dan gray-ingress telah mendapatkan ADDRESS dari ALB.

    shell@Alicloud:~$ kubectl get ing
    NAME            CLASS    HOSTS                        ADDRESS                                                PORTS   AGE
    cafe-ingress    alb      *                            alb-828vagckg5omzfy49n.cn-beijing.alb.aliyuncs.com     80      29h
    gray-ingress    <none>   www.base.com,www.gray.com    alb-828vagckg5omzfy4yn.cn-beijing.alb.aliyuncs.com     80      28n

    Jika tidak ada endpoint yang ditampilkan di kolom ADDRESS, periksa event dan lakukan troubleshooting dengan merujuk ke bagian "Sebelum memulai".

Langkah 2: Konfigurasikan peluncuran kanari ujung ke ujung MSE

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

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

  3. Klik Create Lane Group and Lane. Jika grup lane sudah ada, klik + Create Lane Group.

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

    Tambahkan aplikasi spring-cloud-a, spring-cloud-b, dan spring-cloud-c ke grup lane.

  5. Di bagian bawah halaman End-to-end Canary Release, klik Create First Split Lane. Pada panel Create Lane, konfigurasikan parameter lane, pilih tag gray, lalu klik OK.

Langkah 3: Verifikasi hasil

  • Permintaan ke www.aliyundoc.com diarahkan ke lingkungan dasar.

    # Perintah pengujian
    curl -H"Host:www.aliyundoc.com" http://alb-828vagckg5omzfy49n.cn-beijing.alb.aliyuncs.com/a
    # Hasil pengujian
    A[172.18.XX.XX] -> B[172.18.XX.XX] -> C[172.18.XX.XX]%
  • Permintaan ke www.example.com diarahkan ke lingkungan canary.

    # Perintah pengujian
    curl -H"Host:www.example.com" http://alb-828vagckg5omzfy49n.cn-beijing.alb.aliyuncs.com/a
    # Hasil pengujian
    Agray[172.18.XX.XX] -> Bgray[172.18.XX.XX] -> Cgray[172.18.XX.XX]%
Catatan

Pada perintah di atas, alb-828vagckg5omzfy49n.cn-beijing.alb.aliyuncs.com adalah titik akhir gerbang ALB Ingress.