全部产品
Search
文档中心

Microservices Engine:Konfigurasikan rilis canary ujung ke ujung berdasarkan gateway ALB Ingress

更新时间:Jul 06, 2025

Dalam arsitektur mikroservis, beberapa kebutuhan pengembangan mungkin melibatkan perubahan pada beberapa aplikasi mikro dalam pemanggilan mikro. Dalam banyak kasus, lingkungan atau grup canary diterapkan untuk setiap aplikasi mikro guna menerima lalu lintas canary. Untuk memastikan lalu lintas mengalir dari lingkungan canary aplikasi hulu ke lingkungan canary aplikasi hilir, Anda harus memastikan bahwa permintaan melewati lingkungan canary. Dalam hal ini, bahkan jika beberapa aplikasi mikro yang terlibat dalam proses pemanggilan tidak memiliki lingkungan canary masing-masing, permintaan tetap dapat diarahkan ke lingkungan canary aplikasi hilir. Anda dapat menggunakan fitur perutean fleksibel yang disediakan oleh Alibaba Cloud Application Load Balancer (ALB) Ingress gateways dan kemampuan rilis canary ujung ke ujung yang disediakan oleh Microservices Engine (MSE) untuk memenuhi persyaratan tersebut tanpa perlu mengubah kode bisnis Anda.

Proses implementasi

Perhatian

  • Jika Anda menggunakan plugin jaringan Flannel, layanan backend dari gateway ALB Ingress harus bertipe NodePort atau LoadBalancer.

  • vSwitch dari gateway ALB Ingress harus ditempatkan di virtual private cloud (VPC) yang sama dengan klaster ACK. Untuk wilayah yang didukung oleh gateway ALB Ingress, lihat Wilayah dan zona yang didukung.

Contoh skenario: Implementasikan rilis canary ujung ke ujung menggunakan perutean berbasis nama domain

Dalam contoh ini, arsitektur aplikasi terdiri dari gateway ALB Ingress dan Spring Cloud. Spring Cloud adalah arsitektur mikroservis backend. Pemanggilan layanan backend melibatkan tiga aplikasi: pusat transaksi (Aplikasi A), pusat komoditas (Aplikasi B), dan pusat inventaris (Aplikasi C). Akses berbasis klien atau HTML ke layanan backend didukung. Instance Nacos digunakan untuk penemuan layanan antar aplikasi.

Anda dapat menggunakan nama domain yang berbeda untuk membedakan antara lingkungan dasar online dan lingkungan canary. Untuk lingkungan canary, Anda dapat mengonfigurasi nama domain secara terpisah. Misalnya, permintaan yang ditujukan ke www.example.com diarahkan ke lingkungan canary, dan permintaan yang ditujukan ke www.aliyundoc.com diarahkan ke lingkungan dasar.

Gambar berikut menunjukkan proses pemanggilan layanan. Pemanggilan layanan dimulai dalam urutan berikut: ALB Ingress gateway > Aplikasi A > Aplikasi B > Aplikasi C. Aplikasi A bisa menjadi aplikasi Spring Boot.

场景

Persiapan

Buat klaster ACK

Buat klaster ACK dengan versi Kubernetes V1.18 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat klaster ACK yang dikelola atau Buat klaster ACK khusus (tidak dilanjutkan).

Gunakan kubectl untuk terhubung ke klaster ACK

Gunakan kubectl untuk terhubung ke klaster ACK. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig klaster dan gunakan kubectl untuk terhubung ke klaster.

Instal komponen ALB Ingress Controller

Instal komponen ALB Ingress Controller di klaster ACK dengan menggunakan salah satu metode berikut:

  • Saat membuat klaster ACK, pilih ALB Ingress untuk Ingress di langkah Component Configuration untuk menginstal komponen ALB Ingress Controller di klaster.

  • Untuk klaster ACK yang sudah ada, Anda dapat menginstal komponen ALB Ingress Controller di halaman Add-ons. Untuk informasi lebih lanjut, lihat Kelola komponen.

