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
Di tab Pengelolaan Mikroservis, aktifkan Edisi Profesional Pengelolaan Mikroservis.
Untuk informasi lebih lanjut tentang penagihan Pengelolaan Mikroservis, lihat Ikhtisar Penagihan Pengelolaan Mikroservis.
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
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
Di halaman Application list, klik ACK Application Access.
Di kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.

Parameter
Deskripsi
Cluster type
Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.
CatatanJika 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.
CatatanPada 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
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
Di halaman Application list, klik ACK Application Access.
Di kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.

Parameter
Deskripsi
Cluster type
Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.
CatatanJika 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.
CatatanPada 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
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan klaster yang ingin Anda kelola dan klik namanya. Di panel kiri, pilih .
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: NodePortLangkah 1: Konfigurasikan rute untuk gateway ALB Ingress
Buat objek AlbConfig. Untuk informasi lebih lanjut, lihat Buat objek AlbConfig.
PentingPastikan vSwitch dari gateway ALB Ingress ditempatkan di VPC yang sama dengan klaster. Jika tidak, bisnis Anda akan terpengaruh secara negatif.
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: ImplementationSpecificKlaster 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
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
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Microservices Governance > Full link grayscale.
Klik untuk Create Lane Group. Jika grup jalur sudah dibuat di ruang mikro yang Anda pilih, klik+untuk Create Lane Group.
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.
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.comke 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.comke 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]%
Dalam perintah sebelumnya, alb-828vagck5omzfy49n.cn-beijing.alb.aliyuncs.com menunjukkan titik akhir dari gateway ALB Ingress.