Komponen cloud-controller-manager (CCM) secara otomatis membuat dan mengelola load balancer untuk layanan dengan tipe LoadBalancer. Load balancer tersebut dapat berupa Classic Load Balancer (CLB) atau Network Load Balancer (NLB). Topik ini menggunakan aplikasi Nginx sebagai contoh untuk menunjukkan cara mengekspos aplikasi menggunakan Layanan LoadBalancer.
Catatan
CCM hanya mengonfigurasi load balancer untuk layanan dengan
Type=LoadBalancer. Tidak ada load balancer yang dikonfigurasi untuk tipe layanan lainnya.CCM menggunakan API deklaratif dan secara otomatis menyelaraskan konfigurasi load balancer berdasarkan definisi layanan. Perubahan manual yang dilakukan di konsol Server Load Balancer (SLB) mungkin akan ditimpa.
PentingJangan mengubah konfigurasi load balancer yang dikelola Kubernetes secara manual di konsol Server Load Balancer (SLB). Perubahan Anda mungkin akan ditimpa, sehingga layanan menjadi tidak dapat diakses.
Anda tidak dapat mengganti load balancer untuk layanan yang sudah ada dengan tipe
LoadBalancer. Untuk menggunakan load balancer yang berbeda, Anda harus membuat layanan baru.
Jika Anda mengubah tipe layanan dari Type=LoadBalancer menjadi Type!=LoadBalancer, CCM akan menghapus konfigurasi yang ditambahkan ke load balancer, sehingga layanan tidak dapat diakses melalui load balancer tersebut.
Kuota
CCM membuat satu instans load balancer untuk setiap layanan dengan
Type=LoadBalancer. Secara default, Anda dapat memiliki hingga 60 instans. Jika memerlukan lebih dari 60 instans, login ke Konsol Quota Center dan kirim permohonan.CCM membuat listener berdasarkan port yang didefinisikan dalam layanan. Secara default, Anda dapat menambahkan hingga 50 listener ke satu instans load balancer. Untuk menambahkan lebih banyak listener, login ke Konsol Quota Center dan kirim permohonan.
Untuk informasi selengkapnya mengenai batasan penggunaan load balancer, lihat Batasan.
Untuk melihat kuota load balancer Anda, lihat Manajemen Kuota Load Balancer.
Langkah 1: Terapkan aplikasi contoh
Langkah-langkah berikut menjelaskan cara menerapkan aplikasi menggunakan kubectl.
Buat file bernama my-nginx.yaml dengan konten berikut.
apiVersion: apps/v1 # untuk versi sebelum 1.8.0 gunakan apps/v1beta1 kind: Deployment metadata: name: my-nginx # Nama aplikasi contoh. labels: app: nginx spec: replicas: 3 # Jumlah replika. selector: matchLabels: app: nginx # Nilai ini harus sesuai dengan selector pada Service yang digunakan untuk mengekspos aplikasi ini. template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest # Ganti dengan alamat image aktual dalam format: <nama_image:tag>. ports: - containerPort: 80 # Port ini harus diekspos di Service.Terapkan aplikasi my-nginx.
kubectl apply -f my-nginx.yamlVerifikasi bahwa aplikasi sedang berjalan.
kubectl get deployment my-nginxContoh output:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 3/3 3 3 50s
Langkah 2: Ekspos aplikasi menggunakan Layanan LoadBalancer
Anda dapat menggunakan konsol dan kubectl untuk membuat Layanan LoadBalancer dan mengekspos aplikasi.
Konsol
Login ke konsol ACS. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Network > Services.
Pada halaman Services, klik Create di pojok kiri atas.
Pada kotak dialog Create Service, atur parameter untuk layanan tersebut.
Parameter
Deskripsi
Contoh
Name
Masukkan nama untuk layanan.
my-nginx-svc
Service Type
Pilih tipe layanan. Mode jaringan berikut didukung untuk berbagai jenis klien dan sumber akses:
Pilih Server Load Balancer sebagai tipe layanan.
Pilih CLB sebagai tipe load balancer dan pilih Create Resource.
Pada bagian drop-down Create CLB Instance, sesuaikan pengaturan sesuai kebutuhan. Atur Billing Method menjadi Pay-by-specification.
External Traffic Policy
Anda dapat mengatur External Traffic Policy hanya ketika Server Load Balancer diatur ke Server Load Balancer.
Local: Trafik hanya diarahkan ke Pod pada node yang menerima trafik tersebut.
Cluster: Trafik dapat diteruskan ke Pod pada node lain dalam kluster.
Local
Backend
Pilih aplikasi backend yang akan di-bind ke layanan. Jika Anda tidak mengaitkan deployment, sistem tidak akan membuat objek Endpoints. Untuk informasi selengkapnya, lihat services-without-selectors.
Name: app
Value: nginx
Port Mapping
Tambahkan port layanan (berkorespondensi dengan bidang
portdalam file YAML layanan) dan port kontainer (berkorespondensi dengan bidangtargetPortdalam file YAML layanan). Port kontainer harus sesuai dengan port yang diekspos oleh pod backend.80
Annotations
Tambahkan Annotation ke layanan untuk mengonfigurasi parameter load balancer. Untuk informasi selengkapnya, lihat Gunakan Annotations untuk mengonfigurasi Classic Load Balancer (CLB).
PentingJangan menggunakan kembali instans load balancer milik API Server kluster. Jika dilakukan, kluster mungkin menjadi tidak dapat diakses.
Dalam contoh ini, metode penagihan layanan diatur ke pay-by-bandwidth dan bandwidth dibatasi hingga 2 Mbit/s untuk mengontrol trafik. Anotasi tersebut adalah sebagai berikut:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type: paybybandwidthservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth: 2
Label
Tambahkan label untuk mengidentifikasi layanan.
Tidak ada
kubectl
Buat file bernama my-nginx-svc.yaml dengan konten berikut.
Pastikan nilai bidang
selector(app: nginxdalam contoh ini) dalam manifes layanan sesuai dengan nilai bidangmatchLabelsdalam Deployment backend. Hal ini mengaitkan layanan dengan Deployment backend.apiVersion: v1 kind: Service metadata: labels: app: nginx name: my-nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancerTerapkan layanan:
kubectl apply -f my-nginx-svc.yamlKonfirmasi bahwa layanan memiliki IP eksternal:
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:30471/TCP 5mAkses aplikasi:
curl <YOUR-EXTERNAL-IP> # Ganti dengan IP eksternal dari langkah sebelumnyaOutput yang diharapkan:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ... </html>