Layanan (Service) yang diekspos oleh Server Load Balancer (SLB) Alibaba Cloud dapat diakses dari luar kluster menggunakan nama domain SLB atau <IP:Service Port>, dan dari dalam kluster menggunakan <Service Name:Service Port>. Artikel ini menggunakan aplikasi Nginx sebagai contoh untuk menjelaskan cara mengekspos aplikasi dalam kluster ACS menggunakan Service yang memanfaatkan load balancer yang sudah ada.
Prasyarat
Anda harus memiliki instans SLB yang telah Anda buat di Konsol SLB. Instans tersebut harus berada di wilayah yang sama dengan kluster ACS. Topik ini menggunakan contoh instans Classic Load Balancer (CLB) bertipe internet-facing. Jika Anda belum memiliki instans CLB, lihat Create and manage CLB instances.
Pertimbangan
Batasan penggunaan ulang SLB
-
Instans SLB yang ingin Anda gunakan ulang harus memenuhi persyaratan berikut:
-
Anda hanya dapat menggunakan ulang instans SLB yang dibuat secara manual di Konsol SLB. Anda tidak dapat menggunakan ulang instans yang dibuat secara otomatis oleh cloud controller manager (CCM) atau yang digunakan oleh API server kluster.
-
Untuk menggunakan ulang instans SLB intranet dalam kluster ACS, instans SLB dan kluster ACS harus berada dalam virtual private cloud (VPC) yang sama.
-
Jenis alamat instans SLB harus sesuai dengan jenis akses Service:
-
Jika Service menyediakan Public Access (ditentukan oleh anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet"), Address Type instans SLB harus berupa Public Network. -
Jika Service menyediakan internal access (ditentukan oleh anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"), Address Type instans SLB harus berupa Internal Network.
-
-
Beberapa Service tidak dapat menggunakan port listener yang sama pada satu instans SLB.
-
Saat menggunakan ulang instans SLB lintas kluster, pastikan kombinasi namespace dan nama Service bersifat unik di setiap kluster.
-
-
CCM hanya mengonfigurasi instans SLB untuk Service bertipe
type: LoadBalancer.PentingJika Anda mengubah Service bertipe
type: LoadBalancermenjadi tipe lain, CCM akan menghapus konfigurasi yang sebelumnya ditambahkan ke instans SLB. Akibatnya, Service tidak dapat diakses melalui instans SLB tersebut. -
CCM menggunakan API deklaratif dan secara otomatis menyelaraskan konfigurasi SLB berdasarkan konfigurasi Service dalam kondisi tertentu. Jika anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"diatur, konfigurasi yang Anda ubah secara manual di Konsol SLB mungkin ditimpa.PentingJangan mengubah konfigurasi instans SLB yang dikelola oleh ACS secara manual di Konsol SLB. Jika dilakukan, konfigurasi tersebut mungkin hilang dan Service menjadi tidak dapat diakses.
-
Anda tidak dapat mengganti instans SLB untuk Service LoadBalancer yang sudah ada. Jika ingin mengganti instans SLB, Anda harus membuat Service baru.
Batasan kuota SLB
-
CCM membuat satu instans SLB untuk setiap Service bertipe
Type=LoadBalancer. Kuota default adalah 60 instans CLB dan 60 instans NLB. Untuk menambah kuota ini, login ke Konsol Quota Center dan kirim permohonan. -
CCM menyambungkan instans ECS atau Elastic Network Interfaces (ENIs) ke grup server backend SLB berdasarkan konfigurasi Service, dengan membuat grup server terpisah untuk setiap targetPort. Batasan kuota:
-
Jumlah server backend: Satu instans CLB mendukung hingga 200 server backend; satu instans NLB mendukung hingga 400 server berbasis ECS, ENI, atau IP. Rumus kuota: jumlah server backend × targetPorts. Untuk menambah kuota, login ke Konsol Quota Center dan kirim permohonan terlebih dahulu.
-
Jumlah lampiran grup server per instans: Satu instans ECS atau ENI dapat disambungkan ke maksimal 50 grup server backend CLB dan 200 grup server backend NLB. Untuk menambah batas ini, login ke Konsol Quota Center dan kirim permohonan.
-
Kuota tambahan selama pembaruan bergulir (rolling updates): Pod baru dibuat sebelum pod lama dihapus, sehingga mengonsumsi kuota tambahan yang mungkin melebihi perkiraan. Sediakan kuota yang cukup terlebih dahulu.
-
-
CCM membuat listener berdasarkan port Service. Batas default adalah 50 listener per instans CLB atau NLB. Untuk menambah jumlah tersebut, login ke Konsol Quota Center dan kirim permohonan.
-
Lihat CLB limits dan NLB limits.
Periksa kuota SLB di Server Load Balancer quota management.
Langkah 1: Deploy aplikasi contoh
Langkah-langkah berikut menunjukkan cara melakukan deploy aplikasi menggunakan kubectl.
-
Gunakan kubectl di Cloud Shell untuk terhubung ke kluster Anda.
-
Buat file bernama my-nginx.yaml dengan konten berikut.
-
Jalankan perintah berikut untuk melakukan deploy aplikasi contoh my-nginx.
kubectl apply -f my-nginx.yaml -
Jalankan perintah berikut untuk memverifikasi bahwa aplikasi sedang berjalan.
kubectl get deployment my-nginxOutput yang diharapkan:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 3/3 3 3 50s
Langkah 2: Ekspos aplikasi dengan Service
Anda dapat membuat Service bertipe LoadBalancer untuk mengekspos aplikasi baik melalui Konsol maupun kubectl.
Konsol
-
Login ke Konsol ACS. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Network > Services.
-
Di halaman Services, klik Create di pojok kiri atas.
-
Di kotak dialog Create Service, konfigurasikan parameter untuk Service tersebut.
Parameter
Deskripsi
Contoh
Name
Masukkan nama untuk Service.
my-nginx-svc
Service Type
Pilih tipe Service. Ini menentukan cara mengakses Service.
Create Service:
-
Service Type: LoadBalancer
-
SLB Type: CLB
-
Select Resource: Use Existing Resource
-
Create port listener: Selected
Backend
Jika Anda tidak mengaitkan workload, objek Endpoints tidak dibuat, tetapi Anda dapat mengikatnya secara manual. Untuk informasi lebih lanjut, lihat Services without selectors.
Klik + Reference Workload Label dan pilih my-nginx:
-
Name: app
-
Value: nginx
Port Mapping
Tambahkan port service (bidang
portdalam file YAML Service) dan port container (bidangtargetPortdalam file YAML Service). Port container harus sesuai dengan port yang diekspos oleh Pod backend.-
Service Port: 80
-
Container Port: 80
-
Protocol: TCP
Annotations
Tambahkan anotasi ke Service untuk mengonfigurasi parameter load balancer. Untuk informasi lebih lanjut, lihat Use annotations to configure Classic Load Balancer (CLB) instances.
Contoh ini mengatur metode penagihan menjadi pay-by-bandwidth dan batas bandwidth menjadi 2 Mbit/s untuk mengontrol traffic Service.
Atur metode penagihan:
-
Name:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type -
Value: paybybandwidth
Atur bandwidth:
-
Name:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth -
Value: 2
Label
Tambahkan label untuk mengidentifikasi Service.
Tidak ada
-
-
Klik Create. Di halaman Services, Anda dapat melihat Service yang baru dibuat.
-
Akses aplikasi contoh menggunakan alamat IP pada kolom External IP, misalnya 39.106.XX.XX:80.
Setelah mengakses aplikasi, halaman Welcome to nginx! akan ditampilkan. Hal ini menunjukkan bahwa layanan Nginx telah berhasil dideploy dan berjalan sesuai harapan.
kubectl
-
Buat file bernama my-nginx-svc.yaml dengan konten berikut.
-
Perbarui nilai anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id. Ganti ${YOUR_LB_ID} dengan ID instance SLB yang Anda buat di Konsol SLB. -
Secara default, penggunaan ulang instans SLB yang sudah ada tidak membuat atau menimpa listener-nya. Jika diperlukan, atur anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listenersmenjaditrue. Dalam contoh ini, instans SLB baru dibuat dan memerlukan listener, sehingga nilainya diatur menjaditrue. Untuk informasi lebih lanjut, lihat Use annotations to configure Classic Load Balancer (CLB) instances. -
Atur nilai
selectormenjadi nilaimatchLabelsdalam filemy-nginx.yaml, yaituapp: nginx, untuk mengaitkan Service dengan aplikasi backend.
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID} service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true' labels: app: nginx name: my-nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer -
-
Jalankan perintah berikut untuk membuat Service my-nginx-svc dan mengekspos aplikasi.
kubectl apply -f my-nginx-svc.yaml -
Jalankan perintah berikut untuk memverifikasi bahwa Service LoadBalancer telah dibuat.
kubectl get svc my-nginx-svcOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-nginx-svc LoadBalancer 172.21.5.82 39.106.XX.XX 80/TCP 5m -
Jalankan perintah curl <YOUR-External-IP> untuk mengakses aplikasi. Ganti placeholder <YOUR-External-IP> dengan
EXTERNAL-IPdari langkah sebelumnya.curl 39.106.XX.XXOutput yang diharapkan:
<!DOCTYPE html> <html> <head> <title>Selamat datang di nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Selamat datang di nginx!</h1> <p>Jika Anda melihat halaman ini, server web nginx berhasil diinstal dan berfungsi. Konfigurasi lebih lanjut diperlukan.</p> <p>Untuk dokumentasi dan dukungan online, silakan merujuk ke <a href="http://nginx.org/">nginx.org</a>.<br/> Dukungan komersial tersedia di <a href="http://nginx.com/">nginx.com</a>.</p> <p>Terima kasih telah menggunakan nginx.</p> </body> </html>