全部产品
Search
文档中心

Container Service for Kubernetes:Pemecahan masalah layanan

更新时间:Nov 11, 2025

Topik ini menjelaskan cara mendiagnosis dan memecahkan masalah layanan LoadBalancer.

Informasi latar belakang

Saat Anda mengatur tipe layanan menjadi Type=LoadBalancer, komponen ACK Cloud Controller Manager (CCM) secara otomatis membuat atau mengonfigurasi instans Alibaba Cloud Classic Load Balancer (CLB) untuk layanan tersebut. Ini mencakup sumber daya seperti instans CLB, pendengar (listener), dan kelompok server backend. Untuk informasi lebih lanjut tentang kebijakan pembaruan otomatis untuk CLB, lihat Catatan tentang konfigurasi Server Load Balancer untuk layanan.

Proses diagnosis

Pastikan versi komponen CCM Anda adalah V1.9.3.276-g372aa98-aliyun atau yang lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui komponen CCM, lihat Perbarui komponen CCM. Untuk catatan rilis CCM, lihat Cloud Controller Manager.

  1. Jalankan perintah berikut untuk mengidentifikasi layanan yang terkait dengan instans CLB.

    kubectl get svc -A |grep -i LoadBalancer|grep {XXX.XXX.XXX.XXX}  # XXX.XXX.XXX.XXX adalah alamat IP load balancer.
  2. Jalankan perintah berikut untuk memeriksa apakah layanan memiliki event kesalahan.

    kubectl -n {your-namespace} describe svc {your-svc-name}

Event kesalahan layanan dan solusinya

Tabel berikut menjelaskan solusi untuk berbagai pesan kesalahan.

Pesan kesalahan

Deskripsi dan solusi

The backend server number has reached the quota limit of this load balancer

Jumlah server backend untuk instans CLB telah mencapai batas kuota.

Solusi: Optimalkan penggunaan kuota Anda dengan salah satu cara berikut:

  • Secara default, sebuah instans CLB dapat memiliki hingga 200 server backend yang terhubung. Anda dapat mengajukan peningkatan kuota. Untuk mengecek dan meningkatkan kuota Anda, masuk ke halaman Manajemen Kuota SLB.

  • Atur kebijakan lalu lintas eksternal instans CLB ke mode Local dengan menetapkan externalTrafficPolicy: Local. Mode Cluster menghabiskan kuota dengan cepat. Saat menggunakan mode Cluster, gunakan label service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label untuk menentukan virtual server yang akan digunakan. Hal ini mengurangi konsumsi kuota. Untuk informasi lebih lanjut tentang cara menggunakan anotasi untuk mengaitkan virtual server backend dengan label, lihat Gunakan anotasi untuk mengonfigurasi instans Classic Load Balancer (CLB).

  • Ketika beberapa layanan menggunakan kembali instans CLB yang sama, jumlah server backend bersifat kumulatif. Buat instans CLB baru saat membuat layanan.

The load balancer does not support backend servers of the ENI type

Instans CLB bersama tidak mendukung ENI.

Solusi: Jika backend CLB menggunakan ENI, Anda harus memilih instans CLB berkinerja tinggi. Anda dapat menambahkan anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small" ke layanan.

Penting

Pastikan anotasi tersebut kompatibel dengan versi CCM Anda. Untuk informasi lebih lanjut tentang pemetaan antara anotasi dan versi CCM, lihat Gunakan anotasi untuk mengonfigurasi instans Classic Load Balancer (CLB).

There are no available nodes for the LoadBalancer

Instans CLB tidak memiliki server backend. Periksa apakah layanan dikaitkan dengan pod dan apakah pod berjalan sebagaimana mestinya.

Solusi:

  • Jika tidak ada pod yang dikaitkan, kaitkan layanan dengan pod aplikasi.

  • Jika pod yang dikaitkan bermasalah, temukan dan selesaikan masalah pada pod tersebut. Untuk informasi lebih lanjut, lihat Pemecahan masalah pod.

  • Jika instans CLB tidak memiliki server backend tetapi pod berjalan sebagaimana mestinya, periksa apakah pod berada di node master. Jika ya, pindahkan pod aplikasi ke node pekerja.

  • alicloud: unable to find the load balancer named [%s] in OpenAPI, but it is defined in service.loadbalancer.ingress. This may happen when you remove the loadbalancerid annotation.

  • alicloud: cannot find the load balancer, but it is defined in service

