All Products
Search
Document Center

Container Compute Service:Ekspos aplikasi dengan load balancer yang sudah ada

Last Updated:Aug 21, 2026

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.

    Penting

    Jika Anda mengubah Service bertipe type: LoadBalancer menjadi 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.

    Penting

    Jangan 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.

  1. Gunakan kubectl di Cloud Shell untuk terhubung ke kluster Anda.

  2. Buat file bernama my-nginx.yaml dengan konten berikut.

    Lihat konten YAML

    apiVersion: apps/v1
    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 dalam manifes Service agar aplikasi dapat diekspos.
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80        # Port ini harus diekspos dalam Service.
  3. Jalankan perintah berikut untuk melakukan deploy aplikasi contoh my-nginx.

    kubectl apply -f my-nginx.yaml
  4. Jalankan perintah berikut untuk memverifikasi bahwa aplikasi sedang berjalan.

    kubectl get deployment my-nginx

    Output 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

  1. Login ke Konsol ACS. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Network > Services.

  3. Di halaman Services, klik Create di pojok kiri atas.

  4. 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 port dalam file YAML Service) dan port container (bidang targetPort dalam 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

  5. Klik Create. Di halaman Services, Anda dapat melihat Service yang baru dibuat.

  6. 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

  1. 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-listeners menjadi true. Dalam contoh ini, instans SLB baru dibuat dan memerlukan listener, sehingga nilainya diatur menjadi true. Untuk informasi lebih lanjut, lihat Use annotations to configure Classic Load Balancer (CLB) instances.

    • Atur nilai selector menjadi nilai matchLabels dalam file my-nginx.yaml, yaitu app: 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
  2. Jalankan perintah berikut untuk membuat Service my-nginx-svc dan mengekspos aplikasi.

    kubectl apply -f my-nginx-svc.yaml
  3. Jalankan perintah berikut untuk memverifikasi bahwa Service LoadBalancer telah dibuat.

    kubectl get svc my-nginx-svc

    Output 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
  4. Jalankan perintah curl <YOUR-External-IP> untuk mengakses aplikasi. Ganti placeholder <YOUR-External-IP> dengan EXTERNAL-IP dari langkah sebelumnya.

    curl 39.106.XX.XX

    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 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>