Dalam kluster Kubernetes, Layanan digunakan untuk mengekspos Pod ke akses eksternal guna memisahkan front end dan backend, sehingga memungkinkan penerapan arsitektur layanan mikro yang longgar terikat. Pada kluster ACK Edge, Layanan LoadBalancer biasanya digunakan untuk mengekspos aplikasi. 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.
Pendahuluan
Kelompok node dalam kluster ACK Edge terdiri atas kelompok node cloud dan kelompok node edge. Di kluster ACK Edge, Anda dapat menggunakan Layanan LoadBalancer untuk mengekspos aplikasi yang dideploy baik di kelompok node cloud maupun kelompok node edge.
Pada topik ini, Layanan ELB digunakan untuk mengekspos aplikasi yang dideploy di kelompok node edge. Pada gambar berikut, lapisan kontrol kluster ACK Edge dideploy di virtual private cloud (VPC). Anda dapat menghubungkan sumber daya komputasi dari pusat data di jaringan berbeda ke cloud dan menggunakan Layanan LoadBalancer untuk mengekspos sekelompok aplikasi di wilayah yang berbeda—artinya, satu Layanan LoadBalancer dipetakan ke titik akhir di beberapa pusat data.
Pada contoh ini, kelompok node ENS dibuat di wilayah China (Hefei) dan China (Chengdu). Instans ELB digunakan untuk mendistribusikan permintaan dari aplikasi di kedua wilayah tersebut.
Kluster ACK Edge memungkinkan Anda membuat resource kluster kustom bernama PoolServices. Komponen edge-controller-manager (ECM) secara otomatis memilih PoolService yang dikelola oleh kelompok node berdasarkan Layanan LoadBalancer yang Anda buat, lalu mengikat siklus hidup instans Server Load Balancer (SLB) di wilayah yang sama ke PoolService tersebut.
Perhatian
ECM hanya mengonfigurasi instans SLB untuk Layanan dengan tipe
Type=LoadBalancer. Versi ECM harus 2.1.0 atau lebih baru.Instans ELB yang dikelola oleh ECM diberi nama dalam format
k8s/${Service_Name}/${Service_Namespace}/${NodePool_Id}/${Cluster_Id}. Hindari penggunaan nama duplikat untuk mencegah penghapusan tidak sengaja terhadap instans ELB dengan nama yang sama.Alamat Elastic IP (EIP) yang dikelola oleh ECM diberi nama dalam format
k8s/${Service_Name}/${Service_Namespace}/${NodePool_Id}/${Cluster_Id}. Hindari penggunaan nama duplikat untuk mencegah penghapusan tidak sengaja terhadap EIP dengan nama yang sama.Untuk membuat beberapa Layanan yang berbagi satu instans ELB, Anda harus memilih EIP dan instans ELB yang dikelola sendiri. Selain itu, tipe kebijakan traffic eksternal harus diatur ke Cluster.
Disarankan agar Anda membuat jaringan edge, membuat instans ENS tanpa elastic network interfaces (ENIs) yang ditetapkan, lalu menggunakan instans ELB untuk mengekspos instans ENS tersebut. Untuk mengaktifkan akses Internet pada instans ENS, Anda dapat menetapkan EIP ke instans ENS atau mengonfigurasi NAT.
Instans ELB juga diperlukan jika Anda membuat instans ENS yang ditetapkan ENIs. Dalam kasus ini, Anda harus menambahkan aturan routing ke jaringan host instans ENS tersebut.
# Pada contoh ini, 10.0.0.3 menunjukkan pengontrol antarmuka jaringan internal, dan 10.0.0.1 menunjukkan alamat gateway internal. ip rule add from 10.0.0.3 lookup 4 ip route add default via 10.0.0.1 table 4
Langkah 1: Deploy aplikasi
Pada contoh ini, aplikasi bernama cube dideploy pada setiap node di kelompok node ENS.
File YAML berikut membuat DaemonSet:
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 #Ekspos port.Deploy aplikasi.
kubectl apply -f cube.yamlKueri status aplikasi.
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: Tambahkan anotasi atribut dan label Layanan ke semua kelompok node
Anda harus menambahkan anotasi atribut dan label Layanan ke semua kelompok node ENS di edge. Pada contoh ini, lakukan operasi berikut pada kelompok node ENS di wilayah China (Hefei) dan China (Chengdu).
Ambil nama kelompok node.
kubectl get nodepoolTambahkan ID jaringan.
kubectl annotate nodepool np-xxx alibabacloud.com/ens-network-id=n-xxxTambahkan ID node ENS (ID VPC).
kubectl annotate nodepool np-xxx alibabacloud.com/ens-region-id=cn-xxx-xxxTambahkan ID vSwitch.
kubectl annotate nodepool np-xxx alibabacloud.com/ens-vswitch-id=vsw-xxx,vsw-xxxTambahkan label Layanan.
kubectl label nodepool np-xxx k8s-svc=cube
Langkah 3: Gunakan Layanan ELB multi-wilayah untuk mengekspos aplikasi
Saat membuat Layanan, atur tipe Layanan ke
type: LoadBalancer.Untuk membuat Layanan ELB, Anda harus mengatur tipe LoadBalancer ke
loadBalancerClass: alibabacloud.com/elb.
Anda dapat menggunakan instans ELB yang sudah ada untuk mengekspos aplikasi. Jika tidak tersedia, Anda dapat menggunakan instans ELB yang dibuat secara otomatis.
Kebijakan pembaruan ELB bervariasi tergantung pada metode yang digunakan untuk mengekspos aplikasi. Untuk informasi selengkapnya, lihat kebijakan pembaruan ELB.
Gunakan Layanan ELB multi-wilayah yang dibuat otomatis untuk mengekspos aplikasi
Operasi berikut akan menghapus instans ELB dan EIP yang dibuat secara otomatis. Lakukan dengan hati-hati.
Jika Anda menghapus Layanan ELB, instans ELB yang sesuai dengan semua kelompok node akan dihapus.
Jika Anda menghapus kelompok node, instans ELB yang sesuai juga akan dihapus.
Memperbarui selector kelompok node pada Layanan juga akan menghapus instans ELB yang sesuai dengan kelompok node yang tidak lagi sesuai dengan selector tersebut.
Jika Anda memperbarui label kelompok node, kelompok node tersebut mungkin gagal sesuai dengan selector kelompok node pada Layanan, sehingga instans ELB yang sesuai akan dihapus.
Buat file bernama cube-svc.yaml dan tambahkan konten YAML berikut ke file tersebut:
apiVersion: v1 kind: Service metadata: name: cube-svc labels: app: cube annotations: openyurt.io/topologyKeys: openyurt.io/nodepool #Aktifkan fitur 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: 80Deploy Layanan bernama
cube-svcdan gunakan Layanan tersebut untuk mengekspos aplikasi.kubectl apply -f cube-svc.yamlKonfirmasi bahwa Layanan
cube-svctelah dibuat.kubectl get 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 5mAkses aplikasi.
CatatanGanti
<YOUR-External-IP>denganEXTERNAL-IPyang dikembalikan pada langkah sebelumnya.curl http://<YOUR-External-IP>:80
Gunakan Layanan ELB multi-wilayah yang sudah ada untuk mengekspos aplikasi
Buat file bernama cube-svc dan tambahkan konten YAML berikut ke file tersebut:
apiVersion: v1 kind: Service metadata: name: cube-svc labels: app: cube annotations: openyurt.io/topologyKeys: openyurt.io/nodepool #Aktifkan fitur 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" #Mount Layanan ke load balancer yang dikelola sendiri. spec: selector: app: cube type: LoadBalancer loadBalancerClass: alibabacloud.com/elb externalTrafficPolicy: Local ports: - name: cube port: 80 protocol: TCP targetPort: 80Deploy Layanan bernama
cube-svcdan gunakan Layanan tersebut untuk mengekspos aplikasi.kubectl apply -f cube-svc.yamlKueri PoolServices yang dibuat secara otomatis.
kubectl get psOutput yang diharapkan:
NAME AGE cube-svc-np-heifei 32s cube-svc-np-chengdu 32sTentukan instans ELB yang sudah ada untuk PoolService di setiap wilayah.
Pada contoh ini, instans ELB yang sudah ada ditentukan untuk setiap PoolService di wilayah China (Hefei) dan China (Chengdu).
Tentukan instans ELB yang sudah ada untuk kelompok node di wilayah China (Hefei).
kubectl annotate ps cube-svc-np-heifei service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id=lb-xxxTentukan instans ELB yang sudah ada untuk kelompok node di wilayah China (Chengdu).
kubectl annotate ps cube-svc-np-chengdu service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id=lb-xxx
Konfirmasi bahwa Layanan
cube-svctelah dibuat.kubectl get 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 5mAkses aplikasi.
CatatanGanti
<YOUR-External-IP>denganEXTERNAL-IPyang dikembalikan pada langkah sebelumnya.curl http://<YOUR-External-IP>:80
Kebijakan pembaruan ELB
Objek Sumber Daya | Instans ELB yang dikelola oleh Anda (instans ELB yang dibuat manual) | Instans ELB yang dikelola oleh ECM (instans ELB yang dibuat otomatis) |
Atribut ELB |
|
|
Kelompok server backend |
|
|
Pendengar |
|
|
Atribut EIP |
|
|
Referensi
Anda dapat menambahkan anotasi ke file YAML Layanan untuk menggunakan berbagai fitur load balancing. Untuk informasi selengkapnya, lihat Gunakan anotasi untuk mengonfigurasi instans ELB.
Untuk informasi selengkapnya tentang ELB, lihat Apa itu ELB?.