Instans CLB tidak dapat dikaitkan berdasarkan layanan.

Solusi: Masuk ke Konsol Server Load Balancer. Di wilayah tempat layanan berada, cari instans CLB berdasarkan EXTERNAL-IP layanan.

  1. Jika instans CLB tidak ditemukan dan layanan tidak lagi diperlukan, hapus layanan tersebut.

  2. Jika instans CLB ada, lakukan langkah-langkah berikut:

    1. Jika instans CLB dibuat secara manual di konsol CLB, tambahkan anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id ke layanan. Untuk informasi lebih lanjut, lihat Gunakan anotasi untuk mengonfigurasi instans Classic Load Balancer (CLB).

    2. Jika instans CLB dibuat secara otomatis oleh CCM, periksa apakah instans CLB memiliki label kubernetes.do.not.delete. Jika tidak, tambahkan label tersebut. Untuk informasi lebih lanjut, lihat Bagaimana cara mengganti nama instans SLB jika saya menggunakan versi CCM yang lebih lama?.

ORDER.ARREARAGE Message: The account is in arrears.

Akun Anda memiliki pembayaran tertunda.

PAY.INSUFFICIENT_BALANCE Message: Your account does not have a sufficient balance.

Saldo akun Anda tidak mencukupi.

Status Code: 400 Code: Throttlingxxx

OpenAPI CLB sedang mengalami pengendalian aliran.

Solusi:

  1. Masuk ke halaman Manajemen Kuota SLB untuk melihat dan memastikan kuota CLB Anda mencukupi.

  2. Jalankan perintah berikut untuk memeriksa apakah layanan kluster memiliki kesalahan. Jika ada kesalahan, selesaikan event tersebut sesuai dengan yang dijelaskan dalam tabel ini.

    kubectl -n {your-namespace} describe svc {your-svc-name}

Status Code: 400 Code: RspoolVipExist Message: There are VIPs associated with this vServer group.

Pendengar yang terkait dengan kelompok vServer tidak dapat dihapus.

Solusi:

  1. Periksa apakah anotasi dalam layanan berisi ID instans CLB, misalnya, service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: {your-clb-id}.

    Jika anotasi berisi ID instans CLB, maka instans CLB tersebut digunakan kembali.

  2. Di konsol CLB, hapus pendengar yang sesuai dengan port dalam layanan. Untuk informasi lebih lanjut tentang cara menghapus pendengar CLB, lihat Konfigurasi aturan pengalihan pendengar.

Status Code: 400 Code: NetworkConflict

Kesalahan ini terjadi jika Anda menggunakan kembali instans CLB akses internal yang tidak berada dalam VPC yang sama dengan kluster.

Solusi: Pastikan instans CLB dan kluster berada dalam VPC yang sama.

Status Code: 400 Code: VSwitchAvailableIpNotExist Message: The specified VSwitch has no available IP addresses.

Jumlah alamat IP yang tersedia di vSwitch tidak mencukupi.

Solusi: Gunakan service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id: "${YOUR_VSWITCH_ID}" untuk menentukan vSwitch lain dalam VPC yang sama.

The specified Port must be between 1 and 65535.

Mode ENI tidak mendukung nilai string untuk targetPort.

Solusi: Ubah nilai bidang targetPort dalam file YAML layanan menjadi bilangan bulat, atau tingkatkan CCM. Untuk informasi lebih lanjut tentang cara memperbarui CCM, lihat Perbarui komponen CCM.

Status Code: 400 Code: ShareSlbHaltSales Message: The shared instance has been discontinued.

Versi CCM yang lebih lama membuat instans CLB bersama secara default. Namun, instans CLB bersama telah dihentikan.

Solusi: Perbarui komponen CCM.

cannot change ResourceGroupId once created

Kelompok sumber daya instans CLB tidak dapat diubah setelah instans dibuat.

Solusi: Hapus anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id:"rg-xxxx" dari layanan.

cannot find the ENI ID for IP x.x.x.x in VPC vpc-xxxx

