Gerbang multi-kluster Application Load Balancer (ALB) pada Distributed Cloud Container Platform for Kubernetes (ACK One) memungkinkan Anda membangun sistem pemulihan bencana antarzona yang secara otomatis mengalihkan traffic antar kluster saat terjadi gangguan. Topik ini memandu Anda melalui penyebaran aplikasi di dua zona ketersediaan (AZ), konfigurasi gerbang multi-kluster ALB, dan verifikasi failover tanpa hambatan.
Model pemulihan bencana
Pemulihan bencana di cloud terbagi menjadi tiga model. Pilih model yang sesuai dengan tujuan pemulihan dan kompleksitas operasional Anda.
| Model | Melindungi dari | Trade-off |
|---|---|---|
| Pemulihan bencana antarzona | Kejadian tingkat zona: kebakaran, gangguan jaringan, pemadaman listrik | Latensi rendah antar pusat data dalam satu wilayah; lebih mudah diimplementasikan |
| Active geo-redundancy | Bencana tingkat wilayah: banjir, gempa bumi | Latensi antar pusat data lebih tinggi; perlindungan lebih kuat |
| Tiga pusat data di dua zona | Kegagalan tingkat zona maupun tingkat wilayah | Menggabungkan dua model di atas; kompleksitas tertinggi |
Pemulihan bencana antarzona mencakup dua sub-mode:
Active zone-redundancy: Kedua kluster melayani traffic aktif secara bersamaan.
Primary/secondary disaster recovery: Satu kluster menangani traffic sementara kluster lain tetap dalam mode siaga.
Lapisan arsitektur
Aplikasi enterprise tipikal memiliki tiga lapisan, masing-masing memerlukan strategi pemulihan bencana tersendiri:
| Lapisan | Peran | Cakupan ACK One |
|---|---|---|
| Lapisan akses | Titik masuk untuk traffic ingress; mengarahkan permintaan ke backend berdasarkan aturan pengalihan | Gerbang multi-kluster; pemulihan bencana antarzona didukung secara default |
| Application layer | Menampung dan memproses beban kerja aplikasi | Gerbang multi-kluster; mendukung active zone-redundancy, primary/secondary disaster recovery, dan geo-redundancy |
| Lapisan data | Menyimpan dan menyajikan data ke lapisan aplikasi | Tergantung middleware (misalnya, ApsaraDB RDS) |
Mengapa menggunakan gerbang multi-kluster
Gerbang multi-kluster menawarkan beberapa keunggulan dibanding distribusi traffic berbasis DNS:
Satu alamat IP per wilayah: Pendekatan berbasis DNS memerlukan satu alamat IP load balancer per kluster. Gerbang multi-kluster menggunakan satu alamat IP load balancer dan ditempatkan di beberapa zona dalam wilayah tersebut untuk ketersediaan tinggi bawaan.
Penerusan permintaan Lapisan 7: Gerbang multi-kluster mengarahkan traffic di Lapisan 7, memungkinkan aturan berbasis host dan path. Pendekatan berbasis DNS tidak mendukung penerusan permintaan Lapisan 7.
Seamless failover: Saat sebuah kluster mati, traffic segera dialihkan ke Pod yang sehat di kluster lain. Pendekatan berbasis DNS mengharuskan klien menyimpan cache hasil kueri DNS selama pergantian alamat IP, menyebabkan gangguan layanan sementara.
Manajemen terpusat: Gerbang multi-kluster adalah sumber daya tingkat wilayah yang dikelola dari instans Fleet. Tidak perlu menginstal controller Ingress atau membuat Ingress di setiap kluster Container Service for Kubernetes (ACK).
Arsitektur
Tutorial ini menggunakan aplikasi web (sebuah Deployment dan Service) untuk mendemonstrasikan pemulihan bencana antarzona di dua kluster.
Pengaturan ini bekerja sebagai berikut:
Kluster 1 dan Kluster 2 ditempatkan di AZ 1 dan AZ 2 dalam wilayah China (Hong Kong).
ACK One GitOps mendistribusikan aplikasi web ke kedua kluster.
AlbConfig pada instans Fleet ACK One membuat gerbang multi-kluster ALB yang mencakup kedua kluster.
Aturan Ingress pada instans Fleet mengarahkan traffic antar kluster berdasarkan bobot. Saat salah satu kluster tidak tersedia, gerbang secara otomatis mengalihkan traffic ke kluster lain.
Sinkronisasi data antar kluster menggunakan ApsaraDB RDS dan memiliki dependensi middleware.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengaktifkan ALB. Buka Konsol ALB untuk mengaktifkannya.
Mengaktifkan fitur manajemen Fleet. Lihat Aktifkan manajemen multi-kluster.
Memiliki instans Fleet ACK One yang dikaitkan dengan dua kluster ACK yang ditempatkan dalam virtual private cloud (VPC) yang sama. Lihat Kelola kluster terkait.
Mengunduh file kubeconfig instans Fleet dari Konsol ACK One dan menghubungkan kubectl ke instans Fleet.
Menginstal versi terbaru Alibaba Cloud CLI dan mengonfigurasinya.
Langkah 1: Distribusikan aplikasi ke beberapa kluster
ACK One mendukung dua pendekatan untuk mendistribusikan aplikasi ke beberapa kluster: GitOps dan fitur distribusi aplikasi multi-kluster. Tutorial ini menggunakan GitOps.
Masuk ke Konsol ACK One. Di panel navigasi kiri, pilih Fleet > Multi-cluster Applications.
Di sudut kiri atas halaman Multi-cluster Applications, klik
di samping nama instance Fleet, lalu pilih instance Fleet Anda dari daftar tarik-turun.Pilih Create Multi-cluster Application > GitOps untuk membuka halaman Create Multi-cluster Application - GitOps.
Jika GitOps belum diaktifkan untuk instans Fleet Anda, aktifkan terlebih dahulu. Lihat Aktifkan GitOps untuk instans Fleet. Untuk mengizinkan akses internet ke GitOps, lihat Aktifkan akses publik ke Argo CD.
Pada tab Create from YAML, tempel templat ApplicationSet berikut ke editor kode dan klik OK. Templat ini menyebarkan
web-demoke semua kluster yang dikaitkan dengan instans Fleet Anda. Sebagai alternatif, gunakan tab Quick Create untuk memilih kluster satu per satu — perubahan yang dilakukan di sana akan disinkronkan secara otomatis ke YAML ini.apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: appset-web-demo namespace: argocd spec: template: metadata: name: '{{.metadata.annotations.cluster_id}}-web-demo' namespace: argocd spec: destination: name: '{{.name}}' namespace: gateway-demo project: default source: repoURL: https://github.com/AliyunContainerService/gitops-demo.git path: manifests/helm/web-demo targetRevision: main helm: valueFiles: - values.yaml parameters: - name: envCluster value: '{{.metadata.annotations.cluster_name}}' syncPolicy: automated: {} syncOptions: - CreateNamespace=true generators: - clusters: selector: matchExpressions: - values: - cluster key: argocd.argoproj.io/secret-type operator: In - values: - in-cluster key: name operator: NotIn goTemplateOptions: - missingkey=error syncPolicy: preserveResourcesOnDeletion: false goTemplate: true
Untuk metode distribusi lainnya, lihat Memulai GitOps, Membuat aplikasi multi-kluster, dan Memulai distribusi aplikasi.
Langkah 2: Sebarkan gerbang multi-kluster ALB
Buat AlbConfig pada instans Fleet untuk menyediakan gerbang ALB yang mencakup kedua kluster.
Dapatkan ID dua vSwitch di VPC tempat instans Fleet Anda berada.
Buat file bernama
gateway.yamldengan konten berikut. Ganti${vsw-id1}dan${vsw-id2}dengan ID vSwitch, serta ganti${cluster1}dan${cluster2}dengan ID kluster terkait.Untuk
${cluster1}dan${cluster2}, konfigurasikan aturan masuk grup keamanan mereka agar mengizinkan akses dari semua alamat IP dan port dalam blok CIDR vSwitch.Parameter Wajib Deskripsi metadata.nameYa Nama AlbConfig. alb.ingress.kubernetes.io/remote-clustersYa Daftar ID kluster yang dipisahkan koma untuk dikaitkan dengan gerbang ALB. Kluster-kluster ini harus sudah dikaitkan dengan instans Fleet. spec.config.nameTidak Nama instans ALB. spec.config.addressTypeTidak Jenis jaringan: Internet(default) untuk akses publik, atauIntranethanya untuk akses internal VPC. Instans yang menghadap Internet memerlukan alamat IP elastis (EIP) dan dikenai biaya EIP. Lihat Pay-as-you-go.spec.config.zoneMappingsYa ID vSwitch untuk instans ALB. Tentukan vSwitch di minimal dua zona untuk ketersediaan tinggi. vSwitch harus berada di zona yang didukung oleh ALB dan dalam VPC yang sama dengan kluster. Lihat Wilayah dan zona tempat ALB tersedia dan Buat dan kelola vSwitch. spec.listenersTidak Port dan protokol pendengar. Contoh ini mengonfigurasi HTTP pada port 8001. Pertahankan konfigurasi pendengar — tanpa itu, Anda harus membuat pendengar secara manual sebelum Ingress ALB dapat mengarahkan traffic. apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: ackone-gateway-demo annotations: # Tentukan ID kluster yang ingin Anda kaitkan dengan instans ALB. alb.ingress.kubernetes.io/remote-clusters: ${cluster1},${cluster2} spec: config: name: one-alb-demo addressType: Internet addressAllocatedMode: Fixed zoneMappings: - vSwitchId: ${vsw-id1} - vSwitchId: ${vsw-id2} listeners: - port: 8001 protocol: HTTP --- apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: ackone-gateway-demoTerapkan konfigurasi:
kubectl apply -f gateway.yamlTunggu 1–3 menit, lalu verifikasi gerbang telah dibuat:
kubectl get albconfig ackone-gateway-demoOutput yang diharapkan:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE ackone-gateway-demo alb-xxxx alb-xxxx.<regionid>.alb.aliyuncs.com 4d9hCatat nilai
DNSNAME— Anda memerlukannya pada langkah verifikasi.Konfirmasi kedua kluster terhubung ke gerbang:
kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'Output menampilkan daftar ID kluster terkait.
Langkah 3: Konfigurasikan aturan Ingress untuk pemulihan bencana antarzona
Gerbang multi-kluster menggunakan objek Ingress pada instans Fleet untuk mengarahkan dan mendistribusikan traffic antar kluster.
Buat namespace bernama
gateway-demopada instans Fleet. Ini harus sesuai dengan namespace tempat Service aplikasi ditempatkan.Buat file bernama
ingress-demo.yamldengan konten berikut. Ganti${cluster1-id}dan${cluster2-id}dengan ID kluster aktual.Jumlah bobot dari semua anotasi
alb.ingress.kubernetes.io/cluster-weightharus berjumlah 100.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/listen-ports: | [{"HTTP": 8001}] alb.ingress.kubernetes.io/cluster-weight.${cluster1-id}: "20" alb.ingress.kubernetes.io/cluster-weight.${cluster2-id}: "80" name: web-demo namespace: gateway-demo spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /svc1 pathType: Prefix backend: service: name: service1 port: number: 80Terapkan Ingress:
kubectl apply -f ingress-demo.yaml -n gateway-demo
Langkah 4: Verifikasi active zone-redundancy
Distribusi traffic berbasis bobot
Gunakan perintah berikut untuk mengirim permintaan ke aplikasi. Ganti alb-xxxx.<regionid>.alb.aliyuncs.com dengan nilai DNSNAME dari Langkah 2.
curl -H "host: alb.ingress.alibaba.com" alb-xxxx.<regionid>.alb.aliyuncs.com:8001/svc1Port pendengar adalah 8001, sesuai dengan nilai yang ditetapkan di AlbConfig dan anotasi Ingress.
Untuk menguji distribusi traffic dalam 500 permintaan:
for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncs.com:8001/svc1; done > res.txtOutput menunjukkan sekitar 20% tanggapan berasal dari Kluster 1 (poc-ack-1) dan 80% dari Kluster 2 (poc-ack-2), sesuai dengan bobot yang dikonfigurasi di Ingress.

Automatic failover
Untuk mensimulasikan kegagalan kluster dan mengamati failover tanpa hambatan, jalankan loop permintaan berkelanjutan lalu skala jumlah Pod di Kluster 2 menjadi 0:
for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncs.com:8001/svc1; sleep 1; doneSetelah Pod di Kluster 2 dihapus, traffic secara otomatis dialihkan ke Kluster 1 tanpa gangguan.
