All Products
Search
Document Center

Alibaba Cloud Service Mesh:Kelola aplikasi multi-kluster dengan ASM dan Karmada

Last Updated:Jun 21, 2026

Service Mesh (ASM) terintegrasi dengan Karmada (Kubernetes Armada) untuk menerapkan dan menjalankan aplikasi cloud-native di beberapa kluster Kubernetes tanpa memerlukan perubahan pada aplikasi. Karmada menyediakan otomatisasi plug-and-play untuk manajemen aplikasi multi-kluster dalam skenario cloud-native, dengan fitur utama seperti manajemen multi-cloud terpusat, ketersediaan tinggi, pemulihan dari kegagalan, dan penjadwalan lalu lintas. Topik ini menjelaskan cara menggunakan ASM dan Karmada untuk manajemen aplikasi multi-kluster.

Informasi latar belakang

Karmada menggunakan API native Kubernetes untuk mendefinisikan templat sumber daya federasi, sehingga memudahkan integrasi dengan alat Kubernetes yang sudah ada. Karmada juga menyediakan API PropagationPolicy mandiri untuk mendefinisikan persyaratan penjadwalan multi-kluster.

  • Karmada mendukung mekanisme pemetaan kebijakan 1:N, sehingga Anda tidak perlu menentukan batasan penjadwalan setiap kali membuat aplikasi federasi.

  • Saat menggunakan kebijakan default, Anda dapat berinteraksi langsung dengan API Kubernetes.

Mode kluster

Karmada dapat mengelola kluster anggota dalam dua mode: push dan pull. Perbedaan utama antara mode push dan pull terletak pada cara kluster anggota diakses saat manifes diterapkan.

Mode Push

Lapisan kontrol Karmada mengakses secara langsung kube-apiserver kluster anggota untuk mendapatkan status kluster dan menerapkan manifes.

Mode Pull

Lapisan kontrol Karmada tidak mengakses langsung kluster anggota. Sebagai gantinya, permintaan didelegasikan ke komponen agen bernama karmada-agent.

Setiap karmada-agent melayani satu kluster dan memiliki tanggung jawab berikut:

  • Mendaftarkan kluster ke Karmada (membuat objek Cluster).

  • Memelihara dan melaporkan status kluster ke Karmada (memperbarui status objek Cluster).

  • Memantau manifes dari ruang eksekusi Karmada (sebuah namespace dengan format karmada-es-<nama kluster>) dan menerapkannya ke kluster yang dilayaninya.

Komponen utama

Lapisan kontrol Karmada mencakup komponen-komponen berikut:

  • Karmada API Server

  • Karmada Controller Manager

  • Karmada Scheduler

etcd menyimpan objek API Karmada. API Server menyediakan titik akhir REST untuk semua komponen lainnya. Karmada Controller Manager bertindak atas objek API yang Anda buat melalui API server.

Prasyarat

  • Anda memiliki dua kluster ACK (dengan nama member1 dan member2 dalam contoh ini) dalam virtual private cloud (VPC) yang sama. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.

    Catatan
    • Topik ini menggunakan dua kluster dalam VPC yang sama sebagai contoh. Jika kluster Anda berada di VPC yang berbeda, Anda harus mengonfigurasi konektivitas jaringan antar-VPC.

    • Kami merekomendasikan penggunaan security group enterprise saat membuat kluster.

  • Anda telah membuat instans ASM (dengan nama mesh1 dalam contoh ini) dan mengonfigurasi kebijakan injeksi sidecar untuk namespace default. Untuk informasi selengkapnya, lihat Buat instans ASM dan Konfigurasi kebijakan injeksi sidecar.

  • Anda telah menerapkan instans kluster utama Karmada (dengan nama karmada-master dalam contoh ini) dan menambahkan dua kluster ACK (member1 dan member2) sebagai kluster anggota. Untuk informasi selengkapnya, lihat Instalasi Karmada.

  • Anda telah menambahkan kedua kluster ke instans ASM (mesh1) dan membuat gerbang masuk arsitektur tanpa server. Untuk informasi selengkapnya, lihat Tambahkan kluster ke instans ASM dan buat gerbang masuk arsitektur tanpa server.

Langkah 1: Terapkan aplikasi dengan Karmada