Alamat IP ENI yang ditentukan tidak ditemukan di VPC.

Solusi: Periksa apakah anotasi service.beta.kubernetes.io/backend-type: eni dikonfigurasi dalam layanan. Jika ya, periksa apakah plugin jaringan kluster adalah Flannel. Mode jaringan Flannel tidak mendukung mode ENI. Jika demikian, hapus anotasi tersebut dari layanan.

  • The operation is not allowed because the instanceChargeType of the load balancer is PayByCLCU.

  • The user does not have permission to modify InstanceChargeType to spec.

Metode penagihan instans CLB tidak dapat diubah dari bayar sesuai penggunaan menjadi bayar berdasarkan spesifikasi.

Solusi:

  • Hapus anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec dari layanan.

  • Jika layanan berisi anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type, atur nilainya menjadi PayByCLCU.

SyncLoadBalancerFailed: The load balancer xxx cannot be reused. Cannot reuse a load balancer created by Kubernetes.

Kesalahan ini terjadi ketika instans CLB yang dibuat oleh CCM digunakan kembali.

Solusi:

  1. Lihat ID CLB yang sesuai dengan anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id dalam file YAML layanan.

  2. Selesaikan kesalahan berdasarkan status layanan.

    • Jika Layanan berada dalam status pending, ganti ID CLB dalam anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id dengan ID instans CLB yang Anda buat secara manual di Konsol Classic Load Balancer (CLB).

    • Jika layanan tidak dalam status pending, lakukan langkah-langkah berikut:

      • Jika alamat IP instans CLB sama dengan alamat IP eksternal layanan, hapus anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id.

      • Jika alamat IP instans CLB tidak cocok dengan alamat IP eksternal Layanan, masuk ke Konsol Classic Load Balancer (CLB). Di wilayah kluster, temukan instans CLB yang sesuai berdasarkan alamat IP eksternal Layanan, lalu ubah ID CLB dalam anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id. Jika Anda tidak dapat menemukan instans CLB yang sesuai, ubah ID CLB dalam anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id menjadi ID instans CLB yang Anda buat secara manual di konsol CLB, lalu buat ulang Layanan.

alicloud: cannot change LoadBalancer AddressType once created. Delete and retry.

Tipe instans CLB tidak dapat diubah setelah instans dibuat. Kesalahan ini terjadi jika Anda mengubah tipe CLB setelah membuat layanan.

Solusi: Hapus dan buat ulang layanan.

The load balancer lb-xxxxx cannot be reused. The service has been associated with the IP address [xxx.xxx.xxx.xxx] and cannot be bound to the IP address [xxx.xxx.xxx.xxx].

Layanan sudah terhubung ke instans CLB dan tidak dapat dihubungkan ke instans lain.

Solusi: Anda tidak dapat menggunakan kembali instans CLB yang ada dengan mengubah ID CLB dalam anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id. Untuk mengubah instans CLB yang terhubung, Anda harus menghapus dan membuat ulang layanan.

Metode pemecahan masalah

Untuk masalah yang bukan merupakan kesalahan layanan, pecahkan masalah tersebut seperti yang dijelaskan dalam tabel berikut.

Kategori masalah

Gejala

Solusi

Masalah akses CLB

Distribusi beban tidak merata di backend CLB

Distribusi beban tidak merata di backend CLB

Terjadi kesalahan 503 saat mengakses instans CLB selama pembaruan aplikasi

Terjadi kesalahan 503 saat mengakses instans CLB selama pembaruan aplikasi

Instans CLB tidak dapat diakses dari dalam kluster

Instans CLB tidak dapat diakses dari dalam kluster

Instans CLB tidak dapat diakses dari luar kluster

Instans CLB tidak dapat diakses dari luar kluster

Terjadi kesalahan "The plain HTTP request was sent to HTTPS port" saat mengakses port HTTPS

Tidak dapat terhubung ke layanan HTTPS backend

Kelas konfigurasi untuk CLB

Anotasi layanan tidak berlaku

Apa yang harus saya lakukan jika anotasi layanan tidak berlaku?

Konfigurasi CLB dimodifikasi

Mengapa konfigurasi instans CLB saya dimodifikasi?

