Gerbang multi-kluster Application Load Balancer (ALB) yang disediakan oleh Distributed Cloud Container Platform for Kubernetes (ACK One) merupakan mode multi-kluster dari Ingress ALB. Gerbang ini memungkinkan Anda menggunakan fitur seperti redundansi zona aktif, penyeimbangan beban lalu lintas, dan pengarahan lalu lintas berdasarkan header. Topik ini menjelaskan cara menggunakan gerbang multi-kluster ALB untuk mengelola lalu lintas utara-selatan.
Prasyarat
ALB telah diaktifkan.
Fitur Manajemen Fleet telah diaktifkan.
Instansi ACK One Fleet terhubung dengan dua kluster ACK yang ditempatkan dalam virtual private cloud (VPC) yang sama dengan instansi ACK One Fleet. Untuk informasi lebih lanjut, lihat Kelola Kluster Terkait.
File kubeconfig dari instansi Fleet diperoleh di Konsol ACK One dan klien kubectl terhubung ke instansi Fleet.
Versi terbaru Alibaba Cloud CLI telah diinstal dan Alibaba Cloud CLI telah dikonfigurasi.
Langkah 1: Buat gerbang multi-kluster ALB menggunakan kubectl pada instansi ACK One Fleet
Buat objek AlbConfig pada instansi ACK One Fleet untuk membuat gerbang multi-kluster ALB, dan tambahkan gerbang multi-kluster ALB ke kluster terkait.
Dapatkan ID dari dua vSwitch dari VPC tempat instansi ACK One Fleet berada.
Buat file bernama
gateway.yamldan salin konten berikut ke dalam file:CatatanGanti
${vsw-id1}dan${vsw-id2}dengan ID vSwitch yang diperoleh dari langkah sebelumnya, dan ganti${cluster1}dan${cluster2}dengan ID kluster terkait yang ingin ditambahkan.Untuk kluster terkait
${cluster1}dan${cluster2}, Anda harus mengonfigurasi aturan arah masuk grup keamanannya untuk mengizinkan akses dari semua alamat IP dan port blok CIDR vSwitch.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: ackone-gateway-demo annotations: # Tambahkan kluster terkait yang digunakan untuk menangani lalu lintas ke instansi 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-demoTabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Wajib
Deskripsi
metadata.nameYa
Nama dari AlbConfig.
metadata.annotations:alb.ingress.kubernetes.io/remote-clustersYa
Daftar kluster terkait yang akan ditambahkan ke gerbang multi-kluster ALB. ID kluster yang terdaftar di sini telah terhubung dengan instansi Fleet.
spec.config.nameTidak
Nama dari instansi ALB.
spec.config.addressTypeTidak
Tipe jaringan dari instansi ALB. Nilai valid:
Internet (default): Jaringan publik. Instansi ALB menyediakan layanan ke Internet dan dapat diakses melalui Internet.
CatatanUntuk mengizinkan instansi ALB menyediakan layanan berbasis Internet, instansi ALB perlu dikaitkan dengan alamat IP elastis (EIP). Jika Anda menggunakan instansi ALB berbasis Internet, Anda akan dikenakan biaya instansi dan biaya bandwidth atau transfer data untuk EIP terkait. Untuk informasi lebih lanjut, lihat Bayar sesuai pemakaian.
Intranet: Jaringan pribadi. Instansi ALB menyediakan layanan dalam VPC dan tidak dapat diakses melalui Internet.
spec.config.zoneMappingsYa
ID vSwitch yang terkait dengan instansi ALB. Untuk informasi lebih lanjut tentang cara membuat vSwitch, lihat Buat dan kelola vSwitches.
CatatanvSwitch yang ditentukan harus ditempatkan di zona yang didukung oleh instansi 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 dari instansi ALB. Contoh yang diberikan dalam topik ini mengonfigurasi listener HTTP pada port 8001.
Listener mendefinisikan bagaimana ALB menerima lalu lintas. Kami sarankan Anda mempertahankan konfigurasi listener. Jika tidak, Anda harus membuat listener sebelum dapat menggunakan Ingress ALB.
Jalankan perintah berikut untuk menerapkan file
gateway.yamldan buat gerbang multi-kluster ALB dan IngressClass:kubectl apply -f gateway.yamlJalankan perintah berikut untuk memeriksa apakah gerbang multi-kluster ALB dibuat dalam waktu 1 hingga 3 menit:
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 gerbang:
kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'Keluaran yang diharapkan adalah daftar ID kluster.
Langkah 2: Jadwalkan lalu lintas dalam skenario berbeda menggunakan Ingress
Anda dapat mengatur IngressClass dari Ingress ke ALB Ingress untuk membuat ALB Ingress dan kemudian menggunakan kemampuan manajemen lalu lintas dengan anotasi berbeda. ALB Ingress mendukung anotasi umum Nginx-Ingress dan menyediakan fitur yang ditingkatkan untuk instansi ALB. Untuk informasi lebih lanjut tentang konfigurasi ALB Ingress, lihat Konfigurasi ALB Ingress dengan Anotasi. Contoh-contoh berikut menjelaskan skenario penggunaan manajemen lalu lintas multi-kluster:
Contoh 1: Gunakan penyeimbangan beban untuk mendistribusikan lalu lintas ke semua pod backend secara default
Distribusikan lalu lintas ke kluster berbeda berdasarkan jumlah replika.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/listen-ports: |
[{"HTTP": 8001}]
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: Distribusikan lalu lintas hanya ke kluster tertentu
Gunakan anotasi alb.ingress.kubernetes.io/cluster-weight.{clusterID} untuk menentukan kluster. Jika kluster yang ditentukan tidak ada, sistem akan melewati kluster tersebut.
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: Distribusikan lalu lintas yang cocok dengan header ke kluster tertentu
Gunakan anotasi
aalb.ingress.kubernetes.io/cluster-weight.{clusterID}untuk menentukan kluster. Jika kluster yang ditentukan tidak ada, sistem akan melewati kluster tersebut.Gunakan anotasi
alb.ingress.kubernetes.io/condition.{backend.service.name}untuk mengonfigurasi parameter header permintaan. Anda dapat mengontrol pengarahan lalu lintas berdasarkan header permintaan.
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: Distribusikan lalu lintas berdasarkan bobot
Gunakan anotasi alb.ingress.kubernetes.io/cluster-weight untuk mendistribusikan lalu lintas ke beberapa layanan backend. Jumlah total bobot 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: 80