全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan gerbang multi-kluster ACK One MSE untuk menerapkan pemulihan bencana antarzona

更新时间:Jan 07, 2026

Gerbang multi-kluster adalah gateway cloud-native yang disediakan oleh ACK One untuk lingkungan multi-cloud dan multi-kluster. Gerbang ini memanfaatkan Ingress Microservices Engine (MSE) terkelola dan API Ingress untuk mengelola lalu lintas utara-selatan Lapisan 7. Gerbang multi-kluster mendukung pemulihan bencana antarzona otomatis dan rilis bertahap berbasis header, yang menyederhanakan operasi dan pemeliharaan (O&M) aplikasi multi-kluster serta mengurangi biaya. Ketika dikombinasikan dengan kemampuan ACK One GitOps, Anda dapat dengan cepat membangun sistem zona redundansi aktif atau pemulihan bencana primer/sekunder. Sistem ini tidak mencakup pemulihan bencana data.

Tinjauan pemulihan bencana

Solusi pemulihan bencana di cloud meliputi hal-hal berikut:

  • Pemulihan Bencana Antar-AZ dalam Satu Kota

    Pemulihan bencana antarzona mencakup zona redundansi aktif dan pemulihan bencana primer/sekunder. Latensi jaringan antar pusat data dalam wilayah yang sama rendah, sehingga pemulihan bencana antarzona cocok untuk melindungi data dari bencana tingkat zona, seperti kebakaran, gangguan jaringan, atau pemadaman listrik.

  • Pemulihan bencana aktif-aktif lintas wilayah

    Solusi pemulihan bencana aktif-aktif lintas wilayah memiliki latensi jaringan yang lebih tinggi antar pusat data, namun melindungi data dari bencana tingkat wilayah, seperti gempa bumi dan banjir.

  • Tiga pusat data di dua wilayah

    Solusi ini menggabungkan pemulihan bencana antarzona dual-center dan pemulihan bencana lintas wilayah, sehingga menawarkan manfaat keduanya dan cocok untuk skenario yang memerlukan kontinuitas serta ketersediaan aplikasi dan data yang tinggi.

Dalam praktiknya, pemulihan bencana antarzona lebih mudah diterapkan untuk data dibandingkan pemulihan bencana lintas wilayah, sehingga tetap menjadi solusi yang sangat penting.

Manfaat

Rencana pemulihan bencana yang menggunakan gerbang multi-kluster memiliki keunggulan berikut dibandingkan rencana berbasis distribusi trafik DNS:

  • Rencana berbasis DNS memerlukan beberapa alamat IP Server Load Balancer (SLB), satu untuk setiap kluster. Sebaliknya, rencana berbasis gerbang multi-kluster hanya memerlukan satu alamat IP SLB di tingkat wilayah dan secara default menyediakan ketersediaan tinggi di beberapa zona dalam wilayah yang sama.

  • Rencana berbasis gerbang multi-kluster mendukung routing dan penerusan Lapisan 7, sedangkan rencana berbasis DNS tidak.

  • Dalam rencana berbasis DNS, klien sering menyimpan cache alamat IP, yang dapat menyebabkan gangguan layanan singkat selama pergantian alamat IP. Sebaliknya, rencana berbasis gerbang multi-kluster dapat melakukan failover trafik secara mulus ke layanan backend kluster lainnya.

  • Gerbang multi-kluster merupakan sumber daya tingkat wilayah. Semua operasi—seperti membuat gerbang dan sumber daya Ingress—dapat dilakukan pada instans armada tanpa perlu menginstal pengontrol Ingress atau membuat sumber daya Ingress di setiap kluster ACK. Hal ini memungkinkan manajemen trafik global di tingkat wilayah dan mengurangi biaya manajemen multi-kluster.

Arsitektur

Gerbang multi-kluster ACK One diimplementasikan menggunakan Ingress MSE terkelola. Ketika dikombinasikan dengan kemampuan distribusi aplikasi multi-kluster dari ACK One GitOps, Anda dapat dengan cepat menerapkan sistem pemulihan bencana antarzona untuk aplikasi Anda. Topik ini menggunakan contoh penyebaran aplikasi sampel dengan GitOps ke dua kluster ACK (Kluster 1 dan Kluster 2) di zona berbeda dalam wilayah China (Hong Kong) untuk menunjukkan cara menerapkan zona redundansi aktif dan pemulihan bencana primer/sekunder.