Menggunakan kembali instans CLB yang ada tidak berlaku

FAQ Layanan

Tidak ada pendengar yang dikonfigurasi saat instans CLB yang ada digunakan kembali

Mengapa tidak ada pendengar yang dikonfigurasi saat saya menggunakan kembali instans CLB yang ada?

Backend CLB tidak konsisten

Apa yang harus saya lakukan jika kelompok vServer SLB tidak diperbarui?

Masalah penghapusan CLB

Instans CLB dihapus

Kapan instans SLB dihapus secara otomatis?

Instans CLB tidak dihapus setelah layanan dihapus

Kapan instans SLB dihapus secara otomatis?

Distribusi beban tidak merata di backend CLB

Cause

Algoritma penjadwalan instans CLB tidak dikonfigurasi dengan benar.

Symptom

Beban didistribusikan secara tidak merata di server backend instans CLB.

Solution

  • Untuk layanan dalam mode Local (externalTrafficPolicy: Local), atur algoritma penjadwalan CLB ke Round-robin berbobot. Anda dapat melakukannya dengan menambahkan anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wrr" ke layanan.

  • Jika aplikasi Anda menggunakan koneksi persisten, beban mungkin tidak seimbang karena beberapa permintaan dikirim melalui setiap koneksi. Dalam hal ini, atur algoritma penjadwalan CLB ke jumlah koneksi paling sedikit dengan bobot dengan menambahkan anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wlc" ke layanan.

Terjadi kesalahan 503 saat mengakses instans CLB selama pembaruan aplikasi

Cause

Pengurasan koneksi tidak dikonfigurasi untuk pendengar CLB, atau terminasi graceful tidak dikonfigurasi untuk pod.

Symptoms

Saat mengakses instans CLB selama pembaruan aplikasi, kesalahan 503 dikembalikan.

Solution

  1. Gunakan anotasi seperti service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain untuk mengonfigurasi pengurasan koneksi untuk pendengar CLB. Untuk informasi lebih lanjut tentang anotasi tersebut, lihat Operasi pendengar khas.

  2. Konfigurasikan preStop dan readinessProbe untuk pod berdasarkan mode jaringan kontainer Anda.

    • readinessProbe adalah pemeriksaan kesiapan. Pod hanya ditambahkan ke Endpoint setelah melewati pemeriksaan kesiapan. Setelah ACK mendeteksi perubahan pada Endpoint, node tersebut dilampirkan ke backend instans CLB. Anda harus mengonfigurasi frekuensi probe, penundaan, dan ambang batas tidak sehat untuk readinessProbe dengan benar. Beberapa aplikasi membutuhkan waktu lama untuk memulai. Jika periode timeout terlalu singkat, pod mungkin akan restart berulang kali.

    • Atur periode preStop ke waktu yang dibutuhkan aplikasi untuk memproses semua permintaan yang tersisa. Atur periode terminationGracePeriodSeconds ke nilai yang setidaknya 30 detik lebih lama dari periode preStop.

    Contoh konfigurasi Pod:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: default
    spec:
      containers:
      - name: nginx
        image: nginx
        # Pemeriksaan kesehatan
        livenessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 30
          successThreshold: 1
          tcpSocket:
            port: 5084
          timeoutSeconds: 1
        # Pemeriksaan kesiapan
        readinessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 30
          successThreshold: 1
          tcpSocket:
            port: 5084
          timeoutSeconds: 1
        # Keluar secara graceful
        lifecycle:
          preStop:
            exec:
              command:
              - sleep
              - 30
      terminationGracePeriodSeconds: 60

Instans CLB tidak dapat diakses dari dalam kluster

Penyebab

Pengaturan externalTrafficPolicy: Local dikonfigurasi untuk Layanan. Saat pengaturan ini digunakan, kube-proxy hanya meneruskan lalu lintas ke endpoint lokal. Jika permintaan berasal dari node yang tidak memiliki pod backend untuk Layanan tersebut, permintaan gagal. Meskipun alamat CLB dimaksudkan untuk akses dari luar kluster, permintaan dari dalam kluster tetap dirutekan oleh kube-proxy berdasarkan kebijakan ini.