Aktifkan Pengelolaan Mikroservis MSE untuk aplikasi

  1. Di tab Pengelolaan Mikroservis, aktifkan Edisi Profesional Pengelolaan Mikroservis.

    Untuk informasi lebih lanjut tentang penagihan Pengelolaan Mikroservis, lihat Ikhtisar Penagihan Pengelolaan Mikroservis.

  2. Aktifkan Pengelolaan Mikroservis untuk aplikasi mikroservis di klaster Container Service for Kubernetes (ACK). Anda dapat memilih metode yang sesuai berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Aktifkan Pengelolaan Mikroservis untuk aplikasi mikroservis Java di klaster ACK atau ACS.

    Aktifkan Pengelolaan Mikroservis untuk aplikasi di namespace ACK

    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. Di kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.

      image

      Parameter

      Deskripsi

      Cluster type

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

      Catatan

      Jika Anda belum memberikan izin kepada ACK untuk memanggil MSE, Anda perlu mengklik tautan untuk melakukan otorisasi.

      Cluster Name/ID

      Pilih Cluster Name/ID untuk mana Anda ingin mengaktifkan Pengelolaan Mikroservis. Anda dapat menggunakan kata kunci untuk mencari nama atau ID klaster.

      ack-onepilot

      Tampilkan status komponen ack-onepilot. Untuk informasi tentang komponen ack-onepilot dan cara memperbaruinya, lihat ack-onepilot dan Instal dan perbarui komponen Pengelolaan Mikroservis.

      • Jika komponen ack-onepilot belum diinstal, klik Click Install di sebelah kanan ack-onepilot. Setelah instalasi selesai, status komponen ack-onepilot akan ditampilkan sebagai Installed.

      • Jika Anda melakukan operasi sebagai pengguna RAM dan pesan muncul, menunjukkan bahwa Anda tidak memiliki izin untuk melakukan operasi, Anda dapat masuk ke Konsol ACK, dan klik nama klaster. Di halaman yang muncul, pilih Operations > Add-ons. Di halaman Add-ons, cari ack-onepilot dan klik Instal di kartu sumber daya.

      Catatan
      • Pada langkah ini, komponen ack-onepilot terlibat. Anda dapat masuk ke Konsol ACK, dan klik nama klaster. Di halaman yang muncul, pilih Operations > Add-ons untuk melihat detail komponen.

      • Setelah komponen ack-onepilot diinstal, agen akan disuntikkan secara otomatis. Dalam hal ini, waktu startup aplikasi dapat meningkat hingga 10 detik.

      • Saat mengaktifkan Pengelolaan Mikroservis untuk namespace klaster, jika klaster yang diinginkan tidak berada di wilayah berikut, Anda harus memastikan bahwa klaster dapat mengakses Internet dan terhubung ke acm.aliyun.com:8080: China (Qingdao), China (Hangzhou), China (Beijing), China (Shanghai), China East 2 Finance, China (Shenzhen), China (Hong Kong), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).

      Access Type

      Pilih Namespace Access.

      ACK Cluster Namespace

      Pilih ACK Cluster Namespace.

      Microservices Governance Namespace

      Pilih Microservices Governance Namespace.

    Aktifkan Pengelolaan Mikroservis untuk 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. Di kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.

      image

      Parameter

      Deskripsi

      Cluster type

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

      Catatan

      Jika Anda belum memberikan izin kepada ACK untuk memanggil MSE, Anda perlu mengklik tautan untuk melakukan otorisasi.

      Cluster Name/ID

      Pilih Cluster Name/ID untuk mana Anda ingin mengaktifkan Pengelolaan Mikroservis. Anda dapat menggunakan kata kunci untuk mencari nama atau ID klaster.

      ack-onepilot

      Tampilkan status komponen ack-onepilot. Untuk informasi tentang komponen ack-onepilot dan cara memperbaruinya, lihat ack-onepilot dan Instal dan perbarui komponen Pengelolaan Mikroservis.

      • Jika komponen ack-onepilot belum diinstal, klik Click Install di sebelah kanan ack-onepilot. Setelah instalasi selesai, status komponen ack-onepilot akan ditampilkan sebagai Installed.

      • Jika Anda melakukan operasi sebagai pengguna RAM dan pesan muncul, menunjukkan bahwa Anda tidak memiliki izin untuk melakukan operasi, Anda dapat masuk ke Konsol ACK, dan klik nama klaster. Di halaman yang muncul, pilih Operations > Add-ons. Di halaman Add-ons, cari ack-onepilot dan klik Instal di kartu sumber daya.

      Catatan
      • Pada langkah ini, komponen ack-onepilot terlibat. Anda dapat masuk ke Konsol ACK, dan klik nama klaster. Di halaman yang muncul, pilih Operations > Add-ons untuk melihat detail komponen.

      • Setelah komponen ack-onepilot diinstal, agen akan disuntikkan secara otomatis. Dalam hal ini, waktu startup aplikasi dapat meningkat hingga 10 detik.

      Access Type

      Pilih Single Application Access.

      Access Procedure

      Lakukan langkah-langkah berikut:

      Step 1: Go to the ACK console, and click the cluster name. In the left-side navigation pane of the page that appears, choose Workloads > Deployments. Then, select the namespace to which the application belongs.

      Step 2: Click the name of the application. On the page that appears, click View in YAML.

      Step 3: Edit labels in the following format and click Update.

      spec:
        template:
          metadata:
            labels:
              # Nilai on menunjukkan bahwa Pengelolaan Mikroservis diaktifkan. Nilai on harus diapit tanda kutip ganda (").
              msePilotAutoEnable: "on"
              # Namespace mikroservis MSE tempat aplikasi Anda berada. Jika namespace yang Anda tentukan tidak ada, namespace dengan nama yang ditentukan akan dibuat secara otomatis.
              mseNamespace: 202401
              # Nama sebenarnya dari aplikasi tempat Pengelolaan Mikroservis diaktifkan. Nama tersebut harus diapit tanda kutip ganda (").
              msePilotCreateAppName: "your-deployment-name"

