Jika Anda tidak memiliki load balancer yang tersedia, komponen cloud-controller-manager (CCM) secara otomatis membuat dan mengelola instans load balancer untuk layanan dengan type: LoadBalancer. Instans tersebut dapat berupa Classic Load Balancer (CLB) atau Network Load Balancer (NLB). Topik ini menjelaskan cara mengekspos aplikasi Nginx menggunakan layanan yang secara otomatis membuat load balancer.
Catatan penggunaan
Pertimbangan untuk instans SLB yang dikelola CCM
CCM hanya mengonfigurasi load balancing untuk Service dengan
Type=LoadBalancer. CCM tidak mengonfigurasi load balancing untuk Service jenis lain.CCM menggunakan API deklaratif dan secara otomatis memperbarui konfigurasi SLB berdasarkan konfigurasi Service dalam kondisi tertentu. Konfigurasi apa pun yang Anda ubah di konsol Server Load Balancer berisiko ditimpa.
Jangan menghapus atau mengubah finalizer
service.k8s.alibaba/resourcesatauservice.k8s.alibaba/nlbpada Service secara manual. Mengubah finalizer secara manual dapat mencegah sumber daya CLB atau NLB dikembalikan dengan benar.Jika versi Cloud Controller Manager adalah v2.5.0 atau lebih baru, opsi untuk menentukan instans CLB saat membuat Service di konsol merupakan fitur daftar putih. Untuk menggunakan fitur ini, Anda harus mengajukan permintaan di platform Quota Center.
Jika Service dengan Type=LoadBalancer diubah menjadi jenis selain LoadBalancer, CCM akan menghapus konfigurasi yang sebelumnya ditambahkan ke instans SLB. Akibatnya, Service tersebut tidak dapat diakses melalui instans SLB.
Jangan mengubah konfigurasi instans SLB yang dibuat dan dikelola oleh ACK secara manual di konsol Server Load Balancer. Jika tidak, konfigurasi Anda mungkin hilang dan Service menjadi tidak dapat diakses.
Server Load Balancer
CCM membuat satu instans SLB untuk setiap Service dengan
Type=LoadBalancer. Secara default, Anda dapat memiliki hingga 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 (ENI) ke grup server backend instans SLB berdasarkan konfigurasi Service. CCM juga membuat grup server terpisah untuk setiap targetPort yang berbeda dalam Service. Perhatikan batas kuota berikut:
Jumlah server backend: Secara default, Anda dapat menyambungkan hingga 200 server backend ke instans CLB dan hingga 400 server backend berbasis ECS, ENI, atau IP ke instans NLB. Kuota yang dibutuhkan dihitung sebagai berikut: jumlah server backend × jumlah targetPort. Untuk menambah kuota, login ke Konsol Quota Center dan kirim permohonan terlebih dahulu.
Jumlah kali sebuah instans dapat disambungkan ke grup server: Secara default, instans ECS atau ENI yang sama dapat disambungkan ke maksimal 50 grup server backend berbeda pada instans CLB dan 200 grup server backend berbeda pada instans NLB. Untuk menyambungkannya ke lebih banyak grup server, login ke Konsol Quota Center dan kirim permohonan.
Penggunaan kuota tambahan selama pembaruan bergulir: Selama pembaruan bergulir, pod baru dibuat sebelum pod lama dihapus. Hal ini mengonsumsi kuota tambahan. Konsumsi aktual dapat melebihi perkiraan Anda. Sediakan kuota yang cukup terlebih dahulu.
CCM membuat listener berdasarkan port yang didefinisikan dalam Service. Secara default, Anda dapat menambahkan hingga 50 listener ke instans CLB atau NLB. Untuk menambah lebih banyak listener, login ke Konsol Quota Center dan kirim permohonan.
Untuk informasi lebih lanjut tentang batasan SLB, lihat batasan CLB dan batasan NLB.
Untuk menanyakan kuota SLB, lihat manajemen kuota Server Load Balancer.
Langkah 1: Deploy aplikasi contoh
Topik ini menunjukkan cara menggunakan Service LoadBalancer untuk mengekspos aplikasi Nginx tanpa status di kluster ACK.
Konsol
Login ke konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Pada halaman Deployments, klik Create from Image dan konfigurasikan informasi dasar, pengaturan kontainer, serta pengaturan lanjutan untuk aplikasi.
Pada tab Basic Information, atur Name menjadi my-nginx, gunakan nilai default untuk parameter lainnya, lalu klik Next.
Pada tab Container, atur nama image kontainer dan port, gunakan nilai default untuk parameter lainnya, lalu klik Next.
Parameter
Nilai
Image name
Klik Select images. Pada kotak dialog yang muncul, klik tab Artifact Center, cari
nginxdan pilih repository image bernama openanolis/nginx. Lalu, klik Select Image Tag, atur versi image, lalu klik Confirm.Port
Name: nginx.
Container Port: 80.
Pada tab Advanced Settings, pertahankan pengaturan default dan klik Launch.
kubectl
Buat file bernama my-nginx.yaml dengan konten berikut.
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: my-nginx # Nama aplikasi contoh. labels: app: nginx spec: replicas: 2 # Jumlah replika. selector: matchLabels: app: nginx # Harus sesuai dengan selector di Service agar Service dapat mengeksposnya. template: metadata: labels: app: nginx spec: # nodeSelector: # env: test-team containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 # Port ini harus diekspos di Service.Jalankan perintah berikut untuk mendeploy aplikasi contoh my-nginx:
kubectl apply -f my-nginx.yamlJalankan perintah berikut untuk memverifikasi bahwa aplikasi contoh berjalan sesuai harapan:
kubectl get deployment my-nginxOutput yang diharapkan:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 2/2 2 2 50s
Langkah 2: Ekspos aplikasi dengan load balancer yang dibuat otomatis
Anda dapat membuat layanan dengan type: LoadBalancer dan mengekspos aplikasi Anda menggunakan konsol ACK atau kubectl.
Konsol
Login ke konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Pada halaman Services, klik Create. Pada kotak dialog Create Service, atur parameter untuk layanan tersebut.
Parameter
Deskripsi
Contoh
Name
Masukkan nama untuk layanan.
my-nginx-svc
service type
Pilih jenis layanan. Layanan mendukung mode jaringan berikut untuk menangani akses dari berbagai jenis dan sumber klien:
Pilih Server Load Balancer sebagai jenis layanan.
Pilih CLB sebagai jenis 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
Atur jenis layanan Node Port atau Load Balancing sebelum mengonfigurasi External Traffic Policy. Untuk informasi lebih lanjut, lihat Kelola layanan.
Local: Traffic hanya dialihkan ke pod pada node yang sama.
Cluster: Traffic dapat diteruskan ke pod pada node lain di kluster.
Local
Backend
Pilih aplikasi backend yang akan diikat ke layanan. Jika Anda tidak mengaitkan deployment, sistem tidak akan membuat objek Endpoints. Untuk informasi lebih lanjut, lihat services-without-selectors.
Name: app
Value: nginx
Port Mapping
Tambahkan port layanan (berkorespondensi dengan bidang
portdalam file YAML Service) dan port kontainer (berkorespondensi dengan bidangtargetPortdalam file YAML Service). Port kontainer harus sesuai dengan port yang diekspos oleh pod backend.Service Port: 80
Container Port: 80
Protocol: TCP
annotations
Tambahkan annotation ke layanan untuk mengonfigurasi parameter load balancer. Untuk parameter lainnya, lihat Konfigurasi CLB menggunakan annotation dan Konfigurasi NLB menggunakan annotation.
PentingJangan menggunakan kembali instans load balancer dari API Server kluster. Jika tidak, akses kluster mungkin terganggu.
Dalam contoh ini, traffic jaringan publik untuk layanan ditagih berdasarkan pay-by-bandwidth, dengan bandwidth puncak 2 Mbit/s untuk mengontrol traffic. Annotation-nya adalah sebagai berikut:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type: paybybandwidthservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth: 2
labels
Tambahkan label untuk mengidentifikasi layanan.
Tidak ada
Service Deletion Protection
Aktifkan perlindungan penghapusan untuk layanan yang mendukung bisnis kritis atau menangani data sensitif. Ini mencegah penghapusan tidak disengaja dan mengurangi biaya pemeliharaan. Setelah mengaktifkan perlindungan penghapusan, Anda harus menonaktifkannya secara manual sebelum menghapus sumber daya.
CatatanUntuk menggunakan fitur ini, instal komponen policy-template-controller dan gatekeeper dari add-on Container Security Policy. Klik Install Now untuk mendeploy komponen tersebut.
Nonaktif
Setelah mengonfigurasi parameter, klik OK.
Setelah layanan dibuat, klik namanya untuk membuka halaman detailnya. Di bagian Basic Information, klik External IP layanan, seperti
39.106.XX.XX:80, untuk mengakses aplikasi contoh.
Kubectl
Buat file bernama my-nginx-svc.yaml dengan konten berikut untuk layanan contoh.
Atur selector ke nilai matchLabels dalam file aplikasi contoh my-nginx.yaml, yaitu
app: nginxdalam contoh ini. Hal ini mengaitkan 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 Service bernama my-nginx-svc dan gunakan Service tersebut untuk mengekspos aplikasi:
kubectl apply -f my-nginx-svc.yamlJalankan perintah berikut untuk memastikan 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:30471/TCP 5mJalankan perintah berikut untuk mengakses aplikasi contoh:
curl <YOUR-External-IP> # Ganti <YOUR-External-IP> dengan alamat IP eksternal yang Anda peroleh.Output 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 terinstal 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>
Classic Load Balancer (CLB)
Create CLB Instance
Saat membuat Classic Load Balancer (CLB), ikuti petunjuk untuk membuat instans CLB. Untuk informasi lebih lanjut, lihat Buat dan kelola instans CLB.
Name | Description |
Name | Masukkan nama kustom untuk CLB. |
Access Method | Pilih Public Access atau Internal Access. |
Billing Method | Pilih Pay-by-specification atau Pay-as-you-go (Pay-by-CU). Untuk informasi selengkapnya, lihat CLB billing overview. |
IP Version | Pilih IPv4 atau IPv6. Penting Untuk menggunakan IPv6, pastikan wilayah kluster ACK Anda mendukung instans CLB IPv6. Untuk daftar wilayah yang mendukung CLB IPv6, lihat CLB supported regions. |
Scheduling Algorithm | Algoritma yang didukung adalah round robin (RR) dan weighted round robin (WRR). RR (default): Mendistribusikan permintaan eksternal ke server backend secara bergiliran. WRR: Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan. |
Access Control | Menyediakan kontrol akses tingkat listener. Untuk informasi selengkapnya, lihat Access control. |
Health Check | Mendukung protokol TCP dan HTTP. Setelah mengaktifkan pemeriksaan kesehatan, gunakan fitur ini untuk menentukan ketersediaan server backend. Untuk informasi selengkapnya, lihat CLB health check. |
Others | Konfigurasikan CLB menggunakan anotasi. Untuk informasi selengkapnya, lihat Configure CLB using annotations. |
Use Existing Resource
Pilih instans Classic Load Balancer (CLB) yang ada dari daftar drop-down. Anda juga dapat memilih opsi untuk memaksa menimpa listener yang ada. Untuk informasi lebih lanjut, lihat Gunakan load balancer yang ada dan paksa timpa listener yang ada.
Penggunaan kembali instans CLB tunduk pada batasan dan pertimbangan tertentu. Untuk informasi lebih lanjut, lihat Server Load Balancer mana yang dapat digunakan kembali?.
Configure Resources
Name | Description |
Scheduling Algorithm | Mendukung dua kebijakan: round-robin (RR) dan weighted round-robin (WRR). RR merupakan nilai default. Dengan RR, Server Load Balancer mendistribusikan permintaan eksternal ke server backend secara berurutan. Dengan WRR, server backend yang memiliki bobot lebih tinggi menerima lebih banyak permintaan. |
Access Control | Menyediakan kontrol akses di tingkat listener. Untuk informasi selengkapnya, lihat Kontrol akses. |
Health Check | Mendukung protokol TCP dan HTTP. Setelah Anda mengaktifkan pemeriksaan kesehatan, Server Load Balancer menggunakannya untuk menilai ketersediaan server backend Anda. Untuk memahami cara kerja pemeriksaan kesehatan, lihat Cara kerja pemeriksaan kesehatan Server Load Balancer. |
Others | Anda juga dapat mengonfigurasi Classic Load Balancer menggunakan anotasi. Untuk informasi selengkapnya, lihat Mengonfigurasi Classic Load Balancer menggunakan anotasi. |
Network Load Balancer (NLB)
Create NLB Instance
Anda dapat membuat sumber daya Network Load Balancer (NLB). Untuk informasi lebih lanjut, lihat Buat dan kelola instans NLB.
Nama | Deskripsi |
Name | Masukkan nama kustom untuk instans NLB. Parameter ini wajib hanya saat Anda membuat instans NLB baru. |
Access Method | Pilih Public Access atau Internal Access sesuai kebutuhan. |
Billing Method | Pay-as-you-go. Untuk informasi lebih lanjut, lihat Penagihan NLB. |
IP Version | Pilih IPv4 atau DualStack sesuai kebutuhan. |
Scheduling Algorithm | Pilih algoritma penjadwalan.
|
Health Check | Aktifkan atau nonaktifkan pemeriksaan kesehatan.
|
Others | Anda juga dapat mengonfigurasi instans NLB menggunakan annotation. Untuk informasi lebih lanjut, lihat Konfigurasi instans NLB menggunakan annotation. |
VPC | Wilayah dan ID VPC default untuk kluster. |
vSwitch | Pilih virtual switch untuk zona yang didukung di VPC default kluster. Anda juga dapat mengklik Create vSwitch untuk membuat yang baru. |
Use Existing Resource
Pilih instans NLB yang ada dari daftar drop-down. Anda juga dapat memilih opsi untuk memaksa menimpa listener yang ada. Untuk informasi lebih lanjut, lihat Gunakan instans Server Load Balancer yang ada.
Penggunaan kembali instans NLB tunduk pada batasan tertentu. Untuk informasi lebih lanjut, lihat Instans Server Load Balancer mana yang dapat digunakan kembali?
Configure Resources
Nama | Deskripsi |
Scheduling Algorithm | Pilih algoritma penjadwalan.
|
Health Check | Aktifkan atau nonaktifkan pemeriksaan kesehatan.
|
Others | Anda juga dapat mengonfigurasi instans NLB menggunakan annotation. Untuk informasi lebih lanjut, lihat Konfigurasi instans NLB menggunakan annotation. |
VPC | Wilayah dan ID VPC default untuk kluster. |
vSwitch | Pilih virtual switch untuk zona yang didukung di VPC default kluster. Anda juga dapat mengklik Create vSwitch untuk membuat yang baru. |
Langkah selanjutnya
Jika Anda perlu melihat, memperbarui, atau menghapus layanan, atau mengaktifkan perlindungan penghapusan layanan, Anda dapat melakukan operasi berikut. Misalnya, Anda dapat memodifikasi load balancer yang menghadap publik yang terkait dengan layanan tersebut.
Saat Anda menghapus Service atau mengubah jenisnya dari LoadBalancer ke jenis lain, instans load balancer yang dibuat otomatis akan dilepas secara otomatis.
Konsol
Login ke konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Pada halaman Services, temukan layanan target, lalu klik Update di kolom Actions atau klik ikon
untuk memperbarui, Delete, atau Enable Deletion Protection untuk layanan tersebut.
Kubectl
Perbarui layanan
Metode 1: Jalankan perintah berikut untuk memperbarui layanan.
kubectl edit service my-nginx-svcMetode 2: Ubah file YAML dan terapkan perubahan tersebut.
kubectl apply -f my-nginx-svc.yaml
Lihat layanan
Jalankan perintah berikut untuk melihat layanan.
kubectl get service my-nginx-svcOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx-svc LoadBalancer 172.21.XX.XX 192.168.XX.XX 80:31599/TCP 5mHapus layanan
Jalankan perintah berikut untuk menghapus layanan.
kubectl delete service my-nginx-svc