Gateway multi-cluster Application Load Balancer (ALB) dari Distributed Cloud Container Platform for Kubernetes (ACK One) dapat digunakan bersama GitOps ACK One atau fitur distribusi aplikasi multi-cluster untuk mengimplementasikan pemulihan bencana antar-zona secara cepat. Hal ini memastikan ketersediaan tinggi bisnis Anda dan mengalihkan lalu lintas secara otomatis ketika terjadi gangguan. Topik ini menjelaskan cara membangun sistem pemulihan bencana antar-zona menggunakan gateway multi-cluster.
Ikhtisar Pemulihan Bencana
Solusi pemulihan bencana di cloud dapat diklasifikasikan ke dalam jenis-jenis berikut:
Pemulihan bencana antar-zona: Solusi ini mencakup redundansi zona aktif dan pemulihan bencana primer/sekunder. Latensi jaringan antara pusat data dalam wilayah yang sama rendah, sehingga cocok untuk melindungi data dari peristiwa berbahaya tingkat zona seperti kebakaran, gangguan jaringan, dan pemadaman listrik. Meskipun metode pencadangan dan pemulihan data sederhana, solusi ini berlaku untuk skenario umum.
Redundansi geo-aktif: Latensi jaringan antara pusat data lebih tinggi jika menggunakan solusi ini, tetapi efektif melindungi data dari bencana tingkat wilayah seperti banjir dan gempa bumi.
Pemulihan bencana berbasis tiga pusat data di dua zona: Solusi ini menggabungkan manfaat pemulihan bencana antar-zona dan redundansi geo-aktif, cocok untuk memastikan kontinuitas dan ketersediaan aplikasi.
Arsitektur bisnis suatu perusahaan biasanya dibagi menjadi lapisan-lapisan berikut: lapisan akses, lapisan aplikasi, dan lapisan data.
Lapisan akses: Berfungsi sebagai titik masuk untuk lalu lintas masuk dan mengarahkannya ke lapisan aplikasi backend berdasarkan aturan pengalihan.
Lapisan aplikasi: Menampung aplikasi dan memproses lalu lintas masuk sebelum mengirimkan hasilnya kembali ke lapisan atas.
Lapisan data: Menyimpan data dan menyediakan layanan penyimpanan serta data untuk lapisan aplikasi.
Untuk membangun sistem pemulihan bencana, langkah-langkah pemulihan harus diterapkan pada setiap lapisan.
Lapisan akses: ACK One menggunakan gateway multi-cluster untuk membangun lapisan akses dengan dukungan pemulihan bencana antar-zona, memastikan ketersediaan tinggi.
Lapisan aplikasi: Gateway multi-cluster ACK One mendukung redundansi zona aktif, pemulihan bencana primer/sekunder, dan redundansi geo.
Lapisan data: Pemulihan bencana dan sinkronisasi data pada lapisan ini memiliki dependensi middleware.
Manfaat
Pemulihan bencana menggunakan gateway multi-cluster ACK One menawarkan keuntungan berikut dibandingkan dengan pendekatan berbasis distribusi lalu lintas DNS:
Pendekatan berbasis DNS memerlukan beberapa alamat IP load balancer (satu untuk setiap kluster), sedangkan gateway multi-cluster hanya menggunakan satu alamat IP di satu wilayah dengan penyebaran multi-zona default untuk memastikan ketersediaan tinggi.
Gateway multi-cluster mendukung pengalihan permintaan di Lapisan 7, yang tidak didukung oleh pendekatan berbasis DNS.
Pendekatan berbasis DNS sering kali memerlukan penyimpanan hasil Kueri DNS selama pergantian alamat IP, menyebabkan gangguan layanan sementara. Gateway multi-cluster menyelesaikan masalah ini dengan gagal alih ke pod backend di kluster lain secara mulus.
Sebagai gateway tingkat wilayah, semua operasi dapat diselesaikan pada instance Fleet tanpa perlu menginstal Ingress controller atau membuat Ingress di setiap kluster Container Service for Kubernetes (ACK). Ini membantu mengelola lalu lintas di wilayah dan mengurangi biaya manajemen multi-kluster.
Arsitektur
Contoh ini menggunakan aplikasi web untuk menunjukkan cara menggunakan gateway multi-cluster ALB dalam pemulihan bencana antar-zona. Aplikasi web terdiri dari Deployment dan Service. Gambar berikut menunjukkan arsitektur sistem pemulihan bencana antar-zona.
Buat Kluster 1 dan Kluster 2 di AZ 1 dan AZ 2 di wilayah China (Hong Kong).
Gunakan GitOps ACK One untuk mendistribusikan aplikasi ke Kluster 1 dan Kluster 2.
Gunakan AlbConfig untuk membuat gateway multi-cluster ALB pada instance Fleet ACK One.
Setelah gateway dibuat, konfigurasikan aturan Ingress untuk mengarahkan lalu lintas berdasarkan bobot dan header permintaan. Jika salah satu kluster down, lalu lintas dialihkan secara otomatis ke kluster lainnya.
Sinkronisasi data berbasis ApsaraDB RDS memiliki dependensi middleware.
Prasyarat
ALB telah diaktifkan.
Fitur manajemen Fleet telah diaktifkan.
Instance Fleet ACK One terhubung dengan dua kluster ACK yang berada dalam virtual private cloud (VPC) yang sama. Untuk informasi lebih lanjut, lihat Kelola kluster terkait.
File kubeconfig instance Fleet diperoleh di Konsol ACK One, dan klien kubectl terhubung ke instance Fleet.
Versi terbaru Alibaba Cloud CLI telah diinstal dan Alibaba Cloud CLI telah dikonfigurasi.
Langkah 1: Gunakan GitOps atau fitur distribusi aplikasi untuk mendistribusikan aplikasi ke beberapa kluster
ACK One memungkinkan Anda menggunakan GitOps atau fitur distribusi aplikasi untuk mendistribusikan aplikasi ke beberapa kluster. Untuk informasi lebih lanjut, lihat Memulai dengan GitOps, Buat Aplikasi Multi-Kluster, dan Memulai dengan Distribusi Aplikasi. Dalam langkah ini, GitOps digunakan.
Masuk ke Konsol ACK One. Di panel navigasi kiri, pilih .
Di sudut kiri atas halaman Multi-cluster Applications, klik
di sebelah kanan nama instance Fleet dan pilih instance Fleet Anda dari daftar drop-down.Pilih untuk pergi ke halaman Create Multi-cluster Application - GitOps.
CatatanJika GitOps belum diaktifkan untuk instance Fleet ACK One, aktifkan GitOps. Untuk informasi lebih lanjut, lihat Aktifkan GitOps untuk Instance Fleet.
Untuk informasi lebih lanjut tentang cara mengaktifkan akses Internet ke GitOps, lihat Aktifkan Akses Publik ke Argo CD.
Di tab Create from YAML, salin template YAML berikut ke editor kode. Lalu, klik OK untuk menerapkan aplikasi.
CatatanTemplate YAML berikut digunakan untuk menerapkan aplikasi bernama
web-demoke setiap kluster terkait. Anda juga dapat memilih kluster tempat Anda ingin menerapkan aplikasi di tab Quick Create. Perubahan konfigurasi yang Anda buat di tab Pembuatan Cepat akan disinkronkan secara otomatis ke template YAML di tab Create from YAML.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
Langkah 2: Gunakan kubectl untuk menerapkan gateway multi-cluster ALB dari instance Fleet ACK One
Anda dapat menggunakan AlbConfig untuk membuat gateway multi-cluster ALB dari instance Fleet ACK One dan menghubungkan kluster dengan gateway tersebut.
Peroleh ID dua vSwitch yang termasuk dalam VPC tempat instance Fleet ACK One berada.
Buat file bernama
gateway.yamldan salin konten berikut ke file tersebut.CatatanGanti
${vsw-id1}dan${vsw-id2}dengan ID vSwitch yang diperoleh dari langkah sebelumnya, serta ganti${cluster1}dan${cluster2}dengan ID kluster terkait yang ingin Anda tambahkan.Untuk kluster terkait
${cluster1}dan${cluster2}, konfigurasikan aturan masuk grup keamanan mereka untuk mengizinkan akses dari semua alamat IP dan port blok CIDR vSwitch.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: ackone-gateway-demo annotations: # Tentukan ID kluster yang ingin Anda hubungkan dengan instance 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-demoKonfigurasikan parameter berikut.
Parameter
Wajib
Deskripsi
metadata.nameYa
Nama AlbConfig.
metadata.annotations:alb.ingress.kubernetes.io/remote-clustersYa
Daftar kluster terkait yang akan ditambahkan ke gateway multi-cluster ALB. ID kluster yang terdaftar di sini telah terhubung dengan instance Fleet.
spec.config.nameTidak
Nama instance ALB.
spec.config.addressTypeTidak
Tipe jaringan instance ALB. Nilai valid:
Internet (default): Jaringan publik. Instance ALB menyediakan layanan ke Internet dan dapat diakses melalui Internet.
CatatanUntuk memungkinkan instance ALB menyediakan layanan berorientasi Internet, instance ALB perlu dikaitkan dengan alamat IP elastis (EIP). Jika Anda menggunakan instance ALB berorientasi Internet, Anda akan dikenakan biaya instance dan biaya bandwidth atau transfer data untuk EIP terkait. Untuk informasi lebih lanjut, lihat Bayar sesuai pemakaian.
Intranet: Jaringan pribadi. Instance ALB menyediakan layanan dalam VPC dan tidak dapat diakses melalui Internet.
spec.config.zoneMappingsYa
ID vSwitch yang dikaitkan dengan instance ALB. Untuk informasi lebih lanjut tentang cara membuat vSwitch, lihat Buat dan kelola vSwitches.
CatatanvSwitch yang ditentukan harus ditempatkan di zona yang didukung oleh instance ALB dan ditempatkan di VPC yang sama dengan kluster. Untuk informasi lebih lanjut tentang wilayah dan zona yang didukung oleh ALB, lihat Wilayah dan zona.
ALB mendukung penyebaran multi-zona. Jika wilayah saat ini mendukung dua zona atau lebih, pilih vSwitch di setidaknya dua zona untuk memastikan ketersediaan tinggi.
spec.listenersTidak
Port dan protokol listener instance ALB. Contoh yang disediakan dalam topik ini mengonfigurasi listener HTTP di port 8001.
Listener mendefinisikan bagaimana ALB menerima lalu lintas. Kami merekomendasikan agar Anda mempertahankan konfigurasi listener. Jika tidak, Anda harus membuat listener sebelum dapat menggunakan Ingress ALB.
Jalankan perintah berikut untuk menerapkan file
gateway.yamlguna membuat gateway multi-cluster ALB dan IngressClass:kubectl apply -f gateway.yamlTunggu 1 hingga 3 menit dan jalankan perintah berikut untuk memeriksa apakah gateway multi-cluster ALB telah dibuat:
kubectl get albconfig ackone-gateway-demoKeluaran yang diharapkan:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE ackone-gateway-demo alb-xxxx alb-xxxx.<regionid>.alb.aliyuncs.com 4d9hJalankan perintah berikut untuk memeriksa apakah kluster terkait terhubung ke gateway:
kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'ID kluster terkait dikembalikan dalam keluaran.
Langkah 3: Gunakan Ingress untuk mengimplementasikan pemulihan bencana antar-zona
Gateway multi-cluster menggunakan Ingress untuk mengelola lalu lintas lintas kluster. Anda dapat membuat objek Ingress pada instance Fleet ACK One untuk mengimplementasikan redundansi zona aktif.
Buat namespace bernama
gateway-demo, yang sama dengan namespace tempat Service yang Anda buat di langkah sebelumnya berada.Buat file bernama
ingress-demo.yamldan salin konten berikut ke file tersebut.CatatanJumlah semua bobot yang ditentukan dalam anotasi
alb.ingress.kubernetes.io/cluster-weightharus 100.Aturan pengalihan
/svc1di bawah nama domainexample.comdigunakan untuk mengekspos Service backend bernamaservice1. Ganti${cluster1-id}dan${cluster2-id}dengan ID kluster aktual.
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: 80Jalankan perintah berikut untuk menerapkan Ingress pada instance Fleet ACK One:
kubectl apply -f ingress-demo.yaml -n gateway-demo
Langkah 4: Verifikasi redundansi zona aktif
Arahkan lalu lintas ke kluster berbeda berdasarkan rasio
Jalankan perintah berikut untuk mengakses aplikasi web:
curl -H "host: alb.ingress.alibaba.com" alb-xxxx.<regionid>.alb.aliyuncs.com:<listeners port>/svc1Konfigurasikan parameter berikut.
Parameter | Deskripsi |
| Setel nilai ke nama domain di kolom |
| Setel nilai ke 8001, yang merupakan nilai yang ditentukan dalam konfigurasi AlbConfig dan |
Jalankan perintah berikut. Keluaran menunjukkan bahwa 20% lalu lintas diarahkan ke Kluster 1 (poc-ack-1) dan 80% lalu lintas diarahkan ke Kluster 2 (poc-ack-2).
for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncs.com:8001/svc1; done > res.txt
Alihkan lalu lintas secara otomatis dan mulus ketika terjadi gangguan di salah satu kluster
Jalankan perintah berikut. Kemudian, kurangi jumlah pod aplikasi di Kluster 2 menjadi 0. Setelah perubahan tersebut berlaku, lalu lintas secara otomatis dialihkan ke Kluster 1 secara mulus.
for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncs.com:8001/svc1; sleep 1; done