Pada kluster ACK Edge, Anda dapat menghubungkan sumber daya komputasi di beberapa wilayah edge ke cloud dan mengeksposnya melalui satu layanan LoadBalancer. Topik ini menjelaskan cara menggunakan instans Edge Load Balancer (ELB) untuk mengekspos layanan yang dideploy di kelompok node Edge Node Service (ENS) di beberapa wilayah.
Cara kerja
Kelompok node pada kluster ACK Edge diklasifikasikan sebagai kelompok node cloud atau kelompok node edge. Instans ELB menangani load balancing untuk kelompok node edge, dengan setiap instans ELB terbatas pada satu wilayah saja.
Saat Anda membuat layanan LoadBalancer, edge-controller-manager (ECM) secara otomatis membuat PoolService untuk setiap kelompok node yang sesuai. Setiap PoolService mengelola siklus hidup instans ELB di wilayahnya. Akibatnya, satu layanan LoadBalancer dipetakan ke titik akhir di beberapa pusat data—satu instans ELB per wilayah.
Diagram berikut menggambarkan arsitektur ini. Kelompok node ENS dideploy di dua wilayah (Tiongkok (Hefei) dan Tiongkok (Chengdu)), dan layanan LoadBalancer mengekspos aplikasi di kedua wilayah tersebut melalui instans ELB terpisah.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Kluster ACK Edge dengan kelompok node ENS di wilayah target
-
Versi ECM 2.1.0 atau lebih baru
-
CLI
kubectlyang telah dikonfigurasi untuk terhubung ke kluster Anda -
(Untuk ELB yang dikelola sendiri) Instans ELB yang sudah ada di setiap wilayah target
Catatan penggunaan
-
ECM hanya mengonfigurasi instans ELB untuk layanan dengan
type: LoadBalancer. -
Instans ELB yang dikelola oleh ECM diberi nama dalam format
k8s/${Service_Name}/${Service_Namespace}/${NodePool_Id}/${Cluster_Id}. Hindari nama duplikat untuk mencegah penghapusan tidak disengaja. -
Alamat Elastic IP (EIP) yang dikelola oleh ECM mengikuti format penamaan yang sama. Hindari nama duplikat untuk mencegah penghapusan tidak disengaja.
-
Untuk berbagi satu instans ELB di beberapa layanan, gunakan EIP dan instans ELB yang dikelola sendiri, serta atur
externalTrafficPolicymenjadiCluster. -
Untuk instans ENS tanpa elastic network interfaces (ENIs), buat jaringan edge dan gunakan instans ELB untuk mengeksposnya. Untuk mengaktifkan akses internet, tetapkan EIP ke instans ENS atau konfigurasikan NAT.
-
Untuk instans ENS dengan ENIs, tambahkan aturan routing ke jaringan host:
# 10.0.0.3: internal network interface controller; 10.0.0.1: internal gateway address ip rule add from 10.0.0.3 lookup 4 ip route add default via 10.0.0.1 table 4
Pilih pendekatan pengelolaan ELB
Tersedia dua pendekatan tergantung pada apakah Anda ingin ECM sepenuhnya mengelola siklus hidup ELB atau mempertahankan kendali atas instans ELB yang sudah ada.
| Kriteria | Auto Managed ELB | ELB yang Dikelola Sendiri |
|---|---|---|
| Pengelolaan EIP | Dibuat dan dihapus secara otomatis per wilayah | Manual; EIP tidak dibuat atau dihapus secara otomatis |
| Kontrol instans ELB | ECM membuat dan memberi nama instans secara otomatis | Anda menentukan ID instans ELB yang sudah ada per kelompok node |
| Beberapa Layanan Berbagi Satu ELB | Tidak didukung | Didukung (memerlukan externalTrafficPolicy: Cluster) |
| Pembersihan saat layanan atau kelompok node dihapus | Instans ELB dan EIP dihapus secara otomatis | Instans ELB dan EIP dipertahankan; pembersihan manual diperlukan |
| Gunakan saat | Anda menginginkan load balancing tanpa konfigurasi | Anda memerlukan kendali tepat atas instans ELB atau berbagi satu ELB untuk beberapa layanan |
Menghapus layanan ELB yang dikelola otomatis atau kelompok node terkait juga akan menghapus instans ELB dan EIP yang sesuai. Memperbarui selector kelompok node atau label kelompok node juga dapat memicu penghapusan instans ELB jika kelompok node tidak lagi sesuai dengan selector.
Langkah 1: Deploy aplikasi
Deploy DaemonSet bernama cube di semua node dalam kelompok node ENS.
-
Buat file bernama
cube.yamldengan konten berikut:apiVersion: apps/v1 kind: DaemonSet metadata: name: cube labels: app: cube spec: selector: matchLabels: app: cube template: metadata: labels: app: cube spec: containers: - name: cube image: registry.cn-hangzhou.aliyuncs.com/acr-toolkit/ack-cube:1.0 ports: - containerPort: 80 -
Terapkan manifes:
kubectl apply -f cube.yaml -
Verifikasi bahwa DaemonSet sedang berjalan:
kubectl get ds cubeOutput yang diharapkan:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE cube 4 4 4 4 4 <none> 3d1h
Langkah 2: Anotasi kelompok node
Tambahkan anotasi jaringan dan label layanan ke setiap kelompok node ENS. Ulangi untuk setiap wilayah—dalam contoh ini, kelompok node Tiongkok (Hefei) dan Tiongkok (Chengdu).
-
Dapatkan nama kelompok node:
kubectl get nodepool -
Tambahkan anotasi ID jaringan:
kubectl annotate nodepool np-xxx alibabacloud.com/ens-network-id=n-xxx -
Tambahkan anotasi ID wilayah:
kubectl annotate nodepool np-xxx alibabacloud.com/ens-region-id=cn-xxx-xxx -
Tambahkan anotasi ID vSwitch:
kubectl annotate nodepool np-xxx alibabacloud.com/ens-vswitch-id=vsw-xxx,vsw-xxx -
Tambahkan label layanan agar layanan LoadBalancer dapat memilih kelompok node ini:
kubectl label nodepool np-xxx k8s-svc=cube
Langkah 3: Ekspos aplikasi dengan layanan ELB multi-wilayah
Tersedia dua opsi. Jika Anda tidak memiliki instans ELB yang sudah ada, gunakan Opsi A. Jika Anda memiliki instans ELB yang sudah ada dan perlu mempertahankan kendali atasnya, gunakan Opsi B.
Opsi A: ELB yang Dikelola Otomatis
ECM secara otomatis membuat dan mengelola instans ELB dan EIP di setiap wilayah yang sesuai.
-
Buat file bernama
cube-svc.yamldengan konten berikut:apiVersion: v1 kind: Service metadata: name: cube-svc labels: app: cube annotations: openyurt.io/topologyKeys: openyurt.io/nodepool # Aktifkan topologi layanan service.openyurt.io/nodepool-labelselector: k8s-svc=cube # Pilih kelompok node ENS spec: selector: app: cube type: LoadBalancer loadBalancerClass: alibabacloud.com/elb externalTrafficPolicy: Local ports: - name: cube port: 80 protocol: TCP targetPort: 80 -
Terapkan manifes:
kubectl apply -f cube-svc.yaml -
Verifikasi bahwa layanan telah dibuat dan memiliki IP eksternal yang ditetapkan:
kubectl get svc cube-svcOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cube-svc LoadBalancer 192.168.xxx.xxx 39.106.XX.XX,144.121.XX.XX 80:30081/TCP 5mBidang
EXTERNAL-IPmencantumkan satu alamat IP per wilayah, dipisahkan koma. -
Verifikasi akses ke aplikasi:
curl http://<EXTERNAL-IP>:80Ganti
<EXTERNAL-IP>dengan salah satu alamat IP dari langkah sebelumnya.
Opsi B: ELB yang Dikelola Sendiri
Tentukan instans ELB Anda sendiri per kelompok node. ECM membuat PoolService secara otomatis tetapi tidak mengelola siklus hidup instans ELB.
-
Buat file bernama
cube-svc.yamldengan konten berikut:apiVersion: v1 kind: Service metadata: name: cube-svc labels: app: cube annotations: openyurt.io/topologyKeys: openyurt.io/nodepool # Aktifkan topologi layanan service.openyurt.io/nodepool-labelselector: k8s-svc=cube # Pilih kelompok node ENS service.beta.kubernetes.io/alibaba-cloud-loadbalancer-managed-by-user: "true" # Gunakan ELB yang dikelola sendiri spec: selector: app: cube type: LoadBalancer loadBalancerClass: alibabacloud.com/elb externalTrafficPolicy: Local ports: - name: cube port: 80 protocol: TCP targetPort: 80 -
Terapkan manifes:
kubectl apply -f cube-svc.yaml -
Verifikasi bahwa PoolService telah dibuat untuk setiap kelompok node:
kubectl get psOutput yang diharapkan:
NAME AGE cube-svc-np-heifei 32s cube-svc-np-chengdu 32sSetiap PoolService berkorespondensi dengan satu kelompok node. Pada tahap ini, belum ada instans ELB yang disambungkan.
-
Ikatan instans ELB yang sudah ada ke setiap PoolService:
-
Kelompok node Tiongkok (Hefei):
kubectl annotate ps cube-svc-np-heifei service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id=lb-xxx -
Kelompok node Tiongkok (Chengdu):
kubectl annotate ps cube-svc-np-chengdu service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id=lb-xxx
-
-
Verifikasi bahwa layanan memiliki IP eksternal yang ditetapkan:
kubectl get svc cube-svcOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cube-svc LoadBalancer 192.168.xxx.xxx 39.106.XX.XX,144.121.XX.XX 80:30081/TCP 5m -
Verifikasi akses ke aplikasi:
curl http://<EXTERNAL-IP>:80Ganti
<EXTERNAL-IP>dengan salah satu alamat IP dari langkah sebelumnya.
Kebijakan pembaruan ELB
Tabel berikut menjelaskan cara sumber daya ELB dikelola berdasarkan apakah Anda menggunakan instans ELB yang dikelola otomatis atau dikelola sendiri.
| Resource | ELB yang Dikelola Sendiri | Auto-Managed ELB |
|---|---|---|
| Atribut ELB | Buat: tentukan selector kelompok node dan ID instans ELB menggunakan service.openyurt.io/nodepool-labelselector dan service.beta.kubernetes.io/alibaba-cloud-loadbalancer-managed-by-user. Perbarui: atribut tidak dapat diperbarui. Hapus: instans ELB tidak dilepas secara otomatis. |
Buat: tentukan selector kelompok node menggunakan service.openyurt.io/nodepool-labelselector. Perbarui: atribut tidak dapat diperbarui. Hapus: instans ELB tidak dihapus secara otomatis. |
| Kelompok server backend | Buat: diperbarui berdasarkan status layanan dan pod. Perbarui: server backend ditambahkan atau dihapus secara dinamis (mode lokal). Hapus: kelompok server backend tidak dihapus secara otomatis; penghapusan manual diperlukan. | Buat: diperbarui berdasarkan status layanan dan pod. Perbarui: server backend ditambahkan atau dihapus secara dinamis (mode lokal). Hapus: semua kelompok server backend dihapus secara otomatis. |
| Pendengar | Buat: ditambahkan secara otomatis berdasarkan spec.ports. Perbarui: ditambahkan, diperbarui, dan dihapus secara otomatis berdasarkan perubahan port. Hapus: pendengar tidak dihapus secara otomatis; penghapusan manual diperlukan. |
Buat: ditambahkan secara otomatis berdasarkan spec.ports. Perbarui: ditambahkan, diperbarui, dan dihapus secara otomatis berdasarkan perubahan port. Hapus: semua pendengar dihapus secara otomatis. |
| Atribut EIP | Buat: EIP tidak dibuat secara otomatis; pengelolaan manual diperlukan. Perbarui: atribut EIP tidak dapat diperbarui. Hapus: EIP tidak dihapus secara otomatis. | Buat: EIP dibuat secara otomatis di setiap wilayah. Perbarui: bandwidth EIP dapat ditingkatkan atau dikurangi. Hapus: EIP dihapus secara otomatis. |
Langkah selanjutnya
-
Untuk mengonfigurasi opsi load balancing lanjutan menggunakan anotasi, lihat Gunakan anotasi untuk mengonfigurasi instans ELB.
-
Untuk informasi lebih lanjut tentang produk ELB, lihat Apa itu ELB?