Deploy aplikasi demo

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

  2. Di halaman Clusters, temukan klaster yang ingin Anda kelola dan klik namanya. Di panel kiri, pilih Workloads > Deployments.

  3. Di halaman Deployments, pilih namespace dan klik Create from YAML. Lalu, konfigurasikan parameter, dan klik Create.

    Dalam contoh ini, Aplikasi A, B, dan C diterapkan. Versi dasar dan versi canary diterapkan untuk setiap aplikasi. Sebuah aplikasi bernama nacos-server diterapkan untuk mengimplementasikan penemuan layanan.

    # Kode YAML untuk 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
    
    # Kode YAML untuk 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
    
    # Kode YAML untuk 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
    
    # Kode YAML untuk 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
    
    # Kode YAML untuk 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
    
    # Kode YAML untuk 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
    
    # Server Nacos
    ---
    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
    
    # Kode YAML untuk 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
                    

Konfigurasikan pengaturan jaringan

Konfigurasikan dua layanan Kubernetes spring-cloud-a-base dan spring-cloud-a-gray untuk Aplikasi A yang berfungsi sebagai aplikasi ingress. Layanan spring-cloud-a-base sesuai dengan versi dasar Aplikasi A. Layanan spring-cloud-a-gray sesuai dengan versi canary 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

---
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 rute untuk gateway ALB Ingress

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

    Penting

    Pastikan vSwitch dari gateway ALB Ingress ditempatkan di VPC yang sama dengan klaster. Jika tidak, bisnis Anda akan terpengaruh secara negatif.

  2. Konfigurasikan Ingress.

    Salin konten berikut ke file gray-ingress.yaml.

    • Klaster yang menjalankan versi Kubernetes lebih awal dari 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
    • Klaster 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:
            # Tentukan jalur konteks.
            - path: /a
              pathType: ImplementationSpecific
              backend:
                service:
                  name: spring-clud-a-base
                  port:
                    number: 20001
         - host: www.example.com
           http:
            paths:
            # Tentukan jalur konteks.
            - path: /a
              pathType: ImplementationSpecific
              backend:
                service:
                  name: spring-clud-a-base-gray
                  port:
                    number: 20001
  3. Jalankan perintah berikut:

    kubectl apply -f gray-ingress.yaml

    执行命令Jika tidak ada informasi yang ditampilkan untuk ADDRESS di output, buka halaman berikut untuk melihat acara dan pemecahan masalah berdasarkan bagian "Persiapan" dalam topik ini.

Langkah 2: Konfigurasikan fitur rilis canary ujung ke ujung 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 untuk Create Lane Group. Jika grup jalur sudah dibuat di ruang mikro yang Anda pilih, klik+untuk Create Lane Group.

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

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

  5. Di bagian bawah halaman Full link grayscale, klik Create First Split Lane. Di panel Create Lane, konfigurasikan parameter, pilih tag gray, lalu klik OK.

Langkah 3: Verifikasi hasil

  • Arahkan permintaan yang ditujukan ke www.aliyundoc.com ke versi dasar aplikasi.

    # Perintah uji
    curl -H"Host:aliyundoc.base.com" http://alb-828vagckg5omzfy49n.cn-beijing.alb.aliyuncs.com/a
    # Hasil uji
    A[172.18.XX.XX] -> B[172.18.XX.XX] -> C[172.18.XX.XX]%
  • Arahkan permintaan yang ditujukan ke www.example.com ke versi canary aplikasi.

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

Dalam perintah sebelumnya, alb-828vagck5omzfy49n.cn-beijing.alb.aliyuncs.com menunjukkan titik akhir dari gateway ALB Ingress.