Gateway multi-klaster Application Load Balancer (ALB) dari Distributed Cloud Container Platform for Kubernetes (ACK One) dapat digunakan bersama dengan ACK One GitOps atau fitur distribusi aplikasi multi-klaster untuk mengimplementasikan pemulihan bencana zona secara cepat. Ini memungkinkan Anda memastikan ketersediaan tinggi bisnis dan secara otomatis beralih lalu lintas secara mulus ketika terjadi gangguan. Topik ini menjelaskan cara membangun sistem pemulihan bencana zona menggunakan gateway multi-klaster.
Ikhtisar Pemulihan Bencana
Solusi pemulihan bencana di cloud dapat diklasifikasikan ke dalam jenis-jenis berikut:
Pemulihan bencana zona: Solusi ini mencakup redundansi zona aktif dan pemulihan bencana primer/sekunder. Latensi jaringan antara pusat data di wilayah yang sama rendah. Oleh karena itu, solusi ini cocok untuk melindungi data terhadap peristiwa berbahaya tingkat zona seperti kebakaran, gangguan jaringan, dan pemadaman listrik. Meskipun metode pencadangan dan pemulihan datanya sederhana, solusi ini berlaku untuk skenario umum.
Redundansi geo aktif: Latensi jaringan antara pusat data lebih tinggi jika menggunakan solusi redundansi geo aktif. Namun, solusi ini efektif melindungi data terhadap bencana tingkat wilayah seperti banjir dan gempa bumi.
Pemulihan bencana berdasarkan tiga pusat data di dua zona: Solusi ini menggabungkan manfaat pemulihan bencana zona dan redundansi geo aktif. Solusi ini cocok untuk skenario yang memerlukan kontinuitas dan ketersediaan aplikasi.
Secara umum, arsitektur bisnis suatu perusahaan dibagi menjadi lapisan-lapisan berikut dari atas ke bawah: lapisan akses, lapisan aplikasi, dan lapisan data.
Lapisan akses: Berfungsi sebagai titik masuk untuk lalu lintas masuk. Lapisan ini merutekan lalu lintas masuk ke lapisan aplikasi backend berdasarkan aturan pengalihan.
Lapisan aplikasi: Menampung aplikasi. Lapisan ini memproses lalu lintas masuk dan mengirimkan hasilnya kembali ke lapisan atas.
Lapisan data: Menyimpan data. Lapisan ini menyediakan layanan data dan penyimpanan untuk lapisan aplikasi.
Ketika membangun sistem pemulihan bencana untuk bisnis Anda, Anda perlu menerapkan langkah-langkah pemulihan pada setiap lapisan.
Lapisan akses: ACK One menggunakan gateway multi-klaster untuk membangun lapisan akses. Gateway multi-klaster ACK One mendukung pemulihan bencana zona, sehingga lapisan akses yang dibangun di atas ACK One sangat tersedia.
Lapisan aplikasi: ACK One menggunakan gateway multi-klaster untuk mengimplementasikan pemulihan bencana pada lapisan aplikasi. Gateway multi-klaster ACK One mendukung redundansi zona aktif, pemulihan bencana primer/sekunder, dan geo-redundansi.
Lapisan data: Pemulihan bencana dan sinkronisasi data pada lapisan data memiliki dependensi middleware.
Manfaat
Pemulihan bencana menggunakan gateway multi-klaster ACK One memiliki keuntungan berikut dibandingkan pemulihan bencana menggunakan distribusi lalu lintas DNS:
Pemulihan bencana menggunakan distribusi lalu lintas DNS memerlukan beberapa alamat IP load balancer (satu alamat IP untuk setiap klaster). Pemulihan bencana menggunakan gateway multi-klaster hanya menggunakan satu alamat IP load balancer di satu wilayah dan secara default menggunakan penyebaran multi-zona di wilayah yang sama untuk memastikan ketersediaan tinggi.
Pemulihan bencana menggunakan gateway multi-klaster mendukung pengalihan permintaan di Lapisan 7, sedangkan pemulihan bencana menggunakan distribusi lalu lintas DNS tidak mendukung fitur ini.
Dalam sebagian besar kasus, klien perlu menyimpan hasil Kueri DNS selama pergantian alamat IP dalam sistem pemulihan bencana yang menggunakan distribusi lalu lintas DNS. Hal ini menyebabkan gangguan layanan sementara. Pemulihan bencana menggunakan gateway multi-klaster menyelesaikan masalah ini dengan gagal secara mulus ke pod backend di klaster lain.
Gateway multi-klaster adalah gateway tingkat wilayah. Oleh karena itu, Anda dapat menyelesaikan semua operasi pada instance Fleet tanpa perlu menginstal Ingress controller atau membuat Ingress di setiap klaster Container Service for Kubernetes (ACK). Ini membantu Anda mengelola lalu lintas di wilayah dan mengurangi biaya manajemen multi-klaster.
Arsitektur
Dalam contoh ini, sebuah aplikasi web digunakan untuk menunjukkan cara menggunakan gateway multi-klaster ALB untuk mengimplementasikan pemulihan bencana zona. Aplikasi web terdiri dari Deployment dan Service. Gambar berikut menunjukkan arsitektur sistem pemulihan bencana zona.
Buat Klaster 1 dan Klaster 2 di AZ 1 dan AZ 2 di wilayah China (Hong Kong).
Gunakan ACK One GitOps untuk mendistribusikan aplikasi ke Klaster 1 dan Klaster 2.
Gunakan AlbConfig untuk membuat gateway multi-klaster ALB pada instance Fleet ACK One.
Setelah gateway multi-klaster ALB dibuat, Anda dapat mengonfigurasi aturan Ingress untuk merutekan lalu lintas ke klaster berdasarkan bobot dan header permintaan. Ketika salah satu klaster down, lalu lintas secara otomatis dialihkan ke klaster lainnya.
Sinkronisasi data berdasarkan ApsaraDB RDS memiliki dependensi middleware.
Prasyarat
ALB telah diaktifkan.
Fitur Manajemen Fleet telah diaktifkan.
Instance Fleet ACK One terhubung dengan dua klaster ACK yang diterapkan di virtual private cloud (VPC) yang sama dengan instance Fleet ACK One. Untuk informasi lebih lanjut, lihat Kelola klaster terhubung.
File kubeconfig dari 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 klaster
ACK One memungkinkan Anda menggunakan GitOps atau fitur distribusi aplikasi untuk mendistribusikan aplikasi ke beberapa klaster. Untuk informasi lebih lanjut, lihat Memulai dengan GitOps, Buat aplikasi multi-klaster, 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 klaster terhubung. Anda juga dapat memilih klaster tempat Anda ingin menerapkan aplikasi di tab Quick Create. Perubahan konfigurasi yang Anda buat di tab Buat 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-klaster ALB dari instance Fleet ACK One
Anda dapat menggunakan AlbConfig untuk membuat gateway multi-klaster ALB dari instance Fleet ACK One. Anda dapat mengaitkan klaster 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, dan ganti${cluster1}dan${cluster2}dengan ID klaster terhubung yang ingin Anda tambahkan.Untuk klaster terhubung
${cluster1}dan${cluster2}, Anda harus mengonfigurasi 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 klaster yang ingin Anda asosiasikan 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-demoAnda perlu mengonfigurasi parameter berikut.
Parameter
Wajib
Deskripsi
metadata.nameYa
Nama AlbConfig.
metadata.annotations:alb.ingress.kubernetes.io/remote-clustersYa
Daftar klaster terhubung yang akan ditambahkan ke gateway multi-klaster ALB. ID klaster 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 berbasis Internet, instance ALB perlu dikaitkan dengan alamat IP elastis (EIP). Jika Anda menggunakan instance ALB berbasis Internet, Anda akan dikenakan biaya instansiasi dan biaya bandwidth atau transfer data untuk EIP terkait. Untuk informasi lebih lanjut, lihat Bayar sesuai pemakaian.
Intranet: Jaringan privat. 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 klaster. 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 pada 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.yamluntuk membuat gateway multi-klaster ALB dan IngressClass:kubectl apply -f gateway.yamlTunggu 1 hingga 3 menit dan jalankan perintah berikut untuk memeriksa apakah gateway multi-klaster ALB 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 4d9hJalankan perintah berikut untuk memeriksa apakah klaster terhubung terhubung ke gateway:
kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'ID klaster terhubung dikembalikan dalam output.
Langkah 3: Gunakan Ingress untuk mengimplementasikan pemulihan bencana zona
Gateway multi-klaster menggunakan Ingress untuk mengelola lalu lintas lintas klaster. 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 klaster 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
Mengarahkan lalu lintas ke klaster 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>/svc1Anda perlu mengonfigurasi 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. Output menunjukkan bahwa 20% lalu lintas dialihkan ke Klaster 1 (poc-ack-1) dan 80% lalu lintas dialihkan ke Klaster 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
Beralih lalu lintas secara otomatis dan mulus ketika terjadi gangguan di salah satu klaster
Jalankan perintah berikut. Kemudian, kurangi jumlah pod aplikasi di Klaster 2 menjadi 0. Setelah perubahan diterapkan, lalu lintas secara otomatis beralih ke Klaster 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