Aplikasi sampel dalam topik ini adalah aplikasi web yang mencakup sumber daya Deployment dan Service. Gambar berikut menunjukkan arsitektur rencana pemulihan bencana antarzona yang menggunakan gerbang multi-kluster.image.png

  • Buat gerbang MSE menggunakan sumber daya MseIngressConfig di armada ACK One.

  • Buat dua kluster ACK, Kluster 1 dan Kluster 2, di dua zona ketersediaan (AZ) berbeda, AZ 1 dan AZ 2, dalam wilayah yang sama.

  • Gunakan ACK One GitOps untuk mendistribusikan aplikasi ke Kluster 1 dan Kluster 2 yang telah dibuat.

  • Setelah gerbang multi-kluster dibuat, Anda dapat mengatur aturan trafik untuk mengarahkan trafik berdasarkan bobot atau ke kluster tertentu berdasarkan header permintaan. Jika salah satu kluster mengalami anomali, trafik akan secara otomatis diarahkan ke kluster lainnya.

Prasyarat

Langkah 1: Gunakan GitOps untuk mendeploy aplikasi ke beberapa kluster

Deploy menggunakan UI ArgoCD

  1. Masuk ke Konsol ACK One. Di panel navigasi sebelah kiri, pilih Fleet > Multi-cluster GitOps.

  2. Pada halaman GitOps, klik GitOps Console.

    Catatan
    • Jika GitOps belum diaktifkan untuk instans armada ACK One, klik Enable GitOps Now untuk masuk ke GitOps Console.

    • Untuk mengakses GitOps melalui jaringan publik, lihat Aktifkan akses publik ke GitOps.

  3. Tambahkan repositori aplikasi.

    1. Di panel navigasi sebelah kiri UI Argo CD, pilih Settings. Lalu, pilih Repositories > + Connect Repo.

    2. Pada panel yang muncul, konfigurasikan parameter berikut dan klik CONNECT.

      Area

      Parameter

      Nilai

      Choose your connection method

      -

      VIA HTTP/HTTPS

      CONNECT REPO USING HTTP/HTTPS

      Type

      git

      Project

      default

      Repository URL

      https://github.com/AliyunContainerService/gitops-demo.git

      Skip server verification

      Pilih kotak centang ini.

      image.png

      Setelah repositori terhubung, STATUS KONEKSI repositori Git berubah menjadi Berhasil.

      image.png

  4. Buat aplikasi.

    Pada halaman Applications di ArgoCD, klik + NEW APP dan konfigurasikan parameter berikut.

    Bagian

    Parameter

    Deskripsi

    UMUM

    Nama Aplikasi

    Masukkan nama aplikasi kustom.

    Nama Proyek

    default

    KEBIJAKAN SYNC

    Pilih kebijakan sinkronisasi sesuai kebutuhan. Nilai yang valid:

    • Manual: Saat terjadi perubahan di repositori Git, Anda harus secara manual menyinkronkan perubahan tersebut ke kluster tujuan.

    • Otomatis: Server ArgoCD memeriksa perubahan di repositori Git setiap 3 menit dan secara otomatis menerapkannya ke kluster tujuan.

    OPSI SYNC

    Pilih AUTO-CREATE NAMESPACE.

    SUMBER

    URL Repositori

    Pilih repositori Git yang Anda tambahkan pada langkah sebelumnya dari daftar tarik-turun. Dalam contoh ini, pilih https://github.com/AliyunContainerService/gitops-demo.git.

    Revisi

    Pilih Cabang: gateway-demo.

    Jalur

    manifests/helm/web-demo

    TUJUAN

    URL Kluster

    Pilih URL Kluster 1 atau Kluster 2.

    Anda juga dapat mengklik URL di sebelah kanan dan memilih kluster berdasarkan NAMA KLUSTER.

    Namespace

    Topik ini menggunakan gateway-demo. Sumber daya aplikasi, seperti Service dan Deployment, akan dibuat di namespace ini.

    Helm

    Parameter

    Atur nilai envCluster menjadi cluster-demo-1 atau cluster-demo-2 untuk membedakan kluster backend mana yang memproses permintaan.