Topik ini menggunakan aplikasi sampel Bookinfo, mirip dengan proses yang dijelaskan dalam Gunakan gerbang arsitektur tanpa server ASM untuk ingress multi-kluster. Namun, alih-alih menerapkan versi reviews yang berbeda secara manual ke kluster terpisah, topik ini menunjukkan cara mencapai hasil yang sama dengan membuat PropagationPolicy Karmada di kluster karmada-master.

  1. Buat file bernama bookinfo-karmada.yaml dengan konten berikut.

    Lihat konten YAML

    # Layanan details
    apiVersion: v1
    kind: Service
    metadata:
      name: details
      labels:
        app: details
        service: details
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: details
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-details
      labels:
        account: details
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: details-v1
      labels:
        app: details
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: details
          version: v1
      template:
        metadata:
          labels:
            app: details
            version: v1
        spec:
          serviceAccountName: bookinfo-details
          containers:
          - name: details
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-details-v1:1.19.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Layanan ratings
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings
      labels:
        app: ratings
        service: ratings
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-ratings
      labels:
        account: ratings
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      labels:
        app: ratings
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ratings
          version: v1
      template:
        metadata:
          labels:
            app: ratings
            version: v1
        spec:
          serviceAccountName: bookinfo-ratings
          containers:
          - name: ratings
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-ratings-v1:1.19.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Layanan reviews
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews
      labels:
        app: reviews
        service: reviews
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-reviews
      labels:
        account: reviews
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v1
      labels:
        app: reviews
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v1
      template:
        metadata:
          labels:
            app: reviews
            version: v1
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v1:1.19.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v2
      labels:
        app: reviews
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v2
      template:
        metadata:
          labels:
            app: reviews
            version: v2
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v2:1.19.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v3
      labels:
        app: reviews
        version: v3
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v3
      template:
        metadata:
          labels:
            app: reviews
            version: v3
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v3:1.19.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Layanan productpage
    apiVersion: v1
    kind: Service
    metadata:
      name: productpage
      labels:
        app: productpage
        service: productpage
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: productpage
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-productpage
      labels:
        account: productpage
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: productpage-v1
      labels:
        app: productpage
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: productpage
          version: v1
      template:
        metadata:
          labels:
            app: productpage
            version: v1
        spec:
          serviceAccountName: bookinfo-productpage
          containers:
          - name: productpage
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-productpage-v1:1.19.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            securityContext:
              runAsUser: 1000
          volumes:
          - name: tmp
            emptyDir: {}
    ---
  2. Jalankan perintah berikut untuk menerapkan aplikasi Bookinfo di kluster utama Karmada:

    kubectl --kubeconfig /etc/karmada/karmada-apiserver.config apply -f bookinfo-karmada.yaml
    Catatan

    Secara default, file kubeconfig untuk kluster utama Karmada disimpan di /etc/karmada/karmada-apiserver.config. Jika Anda memilih jalur instalasi berbeda, ganti jalur setelah --kubeconfig dengan jalur yang benar.

  3. Buat file bernama propagation.yaml dengan konten berikut.

    apiVersion: policy.karmada.io/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: service-propagation
    spec:
      resourceSelectors:
        - apiVersion: v1
          kind: Service
          name: productpage
        - apiVersion: v1
          kind: Service
          name: details
        - apiVersion: v1
          kind: Service
          name: reviews
        - apiVersion: v1
          kind: Service
          name: ratings
      placement:
        clusterAffinity:
          clusterNames:
            - member1
            - member2
    ---
    apiVersion: policy.karmada.io/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: produtpage-propagation
    spec:
      resourceSelectors:
        - apiVersion: apps/v1
          kind: Deployment
          name: productpage-v1
        - apiVersion: v1
          kind: ServiceAccount
          name: bookinfo-productpage
      placement:
        clusterAffinity:
          clusterNames:
            - member1
    ---
    apiVersion: policy.karmada.io/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: details-propagation
    spec:
      resourceSelectors:
        - apiVersion: apps/v1
          kind: Deployment
          name: details-v1
        - apiVersion: v1
          kind: ServiceAccount
          name: bookinfo-details
      placement:
        clusterAffinity:
          clusterNames:
            - member2
    ---
    apiVersion: policy.karmada.io/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: reviews-propagation
    spec:
      resourceSelectors:
        - apiVersion: apps/v1
          kind: Deployment
          name: reviews-v1
        - apiVersion: apps/v1
          kind: Deployment
          name: reviews-v2
        - apiVersion: apps/v1
          kind: Deployment
          name: reviews-v3
        - apiVersion: v1
          kind: ServiceAccount
          name: bookinfo-reviews
      placement:
        clusterAffinity:
          clusterNames:
            - member1
            - member2
    ---
    apiVersion: policy.karmada.io/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: ratings-propagation
    spec:
      resourceSelectors:
        - apiVersion: apps/v1
          kind: Deployment
          name: ratings-v1
        - apiVersion: v1
          kind: ServiceAccount
          name: bookinfo-ratings
      placement:
        clusterAffinity:
          exclude:
            - member1
    

    Field .spec.placement.clusterAffinity dalam PropagationPolicy mendefinisikan batasan penjadwalan untuk kluster tertentu. Tanpa batasan ini, kluster mana pun dapat menjadi kandidat penjadwalan.

    Anda dapat mengonfigurasi empat field berikut:

    Parameter

    Deskripsi

    labelSelector

    Filter untuk memilih kluster anggota berdasarkan label mereka. Jika field ini tidak kosong, hanya kluster yang sesuai dengan filter yang dipilih.

    fieldSelector

    Filter untuk memilih kluster anggota berdasarkan field mereka. Jika field ini tidak kosong, hanya kluster yang sesuai dengan filter yang dipilih.

    clusterNames

    Daftar nama kluster untuk secara eksplisit dimasukkan dalam pemilihan.

    exclude

    Daftar nama kluster untuk secara eksplisit dikecualikan dari pemilihan.

    Contoh ini hanya menggunakan field clusterNames dan exclude. Untuk informasi selengkapnya tentang field .spec.placement.clusterAffinity, lihat Resource Propagating dalam dokumentasi Karmada.

  4. Jalankan perintah berikut untuk menerapkan PropagationPolicy:

    kubectl --kubeconfig /etc/karmada/karmada-apiserver.config apply -f propagation.yaml
  5. Gunakan file kubeconfig untuk kluster member1 dan member2 untuk melihat Deployment di masing-masing kluster.

    1. member1

      kubectl --kubeconfig member1 get deployment

      Output yang diharapkan:

      NAME             READY   UP-TO-DATE   AVAILABLE   AGE
      productpage-v1   1/1     1            1           12m
      reviews-v1       1/1     1            1           12m
      reviews-v2       1/1     1            1           12m
      reviews-v3       1/1     1            1           12m
    2. member2

      kubectl --kubeconfig member2 get deployment

      Output yang diharapkan:

      NAME         READY   UP-TO-DATE   AVAILABLE   AGE
      details-v1   1/1     1            1           16m
      ratings-v1   1/1     1            1           16m
      reviews-v1   1/1     1            1           16m
      reviews-v2   1/1     1            1           16m
      reviews-v3   1/1     1            1           16m

