Anda dapat mengakses Layanan yang diekspos oleh instance Alibaba Cloud Server Load Balancer (SLB) dari luar kluster menggunakan nama domain instance SLB atau titik akhir <IP:port layanan>. Untuk mengakses Layanan dari dalam kluster, gunakan titik akhir <nama Layanan:port layanan>. Topik ini menggunakan aplikasi Nginx sebagai contoh untuk menjelaskan cara mengekspos aplikasi menggunakan Layanan LoadBalancer yang dikaitkan dengan instance SLB yang sudah ada.
Prasyarat
Anda telah membuat kluster ACK atau kluster ACK Serverless. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola, Buat kluster khusus ACK (Pembuatan ditangguhkan), dan Buat kluster ACK Serverless.
PentingSaat membuat kluster, Anda hanya dapat memilih tipe dan spesifikasi untuk instance SLB baru. Anda tidak dapat memilih instance SLB yang sudah ada. Untuk menggunakan instance SLB yang sudah ada, jangan instal plugin Ingress saat membuat kluster. Setelah kluster dibuat, Anda harus mengonfigurasi instance SLB yang sudah ada secara manual. Untuk informasi selengkapnya, lihat Gunakan instance CLB yang ada dan Gunakan instance NLB yang ada.
Anda telah membuat instance Classic Load Balancer (CLB) atau Network Load Balancer (NLB) di Konsol SLB. Instance tersebut harus berada di wilayah yang sama dengan kluster ACK. Jika belum membuat instance, lihat Buat dan kelola instance CLB dan Buat dan kelola instance NLB.
Catatan Penggunaan
Saat Anda menentukan instance SLB yang sudah ada, konfigurasi pendengar (listener) untuk instance SLB bergantung pada versi komponen cloud-controller-manager:
Jika versi komponen cloud-controller-manager adalah 1.9.3.59-ge3bc999-aliyun atau lebih baru: Saat Anda menentukan instance SLB yang sudah ada, cloud-controller-manager secara default tidak memproses pendengar untuk instance tersebut. Anda dapat menambahkan anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"untuk mengaktifkan konfigurasi pendengar atau mengonfigurasi aturan pendengar untuk instance SLB secara manual.Jika versi komponen cloud-controller-manager lebih lama dari 1.9.3.59-ge3bc999-aliyun: Saat Anda menentukan instance SLB yang sudah ada, cloud-controller-manager secara otomatis membuat dan mengelola grup server backend untuk instance tersebut. Komponen ini juga memastikan bahwa pendengar mengarah ke sumber daya backend yang dikelola Kubernetes, bahkan jika Anda telah mengonfigurasi pendengar tersebut secara manual.
Peringatan
Sebelum menggunakan instance SLB yang sudah ada untuk mengekspos aplikasi, perhatikan hal-hal berikut. Untuk informasi selengkapnya, lihat topik-topik berikut:
Langkah 1: Deploy aplikasi contoh
Topik ini menggunakan aplikasi Nginx tanpa status sebagai contoh untuk menunjukkan cara mengekspos aplikasi di ACK menggunakan Layanan LoadBalancer.
Gunakan Konsol
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi sebelah kiri, pilih .
Di halaman Deployments, klik Create from Image, lalu konfigurasikan informasi dasar, kontainer, dan pengaturan lanjutan untuk aplikasi.
Di tab Basic Information, atur Application Name menjadi my-nginx, pertahankan nilai default untuk parameter lainnya, lalu klik Next.
Di tab Container Configuration, atur nama citra kontainer dan port, pertahankan nilai default untuk parameter lainnya, lalu klik Next.
Item Konfigurasi
Nilai
Image Name
Klik Select Image. Di kotak dialog Select Image and Version, klik tab Artifact Center, cari
nginx, pilih repository citra bernama openanolis/nginx, klik Select Image Version, atur versi citra, lalu klik OK.Port
Name: nginx.
Container Port: 80.
Di tab Advanced Configuration, pertahankan pengaturan default dan klik Create untuk membuat aplikasi Nginx.
Gunakan kubectl
Buat file bernama my-nginx.yaml yang berisi konten YAML berikut untuk aplikasi contoh.
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: my-nginx # The name of the sample application. labels: app: nginx spec: replicas: 2 # The number of replicas. selector: matchLabels: app: nginx # The value of Selector in the corresponding Service must be the same to expose this application through the Service. 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 # This port needs to be exposed in the Service.Jalankan perintah berikut untuk mendeploy aplikasi contoh my-nginx.
kubectl apply -f my-nginx.yamlAnda dapat menjalankan perintah berikut untuk memastikan bahwa aplikasi contoh berada dalam status Normal.
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 menggunakan Layanan yang menggunakan instance SLB yang sudah ada
Anda dapat membuat Layanan LoadBalancer untuk mengekspos aplikasi di konsol atau menggunakan kubectl.
Gunakan Konsol
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sebelah kiri, pilih .
Di halaman Services, klik Create. Di kotak dialog Create Service yang muncul, atur parameter untuk Layanan tersebut.
Item Konfigurasi
Deskripsi
Contoh
Service Name
Nama Layanan.
my-nginx-svc
Service Type
Pilih tipe Layanan. Jaringan Layanan mendukung mode berikut untuk menangani akses dari klien dengan sumber dan jenis berbeda:
Pilih LoadBalancer sebagai tipe layanan.
Atur Load Balancer Type menjadi Classic Load Balancer (CLB) dan pilih Use Existing Resource.
Jika Cloud Controller Manager (CCM) versi 2.5.0 atau lebih baru, fitur opsi CLB termasuk dalam daftar putih. Untuk menggunakan fitur ini, ajukan permintaan di Pusat Kuota.
Kemudian, pilih instance CLB yang telah dibuat dari daftar drop-down. Dalam contoh ini, instance CLB baru dibuat dan memerlukan pendengar. Oleh karena itu, pilih Force Overwrite Existing Listeners.
External Traffic Policy
Parameter External Traffic Policy hanya tersedia jika Anda mengatur parameter Service Type ke Node Port atau Server Load Balancer. Untuk informasi selengkapnya tentang kebijakan trafik eksternal, lihat bagian Perbedaan antara kebijakan trafik eksternal dalam topik "Memulai". Nilai yang valid:
Local: Merutekan lalu lintas hanya ke Pod pada node saat ini.
Cluster: mengarahkan trafik ke Pod di node lain dalam kluster.
Local
Service Association
Aplikasi backend yang ingin Anda kaitkan dengan Layanan. Jika Anda tidak memilih aplikasi backend, objek Endpoint tidak akan dibuat. Untuk informasi selengkapnya, lihat Services-without-selectors.
Name: app
Value: 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.Service Port: 80
Container Port: 80
Protocol: TCP
Annotations
Anotasi yang akan ditambahkan ke Layanan untuk mengonfigurasi instance SLB. Untuk informasi selengkapnya, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB) dan Konfigurasi instance NLB menggunakan anotasi.
PentingJangan gunakan kembali instance SLB milik API Server kluster. Jika tidak, akses kluster akan menjadi abnormal.
None
Setelah mengonfigurasi parameter, klik OK.
Setelah Layanan dibuat, klik namanya untuk membuka halaman detail. Di bagian Basic Information, klik alamat External IP Layanan, seperti 39.106.XX.XX:80, untuk mengakses aplikasi contoh.