Deploy menggunakan CLI ArgoCD

  1. Aktifkan GitOps pada instans armada ACK One. Untuk informasi selengkapnya, lihat Aktifkan GitOps pada instans armada ACK One.

  2. Akses ArgoCD. Untuk informasi selengkapnya, lihat Akses ArgoCD menggunakan CLI ArgoCD.

  3. Buat dan publikasikan aplikasi.

    1. Jalankan perintah berikut untuk menambahkan repositori Git.

      argocd repo add https://github.com/AliyunContainerService/gitops-demo.git --name ackone-gitops-demos

      Output yang diharapkan:

      Repository 'https://github.com/AliyunContainerService/gitops-demo.git' added
    2. Jalankan perintah berikut untuk melihat daftar repositori Git yang telah ditambahkan.

      argocd repo list

      Output yang diharapkan:

      TYPE  NAME  REPO                                                       INSECURE  OCI    LFS    CREDS  STATUS      MESSAGE  PROJECT
      git         https://github.com/AliyunContainerService/gitops-demo.git  false     false  false  false  Successful           default
    3. Jalankan perintah berikut untuk melihat daftar kluster.

      argocd cluster list

      Output yang diharapkan:

      SERVER                          NAME                                        VERSION  STATUS      MESSAGE                                                  PROJECT
      https://1.1.XX.XX:6443      c83f3cbc90a****-temp01   1.22+    Successful
      https://2.2.XX.XX:6443      c83f3cbc90a****-temp02   1.22+    Successful
      https://kubernetes.default.svc  in-cluster                                           Unknown     Cluster has no applications and is not being monitored.
    4. Gunakan Application untuk membuat dan mempublikasikan aplikasi demo ke kluster tujuan.

      1. Buat file apps-web-demo.yaml dengan konten berikut.

        Ganti repoURL dengan alamat repositori aktual Anda.

        Lihat file apps-web-demo.yaml

        apiVersion: argoproj.io/v1alpha1
        kind: Application
        metadata:
          name: app-demo-cluster1
          namespace: argocd
        spec:
          destination:
            namespace: gateway-demo
            # https://1.1.XX.XX:6443
            server: ${cluster1_url}
          project: default
          source:
            helm:
              releaseName: "web-demo"
              parameters:
              - name: envCluster
                value: cluster-demo-1
              valueFiles:
              - values.yaml
            path: manifests/helm/web-demo
            repoURL: https://github.com/AliyunContainerService/gitops-demo.git
            targetRevision: gateway-demo
          syncPolicy:
            syncOptions:
            - CreateNamespace=true
        ---
        apiVersion: argoproj.io/v1alpha1
        kind: Application
        metadata:
          name: app-demo-cluster1
          namespace: argocd
        spec:
          destination:
            namespace: gateway-demo
            server: ${cluster2_url}
          project: default
          source:
            helm:
              releaseName: "web-demo"
              parameters:
              - name: envCluster
                value: cluster-demo-2
              valueFiles:
              - values.yaml
            path: manifests/helm/web-demo
            repoURL: https://github.com/AliyunContainerService/gitops-demo.git
            targetRevision: gateway-demo
          syncPolicy:
            syncOptions:
            - CreateNamespace=true
      2. Jalankan perintah berikut untuk mendeploy aplikasi.

        kubectl apply -f apps-web-demo.yaml
      3. Jalankan perintah berikut untuk melihat daftar aplikasi.

        argocd app list

        Output yang diharapkan:

        # app list
        NAME                      CLUSTER                  NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO                                                       PATH                     TARGET
        argocd/web-demo-cluster1  https://10.1.XX.XX:6443             default  Synced  Healthy  Auto        <none>      https://github.com/AliyunContainerService/gitops-demo.git  manifests/helm/web-demo  main
        argocd/web-demo-cluster2  https://10.1.XX.XX:6443             default  Synced  Healthy  Auto        <none>      https://github.com/AliyunContainerService/gitops-demo.git  manifests/helm/web-demo  main

Langkah 2: Gunakan kubectl di instans armada untuk membuat gerbang multi-kluster