Jika tidak ada pod layanan backend untuk Layanan tersebut di node yang menerima permintaan, terjadi kegagalan koneksi jaringan. Jika pod layanan backend ada di node tersebut, akses berhasil. Untuk informasi lebih lanjut tentang masalah ini, lihat kube-proxy adds external-lb address to node-local iptables rule.

Gejala

Instans CLB tidak dapat diakses dari dalam kluster.

Solusi

  • Dari dalam kluster Kubernetes, akses layanan menggunakan ClusterIP atau nama layanan.

    Nama layanan Ingress adalah nginx-ingress-lb.kube-system.

  • Ubah nilai externalTrafficPolicy dalam layanan LoadBalancer menjadi Cluster. Namun, hal ini menyebabkan alamat IP sumber hilang di aplikasi. Perintah berikut menunjukkan cara memodifikasi layanan Ingress:

    Catatan

    Jika Anda menggunakan instans CLB Ingress, pod hanya dapat mengakses layanan yang diekspos melalui Ingress atau instans CLB pada node tempat pod Ingress berada.

    kubectl edit svc nginx-ingress-lb -n kube-system
  • Jika kluster Anda menggunakan Terway dengan ENI atau beberapa alamat IP per ENI, Anda dapat mengubah nilai externalTrafficPolicy dalam layanan LoadBalancer menjadi Cluster dan menambahkan anotasi untuk transmisi langsung ENI, seperti service.beta.kubernetes.io/backend-type: "eni". Contoh kode berikut memberikan ilustrasi. Metode ini mempertahankan alamat IP sumber dan memungkinkan Anda mengakses layanan dari dalam kluster tanpa masalah. Untuk informasi lebih lanjut, lihat Gunakan anotasi untuk mengonfigurasi instans Classic Load Balancer (CLB).

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/backend-type: eni
      labels:
        app: nginx-ingress-lb
      name: nginx-ingress-lb
      namespace: kube-system
    spec:
      externalTrafficPolicy: Cluster

Instans CLB tidak dapat diakses dari luar kluster

Cause

Daftar kontrol akses (ACL) dikonfigurasi untuk instans CLB, atau instans CLB tidak berjalan sebagaimana mestinya.

Symptom

Instans CLB tidak dapat diakses dari luar kluster.

Solution

  1. Jalankan perintah berikut untuk melihat informasi event layanan dan selesaikan event kesalahan apa pun. Untuk informasi lebih lanjut, lihat Event kesalahan layanan dan solusinya.

    kubectl -n {your-namespace} describe svc {your-svc-name}
  2. Periksa apakah ACL dikonfigurasi untuk instans CLB.

    Jika ACL dikonfigurasi, periksa apakah ACL mengizinkan akses dari alamat IP klien. Untuk informasi lebih lanjut tentang konfigurasi ACL CLB, lihat Resource Access Management.

  3. Periksa apakah kelompok vServer CLB kosong.

    Jika kelompok vServer kosong, periksa apakah pod aplikasi dikaitkan dengan layanan dan apakah pod aplikasi berjalan sebagaimana mestinya. Jika pod yang dikaitkan bermasalah, temukan dan selesaikan masalah pada pod tersebut. Untuk informasi lebih lanjut, lihat Pemecahan masalah pod.

  4. Periksa apakah pemeriksaan kesehatan untuk pendengar CLB normal.

    Jika pemeriksaan kesehatan CLB bermasalah, periksa apakah pod aplikasi berjalan sebagaimana mestinya. Untuk informasi lebih lanjut tentang masalah pemeriksaan kesehatan CLB, lihat FAQ pemeriksaan kesehatan CLB.

Tidak dapat terhubung ke layanan HTTPS backend

Cause

Setelah sertifikat dikonfigurasi pada instans CLB, dekripsi dilakukan pada instans CLB. Akibatnya, permintaan yang dikirim ke pod backend adalah permintaan HTTP.

Symptoms

Tidak dapat terhubung ke layanan HTTPS backend.

Solution

Atur targetPort yang sesuai dengan port HTTPS dalam layanan ke port HTTP. Misalnya, jika Nginx menggunakan Port HTTPS 443, targetPort yang sesuai harus diubah menjadi 80.

Contoh konfigurasi:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  - port: 443
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer