Gunakan gerbang multi-kluster ALB untuk mengelola lalu lintas utara-selatan di beberapa kluster ACK—dengan zona redundansi aktif, load balancing, dan routing berbasis Header HTTP—tanpa perlu mengelola ingress controller terpisah untuk setiap kluster.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengaktifkan manajemen fleet — lihat Aktifkan manajemen multi-kluster
Memiliki instans ACK One Fleet yang dikaitkan dengan dua kluster ACK dalam virtual private cloud (VPC) yang sama — lihat Kelola kluster terkait
File kubeconfig instans Fleet yang diunduh dari ACK One console, digunakan bersama kubectl untuk terhubung ke instans Fleet.
Menginstal dan mengonfigurasi versi terbaru Alibaba Cloud CLI
Cara kerja
Trafik mengalir dari Internet melalui instans ALB menuju Pod di kluster terkait Anda:
Internet → Instans ALB → Instans ACK One Fleet → Kluster terkait 1 (Pod)
→ Kluster terkait 2 (Pod)Instans Fleet bertindak sebagai lapisan kontrol. Objek AlbConfig pada instans Fleet menyediakan instans ALB. Aturan Ingress pada instans Fleet mengatur cara ALB merutekan trafik ke Pod di seluruh kluster terkait.
Langkah 1: Buat gerbang multi-kluster ALB
Buat objek AlbConfig pada instans Fleet untuk menyediakan instans ALB dan mendaftarkan kluster terkait sebagai target trafik.
Dapatkan ID dua vSwitch dari VPC tempat instans Fleet berada.
Buat file
gateway.yamldengan konten berikut. Ganti${vsw-id1}dan${vsw-id2}dengan ID vSwitch, serta ganti${cluster1}dan${cluster2}dengan ID kluster terkait.Untuk setiap kluster terkait (
${cluster1}dan${cluster2}), konfigurasikan aturan masuk grup keamanan mereka agar mengizinkan trafik dari semua alamat IP dan port dalam blok CIDR vSwitch.Parameter Wajib Deskripsi metadata.nameYa Nama AlbConfig. metadata.annotations: alb.ingress.kubernetes.io/remote-clustersYa Daftar ID kluster yang dipisahkan koma untuk ditambahkan ke gerbang multi-kluster ALB. Setiap ID kluster harus sudah dikaitkan dengan instans Fleet. spec.config.nameTidak Nama instans ALB. spec.config.addressTypeTidak Jenis jaringan instans ALB. Internet(default): menghadap publik, memerlukan alamat IP elastis (EIP), dikenai biaya instans dan bandwidth.Intranet: privat, hanya dapat diakses dalam VPC.spec.config.zoneMappingsYa ID vSwitch untuk instans ALB. vSwitch harus berada di zona yang didukung oleh ALB dan dalam VPC yang sama dengan kluster. Untuk ketersediaan tinggi, gunakan vSwitch di minimal dua zona jika wilayah tersebut mendukungnya. Untuk daftar wilayah dan zona yang didukung, lihat Wilayah dan zona tempat ALB tersedia. spec.listenersTidak Port dan protokol pendengar. Contoh ini menggunakan HTTP pada port 8001. Pertahankan konfigurasi ini — tanpa pendengar, Anda tidak dapat menggunakan Ingress ALB. apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: ackone-gateway-demo annotations: # Tambahkan kluster terkait yang digunakan untuk menangani trafik ke instans multi-kluster 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 manifes untuk membuat gerbang multi-kluster ALB dan IngressClass:
kubectl apply -f gateway.yamlSetelah 1 hingga 3 menit, verifikasi bahwa gerbang telah dibuat:
kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'Output yang diharapkan:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE ackone-gateway-demo alb-xxxx alb-xxxx.<regionid>.alb.aliyuncs.com 4d9hVerifikasi bahwa kluster terkait telah terhubung ke gerbang:
kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'Output berupa daftar ID kluster.
Langkah 2: Rutekan trafik dengan Ingress
Buat Ingress dengan ingressClassName: alb untuk menggunakan gerbang multi-kluster ALB. Ingress ALB mendukung anotasi Ingress Nginx yang umum digunakan dan menyediakan fitur tambahan untuk instans ALB. Untuk daftar lengkap anotasi yang didukung, lihat Konfigurasi Ingress ALB dengan anotasi.
Tabel berikut merangkum empat skenario routing yang dibahas dalam bagian ini:
| Skenario | Gunakan saat | Anotasi utama |
|---|---|---|
| Load balancing default | Mendistribusikan trafik ke semua kluster berdasarkan jumlah replika | Tidak diperlukan |
| Routing satu kluster | Mengirim seluruh trafik ke satu kluster (untuk isolasi atau pengujian) | alb.ingress.kubernetes.io/cluster-weight.{clusterID}: "100" |
| Routing berbasis header | Merutekan permintaan dengan header tertentu ke kluster yang ditentukan | alb.ingress.kubernetes.io/conditions.{service} |
| Routing berbasis bobot | Membagi trafik antar kluster sesuai persentase yang ditentukan | alb.ingress.kubernetes.io/cluster-weight.{clusterID} (multiple) |
Contoh 1: Load balancing default
Distribusikan trafik ke semua Pod backend di kluster terkait, dengan pembobotan berdasarkan jumlah replika. Tidak diperlukan anotasi cluster-weight. Gunakan ini ketika Anda menginginkan distribusi beban otomatis yang sederhana tanpa menyesuaikan bobot per kluster.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/listen-ports: |
[{"HTTP": 8001}]
alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "60"
alb.ingress.kubernetes.io/cluster-weight.cdXXXXXXXXXXXXXXXXXXXXXXXXX: "40"
name: alb-ingress
namespace: demo
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service1
port:
number: 80Contoh 2: Routing satu kluster
Rutekan seluruh trafik ke kluster tertentu—misalnya, untuk mengisolasi kluster selama insiden atau mengarahkan trafik canary ke satu kluster. Tetapkan bobot kluster ke "100". Jika kluster yang ditentukan tidak ada, sistem akan melewatinya.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/listen-ports: |
[{"HTTP": 8001}]
alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "100"
name: alb-ingress
namespace: demo
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service1
port:
number: 80Contoh 3: Routing berbasis header
Rutekan permintaan dengan nilai Header HTTP tertentu ke kluster yang ditentukan—misalnya, untuk mengirim permintaan dengan stage: gray ke kluster rilis abu-abu. Gunakan anotasi alb.ingress.kubernetes.io/conditions.{service} untuk menentukan aturan pencocokan header, dan alb.ingress.kubernetes.io/cluster-weight.{clusterID} untuk menentukan kluster target. Jika kluster yang ditentukan tidak ada, sistem akan melewatinya.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/listen-ports: |
[{"HTTP": 8001}]
alb.ingress.kubernetes.io/conditions.service1: |
[{
"type": "Header",
"headerConfig": {
"key":"stage",
"values": [
"gray"
]
}
}]
alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "100"
name: alb-ingress
namespace: demo
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service1
port:
number: 80Contoh 4: Routing berbasis bobot
Bagi trafik antar kluster sesuai persentase yang ditentukan—misalnya, untuk secara bertahap mengalihkan trafik dari satu kluster ke kluster lain selama migrasi. Jumlah total bobot semua kluster harus sama dengan 100.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/listen-ports: |
[{"HTTP": 8001}]
alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "60"
alb.ingress.kubernetes.io/cluster-weight.cdXXXXXXXXXXXXXXXXXXXXXXXXX: "40"
name: alb-ingress
namespace: demo
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service1
port:
number: 80Pemecahan Masalah
Gateway tidak dibuat setelah 3 menit
Periksa status AlbConfig untuk detail error:
kubectl describe albconfig ackone-gateway-demoPenyebab umum:
vSwitch tidak berada di zona yang didukung oleh ALB. Verifikasi menggunakan Wilayah dan zona tempat ALB tersedia.
Aturan masuk grup keamanan kluster terkait tidak mengizinkan trafik dari blok CIDR vSwitch.
Kluster terkait tidak muncul di subClusters
Verifikasi bahwa ID kluster dalam anotasi alb.ingress.kubernetes.io/remote-clusters sesuai dengan ID kluster yang dikaitkan dengan instans Fleet:
kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'Jika output kosong, pastikan ID kluster dalam gateway.yaml benar dan kluster tersebut telah dikaitkan dengan instans Fleet.
Langkah Selanjutnya
Konfigurasi Ingress ALB dengan anotasi — referensi lengkap untuk anotasi Ingress ALB
Kelola kluster terkait — tambahkan atau hapus kluster dari instans Fleet
Pay-as-you-go — detail penagihan untuk instans ALB yang menghadap Internet