Buat objek MseIngressConfig di armada ACK One untuk membuat gerbang multi-kluster dan menambahkan kluster terkait ke dalamnya.

  1. Peroleh dan catat ID vSwitch dari instans armada ACK One. Untuk informasi selengkapnya, lihat Peroleh ID vSwitch.

  2. Buat file gateway.yaml dengan konten berikut.

    Catatan
    • Ganti ${vsw-id1} dan ${vsw-id2} dengan ID vSwitch yang diperoleh dari langkah sebelumnya, dan ganti ${cluster1} dan ${cluster2} dengan ID kluster terkait yang ingin Anda tambahkan.

    • Untuk kluster terkait ${cluster1} dan ${cluster2}, Anda harus mengonfigurasi aturan masuk grup keamanan mereka untuk mengizinkan akses dari semua alamat IP dan port dalam blok CIDR vSwitch.

    apiVersion: mse.alibabacloud.com/v1alpha1
    kind: MseIngressConfig
    metadata:
      annotations:
        mse.alibabacloud.com/remote-clusters: ${cluster1},${cluster2}
      name: ackone-gateway-hongkong
    spec:
      common:
        instance:
          replicas: 3
          spec: 2c4g
        network:
          vSwitches:
          - ${vsw-id}
      ingress:
        local:
          ingressClass: mse
      name: mse-ingress

    Parameter

    Deskripsi

    mse.alibabacloud.com/remote-clusters

    Kluster yang akan ditambahkan ke gerbang multi-kluster. Masukkan ID kluster yang sudah dikaitkan dengan instans armada.

    spec.name

    Nama instans gerbang.

    spec.common.instance.spec

    Opsional. Tipe instans gerbang. Nilai default adalah 4c8g.

    spec.common.instance.replicas

    Opsional. Jumlah replika gerbang. Defaultnya adalah 3.

    spec.ingress.local.ingressClass

    Opsional. Nama ingressClass yang akan didengarkan. Artinya mendengarkan semua Ingress di instans armada tempat bidang ingressClass diatur ke mse.

  3. Jalankan perintah berikut untuk mendeploy gerbang multi-kluster.

    kubectl apply -f gateway.yaml
  4. Jalankan perintah berikut untuk memverifikasi bahwa gerbang multi-kluster telah dibuat dan berada dalam status listening.

    kubectl get mseingressconfig ackone-gateway-hongkong

    Output yang diharapkan:

    NAME                      STATUS      AGE
    ackone-gateway-hongkong   Listening   3m15s

    Status gerbang dalam output adalah Listening. Ini menunjukkan bahwa gateway cloud-native telah dibuat, berjalan, dan secara otomatis mendengarkan sumber daya Ingress dengan IngressClass mse di kluster.

    Status gerbang yang dibuat dari MseIngressConfig berubah dalam urutan berikut: Pending, Running, dan Listening. Deskripsi status:

    • Pending: Gateway cloud-native sedang dibuat. Proses ini mungkin memakan waktu sekitar 3 menit.

    • Running: Gateway cloud-native telah dibuat dan berjalan.

    • Listening: Gateway cloud-native berjalan dan mendengarkan Ingress.

    • Failed: Gateway cloud-native berada dalam kondisi abnormal. Anda dapat memeriksa pesan di bidang Status untuk mengidentifikasi penyebabnya.

  5. Jalankan perintah berikut untuk memastikan bahwa kluster terkait berhasil ditambahkan.

    kubectl get mseingressconfig ackone-gateway-hongkong -ojsonpath="{.status.remoteClusters}"

    Output yang diharapkan:

    [{"clusterId":"c7fb82****"},{"clusterId":"cd3007****"}]

    Output mencakup ID kluster yang ditentukan dan tidak ada pesan Failed. Ini menunjukkan bahwa kluster terkait telah berhasil ditambahkan ke gerbang multi-kluster.

Langkah 3: Gunakan Ingress untuk menerapkan pemulihan bencana antarzona

Gerbang multi-kluster menggunakan Ingress untuk mengelola trafik di beberapa kluster. Anda dapat membuat objek Ingress di instans armada ACK One untuk menerapkan zona redundansi aktif dan pemulihan bencana primer/sekunder.

Penting

Pastikan Anda telah membuat namespace gateway-demo di instans armada. Ingress yang dibuat di sini harus berada dalam namespace yang sama dengan Service dalam aplikasi demo yang dideploy pada langkah sebelumnya, yaitu gateway-demo.

Pemulihan Bencana Zona Redundansi Aktif

Buat Ingress untuk menerapkan zona redundansi aktif

