Komponen cloud-controller-manager (CCM) secara otomatis membuat dan mengelola load balancer untuk layanan tipe LoadBalancer. Load balancer dapat berupa Classic Load Balancer (CLB) atau Network Load Balancer (NLB). Topik ini menggunakan aplikasi Nginx sebagai contoh untuk menunjukkan cara menampilkan aplikasi menggunakan layanan yang secara otomatis membuat load balancer.
Catatan
CCM hanya mengonfigurasi load balancer untuk layanan tipe
Type=LoadBalancer. CCM tidak mengonfigurasi load balancer untuk jenis layanan lainnya.CCM menggunakan API deklaratif dan secara otomatis memperbarui konfigurasi load balancer berdasarkan konfigurasi layanan. Akibatnya, konfigurasi apa pun yang Anda ubah di Konsol Server Load Balancer berisiko tertimpa.
PentingJangan secara manual mengubah konfigurasi load balancer yang dikelola oleh Kubernetes di Konsol Server Load Balancer. Perubahan Anda mungkin tertimpa, yang dapat menyebabkan layanan menjadi tidak dapat diakses.
Anda tidak dapat mengubah load balancer untuk layanan tipe LoadBalancer yang sudah ada. 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 load balancer, sehingga layanan tidak dapat diakses melalui load balancer.
Batasan kuota
CCM membuat load balancer untuk layanan tipe
Type=LoadBalancer. Secara default, Anda bisa memiliki hingga 60 instans. Jika Anda membutuhkan lebih dari 60 instans, login ke Konsol Quota Center dan kirim permohonan.CCM membuat pendengar berdasarkan port yang didefinisikan dalam layanan. Secara default, Anda dapat menambahkan hingga 50 pendengar ke instans load balancer. Untuk menambahkan lebih banyak pendengar, login ke Konsol Quota Center dan kirim permohonan.
Untuk informasi lebih lanjut tentang batasan load balancer, lihat Batasan.
Untuk menanyakan kuota load balancer Anda, lihat Manajemen Kuota Load Balancer.
Langkah 1: Menyebarkan aplikasi sampel
Anda dapat menyebarkan aplikasi dari baris perintah kubectl.
Buat file bernama my-nginx.yaml yang berisi konten YAML berikut untuk aplikasi sampel.
apiVersion: apps/v1 # untuk versi sebelum 1.8.0 gunakan apps/v1beta1 kind: Deployment metadata: name: my-nginx # Nama aplikasi sampel. labels: app: nginx spec: replicas: 3 # Jumlah replika. selector: matchLabels: app: nginx # Nilai ini harus cocok dengan pemilih Layanan yang mengekspos aplikasi ini. template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest # Ganti ini dengan alamat citra aktual. Formatnya adalah <image_name:tags>. ports: - containerPort: 80 # Port ini harus diekspos dalam Layanan.Sebarkan aplikasi sampel my-nginx.
kubectl apply -f my-nginx.yamlKonfirmasikan bahwa aplikasi sampel dalam keadaan Normal.
kubectl get deployment my-nginxContoh keluaran:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 3/3 3 3 50s
Langkah 2: Menampilkan aplikasi menggunakan layanan yang secara otomatis membuat load balancer
Anda dapat membuat layanan tipe LoadBalancer menggunakan konsol atau kubectl untuk menampilkan aplikasi.
Gunakan konsol
Masuk ke konsol ACS. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi di sebelah kiri halaman detail kluster, pilih Network > Services.
Di halaman Services, klik Create di pojok kiri atas.
Di kotak dialog Create Service, atur parameter untuk layanan.
Parameter
Deskripsi
Contoh
Service Name
Nama Layanan.
my-nginx-svc
Service Type
Pilih tipe Layanan. Jaringan Layanan mendukung mode berikut untuk jenis klien dan sumber akses yang berbeda:
External Traffic Policy
Anda dapat mengatur External Traffic Policy hanya ketika tipe layanan adalah Node Port atau Server Load Balancer.
Local: merutekan trafik hanya ke pod node saat ini.
Cluster: Meneruskan trafik ke pod di node lain dalam kluster.
Local
Service Association
Aplikasi backend yang ingin Anda asosiasikan dengan Layanan. Jika Anda tidak memilih aplikasi backend, objek Endpoint tidak akan dibuat. Untuk informasi lebih lanjut, lihat Services-without-selectors.
Nama: app
Nilai: nginx
Port Mapping
Port Layanan dan port kontainer. Port Layanan sesuai dengan bidang
portdalam File YAML dan port kontainer sesuai dengan bidangtargetPortdalam File YAML. Port kontainer harus sama dengan port yang diekspos di pod backend.80
Annotations
Tambahkan anotasi ke layanan untuk mengonfigurasi parameter load balancer. Untuk informasi lebih lanjut, lihat Konfigurasikan instans CLB menggunakan anotasi.
PentingJangan gunakan kembali instans SLB dari API Server kluster. Jika tidak, akses kluster mungkin menjadi abnormal.
Dalam contoh ini, metode penagihan untuk layanan diatur ke bayar-per-bandwidth dan puncak bandwidth diatur ke 2 Mbit/s untuk mengontrol lalu lintas layanan. Anotasinya adalah sebagai berikut:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type:paybybandwidthservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth:2
Labels
Label yang akan ditambahkan ke Layanan, yang mengidentifikasi Layanan.
Tidak ada
Gunakan kubectl
Buat file bernama my-nginx-svc.yaml dengan konten berikut untuk layanan.
Pastikan nilai bidang
selector(app: nginxdalam contoh ini) cocok dengan nilai bidangmatchLabelsdalam penerapan aplikasi backend. Ini mengasosiasikan layanan dengan aplikasi 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: LoadBalancerJalankan perintah berikut untuk membuat layanan bernama my-nginx-svc dan gunakan untuk menampilkan aplikasi.
kubectl apply -f my-nginx-svc.yamlJalankan perintah berikut untuk mengonfirmasi bahwa layanan LoadBalancer telah dibuat.
kubectl get svc my-nginx-svcKeluaran 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 5mJalankan perintah berikut untuk mengakses aplikasi sampel.
curl <YOUR-External-IP> # Ganti <YOUR-External-IP> dengan alamat IP eksternal yang diperoleh pada langkah sebelumnya.Keluaran 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 online dan dukungan silakan kunjungi <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.