Gunakan kubectl
Buat Layanan.
Buat file bernama my-nginx-svc.yaml yang berisi konten YAML berikut untuk Layanan contoh.
Ubah anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id. Ganti ${YOUR_LB_ID} dengan ID instance SLB yang Anda buat di Konsol SLB.Saat menggunakan instance SLB yang sudah ada, pendengar tidak dibuat untuk instance SLB dan pendengar yang sudah ada tidak ditimpa secara default. Untuk menimpa pendengar, Anda dapat mengatur anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listenersmenjadi"true". Dalam contoh ini, instance SLB baru dibuat dan memerlukan pendengar. Oleh karena itu, nilainya diatur ketrue. Untuk informasi selengkapnya tentang anotasi, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB) dan Gunakan anotasi untuk mengonfigurasi instance Network Load Balancer (NLB).Ubah nilai selector menjadi nilai matchLabels dalam file my-nginx.yaml aplikasi contoh. Nilainya adalah
app: nginx. Hal ini mengaitkan Layanan dengan aplikasi backend.
apiVersion: v1 kind: Service # Defines the resource object as a Service. metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID} service.beta.kubernetes.io/alibaba-cloud-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: LoadBalancerBidang
Deskripsi
kindMenentukan objek sumber daya sebagai Layanan.
metadataMenentukan informasi dasar tentang Layanan, seperti nama, label, dan namespace.
metadata.annotationsDukungan berbagai anotasi terkait SLB. Misalnya, dalam contoh YAML di atas, service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id menentukan instance CLB yang sudah ada. Untuk informasi selengkapnya tentang anotasi, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB).
spec.selectorMenentukan pemilih (selector) untuk Layanan. Layanan menentukan Pod backend yang akan dikaitkan dan diekspos berdasarkan hubungan pencocokan antara pemilih dan label Pod.
spec.ports.portMenentukan port yang diekspos oleh Layanan ke ClusterIP. Ini adalah titik masuk bagi klien dalam kluster untuk mengakses Layanan, yaitu
clusterIP:port.spec.ports.targetPortMenentukan port Pod backend. Trafik yang masuk melalui
portmengalir melalui kube-proxy ketargetPortPod backend dan akhirnya masuk ke kontainer.Jalankan perintah berikut untuk membuat Layanan bernama my-nginx-svc dan menggunakannya untuk mengekspos aplikasi.
kubectl apply -f my-nginx-svc.yamlJalankan perintah berikut untuk memastikan bahwa Layanan 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 EXTERNAL-IP yang diperoleh di atas.Output yang diharapkan:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p>Thank you for using nginx.
Langkah Selanjutnya
Untuk melihat, memperbarui, atau menghapus Layanan—misalnya, untuk mengubah instance SLB publik yang dikaitkan dengan Layanan—lakukan langkah-langkah berikut.
Gunakan Konsol
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sebelah kiri, pilih .
Di halaman Services, klik Update atau Delete di kolom Actions Layanan target untuk memperbarui atau menghapus Layanan.
Gunakan kubectl
Perbarui Layanan
Metode 1: Jalankan perintah berikut untuk memperbarui Layanan.
kubectl edit service my-nginx-svcMetode 2: Hapus Layanan lama secara manual, ubah file YAML, lalu buat ulang Layanan.
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