Langkah 2: Tambahkan virtual service dan gateway

  1. Di namespace default, buat virtual service bernama bookinfo dengan konten berikut. Untuk informasi selengkapnya, lihat Kelola virtual service.

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: bookinfo
    spec:
      hosts:
      - "*"
      gateways:
      - bookinfo-gateway
      http:
      - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        route:
        - destination:
            host: productpage
            port:
              number: 9080
  2. Di namespace default, buat gateway bernama bookinfo-gateway dengan konten berikut. Untuk informasi selengkapnya, lihat Kelola gateway.

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway # gunakan controller default istio
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"

Langkah 3: Verifikasi akses

  1. Dapatkan alamat IP gerbang masuk. Untuk informasi selengkapnya, lihat Dapatkan alamat IP gerbang masuk.

  2. Pada browser Anda, masukkan http://{IP_address_of_the_serverless_ingress_gateway}/productpage dan refresh halaman beberapa kali. Halaman akan bergiliran menampilkan tiga versi layanan reviews, dengan distribusi lalu lintas yang kurang lebih merata. Meskipun reviews-v3 berada di kluster yang berbeda dari beberapa layanan lainnya, layanan tersebut berfungsi sebagaimana mestinya.

    Halaman reviews-v3 menampilkan bintang merah di bagian "Book Reviews" dan menunjukkan Reviews served by: reviews-v3-xxx di bagian bawah, yang menandakan versi layanan saat ini.

    Halaman reviews-v2 menampilkan bintang hitam di bagian "Book Reviews" dan menunjukkan Reviews served by: reviews-v2-xxx di bagian bawah.

    Halaman reviews-v1 hanya menampilkan teks ulasan tanpa peringkat bintang dan menampilkan instans layanan, seperti reviews-v1-586d96b89c-6v5p8, di bagian bawah.

Dokumen terkait

Aplikasi federasi sangat berguna untuk kolaborasi lintas organisasi. Aplikasi ini memungkinkan pemanfaatan informasi secara efektif sekaligus melindungi privasi dan keamanan data. Untuk informasi selengkapnya, lihat Federation in Computing.