Buat objek Ingress berikut di instans armada ACK One untuk menerapkan zona redundansi aktif.

Secara default, trafik diseimbangkan ke setiap replika layanan backend dengan nama yang sama di kedua kluster yang ditambahkan ke gerbang multi-kluster. Jika backend Kluster 1 mengalami anomali, gerbang secara otomatis mengarahkan seluruh trafik ke Kluster 2. Jika rasio replika Kluster 1 terhadap Kluster 2 adalah 9:1, maka secara default 90% trafik diarahkan ke Kluster 1 dan 10% ke Kluster 2. Jika semua backend di Kluster 1 mengalami anomali, 100% trafik secara otomatis diarahkan ke Kluster 2. Gambar berikut menunjukkan topologinya.image.png

  1. Buat file ingress-demo.yaml dengan konten berikut.

    Dalam kode berikut, layanan backend service1 diekspos melalui aturan routing /svc1 di bawah nama domain example.com.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: web-demo
    spec:
      ingressClassName: mse
      rules:
      - host: example.com
        http:
          paths:
          - path: /svc1
            pathType: Exact
            backend:
              service:
                name: service1
                port: 
                  number: 80
  2. Jalankan perintah berikut untuk mendeploy Ingress di instans armada ACK One.

    kubectl apply -f ingress-demo.yaml -n gateway-demo

Verifikasi versi rilis canary

Dalam skenario zona redundansi aktif, Anda dapat memverifikasi versi rilis canary aplikasi tanpa memengaruhi layanan Anda.

Buat aplikasi baru di kluster yang sudah ada. Bedakan aplikasi ini dari aplikasi asli hanya berdasarkan nama dan selector Service dan Deployment. Kemudian, gunakan header permintaan untuk memverifikasi aplikasi baru tersebut.

  1. Buat file new-app.yaml di Kluster 1 dengan konten berikut. Hanya Service dan Deployment yang berbeda dari aplikasi asli.

    apiVersion: v1       
    kind: Service
    metadata:
      name: service1-canary-1
      namespace: gateway-demo
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: web-demo-canary-1
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-demo-canary-1
      namespace: gateway-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web-demo-canary-1
      template:
        metadata:
          labels:
            app: web-demo-canary-1
        spec:
          containers:
            - env:
                - name: ENV_NAME
                  value: cluster-demo-1-canary
              image: 'registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.6.0'
              imagePullPolicy: Always
              name: web-demo
  2. Jalankan perintah berikut untuk mendeploy aplikasi baru di Kluster 1.

    kubectl apply -f new-app.yaml
  3. Buat file new-ingress.yaml dengan konten berikut.

    Buat Ingress berbasis header di instans armada. Tambahkan anotasi untuk mengaktifkan fitur canary dan tentukan header. Gunakan header canary-dest: cluster1 dalam permintaan untuk mengarahkan trafik ke versi rilis canary guna verifikasi.

    • nginx.ingress.kubernetes.io/canary: Atur ke "true" untuk mengaktifkan fitur rilis canary.

    • nginx.ingress.kubernetes.io/canary-by-header: Kunci header untuk permintaan ke kluster ini.

    • nginx.ingress.kubernetes.io/canary-by-header-value: Nilai header untuk permintaan ke kluster ini.

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: web-demo-canary-1
        namespace: gateway-demo
        annotations:
          nginx.ingress.kubernetes.io/canary: "true"
          nginx.ingress.kubernetes.io/canary-by-header: "canary-dest"
          nginx.ingress.kubernetes.io/canary-by-header-value: "cluster1"
      spec:
        ingressClassName: mse
        rules:
        - host: example.com
          http:
            paths:
            - path: /svc1
              pathType: Exact
              backend:
                service:
                  name: service1-canary-1
                  port: 
                    number: 80
  4. Jalankan perintah berikut untuk mendeploy Ingress berbasis header di instans armada.

    kubectl apply -f new-ingress.yaml

Verifikasi zona redundansi aktif

Ubah jumlah replika yang dideploy ke Kluster 1 menjadi 9 dan jumlah replika yang dideploy ke Kluster 2 menjadi 1. Hasil yang diharapkan adalah trafik diarahkan ke Kluster 1 dan Kluster 2 dengan rasio 9:1 secara default. Ketika Kluster 1 mengalami anomali, seluruh trafik secara otomatis diarahkan ke Kluster 2.

Jalankan perintah berikut untuk memperoleh alamat IP publik gerbang multi-kluster.

kubectl get ingress web-demo -n gateway-demo -ojsonpath="{.status.loadBalancer}"
  • Trafik default diarahkan ke kedua kluster berdasarkan rasio

    Jalankan perintah berikut untuk memeriksa routing trafik.

    Ganti XX.XX.XX.XX dengan alamat IP publik gerbang multi-kluster yang Anda peroleh pada langkah sebelumnya.

    for i in {1..100}; do curl -H "host: example.com" XX.XX.XX.XX done

    Output yang diharapkan: image.pngOutput menunjukkan bahwa trafik diseimbangkan ke Kluster 1 dan Kluster 2. Rasio trafik antara Kluster 1 dan Kluster 2 adalah 9:1.

  • Seluruh trafik dialihkan ke Kluster 2 saat Kluster 1 mengalami anomali

    Jika Anda mengubah jumlah replika Deployment di Kluster 1 menjadi 0, output berikut akan dikembalikan. Ini menunjukkan bahwa trafik telah secara otomatis dialihkan ke Kluster 2.image.png

  • Arahkan permintaan ke versi rilis canary menggunakan header

    Jalankan perintah berikut untuk memeriksa routing trafik.

    Ganti XX.XX.XX.XX dengan alamat IP yang diperoleh setelah aplikasi dan Ingress dideploy seperti yang dijelaskan di bagian Verifikasi versi rilis canary.

    for i in {1..100}; do curl -H "host: example.com" -H "canary-dest: cluster1" xx.xx.xx.xx/svc1; sleep 1;  done  

    Output yang diharapkan: image.pngOutput menunjukkan bahwa permintaan dengan header canary-dest: cluster1 semuanya diarahkan ke versi rilis canary di Kluster 1.

Pemulihan bencana primer/sekunder

Buat objek Ingress berikut di instans armada ACK One untuk menerapkan pemulihan bencana primer/sekunder.

Ketika backend kedua kluster dalam kondisi normal, trafik hanya diarahkan ke backend layanan Kluster 1. Jika backend Kluster 1 mengalami anomali, gerbang secara otomatis mengarahkan trafik ke Kluster 2. Gambar berikut menunjukkan topologinya.image.png

Buat Ingress untuk menerapkan pemulihan bencana primer/sekunder

  1. Buat file ingress-demo-cluster-one.yaml dengan konten berikut.

    Tambahkan anotasi mse.ingress.kubernetes.io/service-subset dan mse.ingress.kubernetes.io/subset-labels ke file YAML objek Ingress untuk menggunakan /service1 di bawah nama domain example.com guna mengekspos Service backend service1. Untuk informasi selengkapnya tentang anotasi yang didukung oleh Ingress MSE, lihat Anotasi yang didukung oleh gerbang Ingress MSE.

    • mse.ingress.kubernetes.io/service-subset: Nama subset layanan. Kami menyarankan Anda menentukan nilai yang dapat dibaca terkait dengan kluster tujuan.

    • mse.ingress.kubernetes.io/subset-labels: Menentukan ID kluster tujuan.

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        annotations:
          mse.ingress.kubernetes.io/service-subset: cluster-demo-1
          mse.ingress.kubernetes.io/subset-labels: |
            topology.istio.io/cluster ${cluster1-id}
        name: web-demo-cluster-one
      spec:
        ingressClassName: mse
        rules:
        - host: example.com
          http:
            paths:
            - path: /service1
              pathType: Exact
              backend:
                service:
                  name: service1
                  port: 
                    number: 80
  2. Jalankan perintah berikut untuk mendeploy Ingress di instans armada ACK One.

    kubectl apply -f ingress-demo-cluster-one.yaml -ngateway-demo

Terapkan rilis canary tingkat kluster

