全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan instance Server Load Balancer yang ada untuk mengekspos aplikasi

更新时间:Nov 11, 2025

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

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.

Klik untuk melihat metode memeriksa versi cloud-controller-manager:

Gunakan Konsol

Di halaman Add-ons kluster, Anda dapat melihat versi komponen cloud-controller-manager.

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi sebelah kiri, klik Add-ons.

  3. Di halaman Add-ons, pada tab Core Components, Anda dapat melihat versi komponen Cloud Controller Manager.

Gunakan kubectl (hanya untuk kluster khusus ACK)

kubectl get pod -n kube-system -o yaml|grep image:|grep cloud-con|uniq

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

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi sebelah kiri, pilih Workloads > Deployments.

  3. Di halaman Deployments, klik Create from Image, lalu konfigurasikan informasi dasar, kontainer, dan pengaturan lanjutan untuk aplikasi.

    1. Di tab Basic Information, atur Application Name menjadi my-nginx, pertahankan nilai default untuk parameter lainnya, lalu klik Next.

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

    3. Di tab Advanced Configuration, pertahankan pengaturan default dan klik Create untuk membuat aplikasi Nginx.

Gunakan kubectl

  1. 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.
  2. Jalankan perintah berikut untuk mendeploy aplikasi contoh my-nginx.

    kubectl apply -f my-nginx.yaml
  3. Anda dapat menjalankan perintah berikut untuk memastikan bahwa aplikasi contoh berada dalam status Normal.

    kubectl get deployment my-nginx

    Output 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

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sebelah kiri, pilih Network > Services.

  3. 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:

    ClusterIP

    Layanan ClusterIP digunakan untuk komunikasi dalam kluster. Penemuan layanan hanya didukung ketika tipe layanan diatur ke ClusterIP. Anda dapat menggunakan Layanan Headless untuk berinteraksi dengan mekanisme penemuan layanan lain tanpa harus bergantung pada penemuan layanan dan penyeimbangan beban berbasis ClusterIP default yang disediakan oleh Kubernetes.

    LoadBalancer

    Layanan LoadBalancer mengekspos aplikasi ke internet dengan mengintegrasikan Alibaba Cloud Classic Load Balancer (CLB) dan Network Load Balancer (NLB). Dibandingkan dengan Layanan NodePort, Layanan LoadBalancer secara signifikan meningkatkan ketersediaan dan kinerja aplikasi. Tipe berikut didukung:

    NodePort

    Layanan NodePort menyediakan cara mudah bagi pengguna eksternal untuk mengakses layanan di kluster melalui alamat IP dan port tertentu dari sebuah node. Pengguna dapat terhubung ke Layanan NodePort dengan mengakses <NodeIP>:<NodePort>. Namun, Anda harus mengonfigurasi penyeimbangan beban secara manual.

    1. Pilih LoadBalancer sebagai tipe layanan.

    2. 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.
    3. 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 port dalam file YAML dan port kontainer sesuai dengan bidang targetPort dalam 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.

    Penting

    Jangan gunakan kembali instance SLB milik API Server kluster. Jika tidak, akses kluster akan menjadi abnormal.

    None

    Setelah mengonfigurasi parameter, klik OK.

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

    image

Gunakan kubectl

  1. 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-listeners menjadi "true". Dalam contoh ini, instance SLB baru dibuat dan memerlukan pendengar. Oleh karena itu, nilainya diatur ke true. 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: LoadBalancer

    Bidang

    Deskripsi

    kind

    Menentukan objek sumber daya sebagai Layanan.

    metadata

    Menentukan informasi dasar tentang Layanan, seperti nama, label, dan namespace.

    metadata.annotations

    Dukungan 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.selector

    Menentukan pemilih (selector) untuk Layanan. Layanan menentukan Pod backend yang akan dikaitkan dan diekspos berdasarkan hubungan pencocokan antara pemilih dan label Pod.

    spec.ports.port

    Menentukan port yang diekspos oleh Layanan ke ClusterIP. Ini adalah titik masuk bagi klien dalam kluster untuk mengakses Layanan, yaitu clusterIP:port.

    spec.ports.targetPort

    Menentukan port Pod backend. Trafik yang masuk melalui port mengalir melalui kube-proxy ke targetPort Pod backend dan akhirnya masuk ke kontainer.

  2. Jalankan perintah berikut untuk membuat Layanan bernama my-nginx-svc dan menggunakannya untuk mengekspos aplikasi.

    kubectl apply -f my-nginx-svc.yaml
  3. Jalankan perintah berikut untuk memastikan bahwa Layanan 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:30471/TCP   5m
  4. Jalankan 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

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sebelah kiri, pilih Network > Services.

  3. 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-svc
  • Metode 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-svc

Output 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   5m

Hapus Layanan

Jalankan perintah berikut untuk menghapus Layanan.

kubectl delete service my-nginx-svc