Gerbang multi-kluster mendukung pembuatan Ingress berbasis header untuk mengarahkan permintaan ke kluster tertentu. Anda dapat menggunakan kemampuan ini, bersama dengan kemampuan load balancing replika penuh dari objek Ingress yang dijelaskan di bagian Buat Ingress untuk menerapkan pemulihan bencana primer/sekunder, untuk menerapkan rilis canary berbasis header.

  1. Buat Ingress seperti yang dijelaskan di Buat Ingress untuk menerapkan pemulihan bencana primer/sekunder.

  2. Buat Ingress dengan anotasi terkait header di instans armada ACK One untuk menerapkan rilis canary tingkat kluster. Ketika header permintaan sesuai dengan konfigurasi Ingress, permintaan diarahkan ke backend versi rilis canary.

    1. Buat file ingress-demo-cluster-gray.yaml dengan konten berikut.

      Dalam file YAML untuk objek Ingress berikut, ganti ${cluster1-id} dengan ID kluster target. Selain anotasi mse.ingress.kubernetes.io/service-subset dan mse.ingress.kubernetes.io/subset-labels, tambahkan anotasi berikut untuk mengekspos layanan backend service1 untuk aturan routing /service1 dari nama domain example.com.

      • nginx.ingress.kubernetes.io/canary: Atur ke "true" untuk mengaktifkan fitur rilis canary.

      • nginx.ingress.kubernetes.io/canary-by-header: Kunci header untuk permintaan ke kluster ini.

      • nginx.ingress.kubernetes.io/canary-by-header-value: Nilai header untuk permintaan ke kluster ini.

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        annotations:
          mse.ingress.kubernetes.io/service-subset: cluster-demo-2
          mse.ingress.kubernetes.io/subset-labels: |
            topology.istio.io/cluster ${cluster2-id}
          nginx.ingress.kubernetes.io/canary: "true"
          nginx.ingress.kubernetes.io/canary-by-header: "app-web-demo-version"
          nginx.ingress.kubernetes.io/canary-by-header-value: "gray"
        name: web-demo-cluster-gray
      spec:
        ingressClassName: mse
        rules:
        - host: example.com
          http:
            paths:
            - path: /service1
              pathType: Exact
              backend:
                service:
                  name: service1
                  port: 
                    number: 80
    2. Jalankan perintah berikut untuk mendeploy Ingress di instans armada ACK One.

      kubectl apply -f ingress-demo-cluster-gray.yaml -n gateway-demo

Verifikasi pemulihan bencana primer/sekunder

Untuk mempermudah verifikasi, ubah jumlah replika yang dideploy ke Kluster 1 dan Kluster 2 masing-masing menjadi 1. Hasil yang diharapkan adalah trafik default hanya diarahkan ke Kluster 1, trafik dengan header canary diarahkan ke Kluster 2, dan ketika aplikasi di Kluster 1 mengalami anomali, trafik default juga diarahkan ke Kluster 2.

Jalankan perintah berikut untuk memperoleh alamat IP publik gerbang multi-kluster.

kubectl get ingress web-demo -n gateway-demo -ojsonpath="{.status.loadBalancer}"
  • Trafik default diarahkan ke Kluster 1

    Jalankan perintah berikut untuk memeriksa apakah trafik default diarahkan ke Kluster 1.

    Ganti XX.XX.XX.XX dengan alamat IP publik gerbang multi-kluster yang Anda peroleh pada langkah sebelumnya.

    for i in {1..100}; do curl -H "host: example.com" xx.xx.xx.xx/service1; sleep 1;  done

    Output yang diharapkan: image.pngOutput menunjukkan bahwa seluruh trafik default diarahkan ke Kluster 1.

  • Arahkan permintaan ke versi rilis canary menggunakan header

    Jalankan perintah berikut untuk memeriksa apakah permintaan dengan header diarahkan ke versi rilis canary.

    Ganti XX.XX.XX.XX dengan alamat IP publik gerbang multi-kluster yang Anda peroleh pada langkah sebelumnya.

    for i in {1..50}; do curl -H "host: example.com" -H "app-web-demo-version: gray" xx.xx.xx.xx/service1; sleep 1;  done

    Output yang diharapkan: image.pngOutput menunjukkan bahwa permintaan dengan header app-web-demo-version: gray semuanya diarahkan ke Kluster 2 (versi rilis canary).

  • Trafik dialihkan ke Kluster 2 saat Kluster 1 mengalami anomali

    Jika Anda mengubah jumlah replika Deployment di Kluster 1 menjadi 0, output berikut akan dikembalikan. Ini menunjukkan bahwa trafik telah secara otomatis dialihkan ke Kluster 2.image.png

Referensi