全部产品
Search
文档中心

Container Service for Kubernetes:FAQ Layanan

更新时间:Nov 11, 2025

Topik ini menjawab pertanyaan yang sering diajukan (FAQ) tentang layanan di Container Service for Kubernetes (ACK) serta menyediakan solusi untuk masalah umum, seperti ketidakaksesan alamat IP Server Load Balancer (SLB) dari dalam kluster, kegagalan saat menggunakan kembali instance SLB yang ada, dan penanganan kegagalan peningkatan Cloud Controller Manager (CCM).

Indeks

FAQ tentang penggunaan kembali instance SLB yang ada

Pertanyaan lainnya

Pertanyaan terkait SLB

Tujuan spesifik instance SLB dalam kluster ACK

Jika Anda menginstal komponen Nginx Ingress saat membuat kluster Kubernetes, kluster tersebut membuat dua instance SLB secara default.

Kedua instance SLB tersebut memiliki tujuan sebagai berikut:

  • SLB API Server: Instance SLB ini merupakan titik akhir akses untuk API Server. Semua permintaan akses ke kluster harus melewati instance SLB ini. Instance ini mendengarkan pada port TCP 6443. Server backend-nya adalah pod API Server atau instance ECS master.

  • SLB Nginx Ingress Controller: Instance SLB ini dikaitkan dengan layanan nginx-ingress-controller di namespace kube-system. Kelompok vServer secara dinamis mengikat pod Nginx Ingress Controller untuk melakukan load balancing dan meneruskan permintaan eksternal. Instance ini mendengarkan pada port 80 dan 443 melalui TCP.

Cara memilih antara kebijakan lalu lintas eksternal Local dan Cluster saat membuat layanan

Kebijakan lalu lintas eksternal Local dan Cluster menyediakan fitur berbeda untuk plug-in jaringan yang berbeda. Untuk informasi selengkapnya tentang perbedaan antara kebijakan lalu lintas eksternal Local dan Cluster, lihat Kebijakan lalu lintas eksternal.

Mengapa peristiwa untuk proses sinkronisasi layanan dan LoadBalancer tidak terlihat?

Jika tidak ada informasi peristiwa yang ditampilkan setelah Anda menjalankan perintah kubectl -n {your-namespace} describe svc {your-svc-name}, periksa versi komponen CCM Anda.

  • Versi sebelum v1.9.3.276-g372aa98-aliyun: Komponen CCM tidak menampilkan peristiwa untuk sinkronisasi layanan dan LoadBalancer. Tingkatkan komponen tersebut. Untuk informasi selengkapnya tentang cara melihat dan meningkatkan versi CCM, lihat Tingkatkan komponen CCM.

  • Untuk versi v1.9.3.276-g372aa98-aliyun dan yang lebih baru, Anda dapat mengajukan tiket.

Apa yang harus dilakukan jika instance SLB tetap berada dalam status Pending selama pembuatan

  1. Jalankan perintah kubectl -n {your-namespace} describe svc {your-svc-name} untuk melihat informasi peristiwa.

  2. Selesaikan kesalahan yang dilaporkan dalam peristiwa tersebut. Untuk informasi tentang cara menangani berbagai pesan kesalahan dalam peristiwa, lihat Peristiwa kesalahan dan solusinya.

    Jika tidak ada pesan kesalahan yang ditampilkan, lihat Mengapa peristiwa untuk proses sinkronisasi layanan dan LoadBalancer tidak terlihat?.

Apa yang harus dilakukan jika kelompok vServer SLB tidak diperbarui

  1. Jalankan perintah kubectl -n {your-namespace} describe svc {your-svc-name} untuk melihat informasi peristiwa.

  2. Selesaikan kesalahan yang dilaporkan dalam peristiwa tersebut. Untuk informasi tentang cara menangani berbagai pesan kesalahan dalam peristiwa, lihat Peristiwa kesalahan dan solusinya.

    Jika tidak ada pesan kesalahan yang ditampilkan, lihat Mengapa peristiwa untuk proses sinkronisasi layanan dan LoadBalancer tidak terlihat?.

Apa yang harus dilakukan jika anotasi layanan tidak berlaku

  1. Periksa pesan kesalahan.

    1. Jalankan perintah kubectl -n {your-namespace} describe svc {your-svc-name} untuk melihat informasi peristiwa.

    2. Selesaikan kesalahan yang dilaporkan dalam peristiwa tersebut. Untuk informasi tentang cara menangani berbagai pesan kesalahan dalam peristiwa, lihat Peristiwa kesalahan dan solusinya.

  2. Jika tidak ada pesan kesalahan yang ditampilkan, selesaikan masalah berdasarkan salah satu skenario berikut:

Mengapa konfigurasi instance SLB saya dimodifikasi?

CCM menggunakan API deklaratif dan secara otomatis memperbarui konfigurasi SLB berdasarkan konfigurasi layanan dalam kondisi tertentu. Setiap konfigurasi yang Anda modifikasi di konsol SLB berisiko ditimpa. Kami menyarankan agar Anda mengonfigurasi instance SLB menggunakan anotasi. Untuk informasi selengkapnya tentang cara menggunakan anotasi, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB).

Penting

Jangan memodifikasi secara manual konfigurasi apa pun dari instance SLB yang dibuat dan dikelola oleh Kubernetes di konsol SLB. Jika tidak, konfigurasi mungkin hilang dan layanan menjadi tidak dapat diakses.

Mengapa alamat IP SLB tidak dapat diakses dari dalam kluster?

  • Skenario 1: Jika Anda menggunakan alamat IP pribadi untuk instance SLB yang tidak dibuat oleh layanan, akses dari dalam kluster mungkin gagal. Kegagalan ini terjadi jika pod yang mengakses instance SLB berada di node yang sama dengan pod backend.

    Untuk layanan load balancing lapisan 4, instance ECS tidak dapat bertindak sebagai server backend sekaligus klien yang mengakses layanan. Untuk mengatasi masalah ini dan mencegah klien dan tujuan berada di node yang sama, gunakan salah satu metode berikut.

    • Ubah alamat IP SLB menjadi alamat IP publik.

    • Buat instance SLB menggunakan layanan dan atur kebijakan lalu lintas eksternal ke Cluster. Dalam kasus ini, kube-proxy mencegat lalu lintas yang dikirim ke instance SLB dari dalam kluster, sehingga menghindari batasan SLB.

  • Skenario 2: Anda mengatur kebijakan lalu lintas eksternal ke Local saat mengekspos layanan. Hal ini menyebabkan akses ke alamat IP SLB dari dalam kluster gagal.

    Untuk informasi selengkapnya tentang penyebab dan solusi masalah ini, lihat Bagaimana cara mengatasi masalah di mana alamat SLB yang diekspos oleh layanan LoadBalancer tidak dapat diakses dari dalam kluster Kubernetes?.

Bagaimana cara mengatasi masalah di mana alamat SLB yang diekspos oleh layanan LoadBalancer tidak dapat diakses dari dalam kluster Kubernetes?

Deskripsi masalah

Dalam kluster Kubernetes, beberapa node dapat mengakses instance SLB dengan kebijakan lalu lintas eksternal Local yang diekspos oleh kluster, tetapi node lain tidak dapat. Masalah ini sering terjadi pada Ingress.

Penyebab

Instance SLB dikonfigurasi dengan externalTrafficPolicy: Local. Dengan kebijakan ini, alamat SLB hanya dapat diakses dari node yang meng-host pod backend yang sesuai. Karena alamat SLB ditujukan untuk penggunaan eksternal, jika node atau pod dalam kluster mencoba mengaksesnya, permintaan tidak dikirim ke instance SLB. Sebaliknya, kube-proxy mencegat permintaan dan meneruskannya berdasarkan aturan routing lokal (iptables atau IPVS).

Jika node tempat pod klien berada tidak meng-host pod backend untuk layanan tersebut, koneksi jaringan gagal. Jika node tersebut meng-host pod backend, layanan dapat diakses seperti yang diharapkan. Untuk informasi selengkapnya tentang masalah ini, lihat kube-proxy menambahkan alamat external-lb ke aturan iptables node lokal.

Solusi

Anda dapat menggunakan salah satu metode berikut untuk mengatasi masalah ini. Kami menyarankan agar Anda menggunakan metode pertama.

  • Akses layanan internal dari dalam kluster Kubernetes menggunakan alamat ClusterIP atau nama layanan mereka. Nama layanan untuk Ingress adalah nginx-ingress-lb.kube-system.

  • Ubah externalTrafficPolicy layanan LoadBalancer menjadi Cluster. Metode ini memastikan bahwa lalu lintas dapat diteruskan ke pod di semua node. Namun, hal ini menyebabkan kehilangan alamat IP sumber karena kluster melakukan source network address translation (SNAT). Artinya, aplikasi backend tidak dapat mengambil alamat IP asli klien. Jalankan perintah berikut untuk memodifikasi layanan Ingress:

    kubectl edit svc nginx-ingress-lb -n kube-system
  • Jika Anda menggunakan kluster Terway dengan ENI atau beberapa alamat IP per ENI, ubah externalTrafficPolicy layanan LoadBalancer menjadi Cluster dan tambahkan anotasi untuk eni passthrough, seperti annotation: service.beta.kubernetes.io/backend-type: "eni". Blok kode berikut menunjukkan formatnya. Metode ini mempertahankan alamat IP sumber dan memungkinkan akses dari dalam kluster. Untuk informasi selengkapnya, lihat Gunakan anotasi untuk mengonfigurasi instance 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

Kapan instance SLB dihapus secara otomatis?

Kebijakan penghapusan otomatis instance SLB bergantung pada apakah instance SLB tersebut dibuat secara otomatis oleh CCM. Tabel berikut menjelaskan kebijakan penghapusan tersebut.

Operasi layanan

Instance SLB yang dibuat otomatis oleh CCM

Instance SLB yang digunakan kembali

Hapus layanan

Instance SLB dihapus.

Instance SLB dipertahankan.

Ubah tipe layanan dari LoadBalancer ke tipe lain

Hapus instance SLB

Instance SLB dipertahankan.

Apakah menghapus layanan juga menghapus instance SLB?

Jika Anda menggunakan kembali instance SLB yang ada (layanan memiliki anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: {your-slb-id}), menghapus layanan tidak akan menghapus instance SLB. Jika tidak, menghapus layanan juga akan menghapus instance SLB yang sesuai.

Jika Anda mengubah tipe layanan (misalnya, dari LoadBalancer ke NodePort), instance SLB yang sesuai yang dibuat otomatis oleh CCM juga akan dihapus.

Penting

Jangan mengedit layanan secara manual untuk mengubah instance SLB yang dibuat otomatis oleh CCM menjadi instance SLB yang digunakan kembali. Hal ini memutuskan asosiasi layanan dari instance SLB yang dibuat otomatis. Saat Anda menghapus layanan, instance SLB yang sesuai tidak dapat dihapus secara otomatis.

Apa yang harus dilakukan jika saya tidak sengaja menghapus instance SLB

  • Skenario 1: Apa yang harus dilakukan jika Anda tidak sengaja menghapus instance SLB API Server

    Instance tersebut tidak dapat dipulihkan. Anda harus membuat ulang kluster. Untuk informasi selengkapnya, lihat Buat kluster ACK Pro.

  • Skenario 2: Apa yang harus dilakukan jika Anda tidak sengaja menghapus instance SLB Ingress

    Langkah-langkah berikut menggunakan Nginx Ingress sebagai contoh untuk menunjukkan cara membuat ulang instance SLB.

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

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

    3. Di bagian atas halaman Service, pilih kube-system dari daftar drop-down Namespace.

      1. Dalam daftar layanan, temukan layanan target nginx-ingress-lb, klik YAML Edit di kolom Actions, hapus bidang status.loadBalancer dan isinya, lalu klik OK untuk memicu CCM membuat ulang SLB.

      2. Jika nginx-ingress-lb tidak muncul dalam daftar layanan, klik Create From YAML di pojok kiri atas halaman dan gunakan templat berikut untuk membuat Layanan bernama nginx-ingress-lb.

        apiVersion: v1
        kind: Service
        metadata:
          labels:
            app: nginx-ingress-lb
          name: nginx-ingress-lb
          namespace: kube-system
        spec:
          externalTrafficPolicy: Local
          ports:
          - name: http
            port: 80
            protocol: TCP
            targetPort: 80
          - name: https
            port: 443
            protocol: TCP
            targetPort: 443
          selector:
            app: ingress-nginx
          type: LoadBalancer
  • Skenario 3: Apa yang harus dilakukan jika Anda tidak sengaja menghapus instance SLB khusus aplikasi

    • Jika layanan yang sesuai dengan instance SLB tidak lagi diperlukan, hapus layanan tersebut.

    • Jika layanan yang sesuai masih digunakan, lakukan langkah-langkah berikut:

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

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

      3. Dari daftar drop-down Namespace di bagian atas halaman Service, klik All Namespaces, lalu temukan layanan Anda dalam daftar layanan.

      4. Di kolom YAML Edit untuk layanan target, klik YAML Edit, hapus konten status, dan klik Update untuk memungkinkan CCM membuat ulang SLB.

Cara mengaktifkan penggantian nama SLB untuk versi CCM yang lebih lama

Instance SLB yang dibuat oleh Cloud Controller Manager (CCM) v1.9.3.10 dan yang lebih baru secara otomatis diberi tag untuk mendukung penggantian nama. Untuk instance SLB yang dibuat oleh versi v1.9.3.10 dan sebelumnya, Anda harus menambahkan tag tertentu secara manual untuk mengaktifkan penggantian nama.

Catatan
  • Menambahkan tag secara manual untuk mengaktifkan penggantian nama hanya diperlukan untuk instance SLB yang dibuat oleh CCM v1.9.3.10 dan sebelumnya.

  • Tipe layanan harus LoadBalancer.

  1. Masuk ke node master kluster Kubernetes. Untuk informasi selengkapnya, lihat Hubungkan ke kluster ACK menggunakan kubectl.

  2. Jalankan perintah kubectl get svc -n ${namespace} ${service} untuk melihat tipe layanan dan alamat IP.service type

    Catatan

    Ganti namespace dan service dengan namespace dan nama layanan kluster Anda.

  3. Jalankan perintah berikut untuk menghasilkan tag yang diperlukan untuk instance SLB.

    kubectl get svc -n ${namespace} ${service} -o jsonpath="{.metadata.uid}"|awk -F "-" '{print "kubernetes.do.not.delete: "substr("a"$1$2$3$4$5,1,32)}'

    tag

  4. Masuk ke konsol Server Load Balancer. Berdasarkan alamat IP yang diambil pada Langkah 2, cari instance SLB di wilayah yang sesuai.

  5. Tambahkan tag ke instance SLB menggunakan kunci dan nilai yang dihasilkan pada Langkah 3. Kunci dan nilai tersebut sesuai dengan 1 dan 2 pada gambar di atas. Untuk informasi selengkapnya, lihat Buat dan kelola instance CLB.

Bagaimana bobot node diatur secara otomatis dalam mode Local?

Bagian ini menggunakan skenario di mana pod aplikasi (app=nginx) diterapkan pada tiga instance ECS dan diekspos melalui Layanan A untuk menjelaskan cara menghitung bobot node dalam mode Local.

CCM2

Versi v1.9.3.276-g372aa98-aliyun dan yang lebih baru

Karena masalah presisi dalam perhitungan bobot, ketidakseimbangan beban kecil mungkin masih terjadi di antara pod. Di CCM v1.9.3.276-g372aa98-aliyun dan yang lebih baru, CCM mengatur bobot node menjadi jumlah pod yang diterapkan pada node tersebut. Seperti yang ditunjukkan pada gambar berikut, bobot ketiga instance ECS adalah 1, 2, dan 3. Lalu lintas didistribusikan ke ketiga instance ECS dengan rasio 1:2:3, menghasilkan beban yang lebih seimbang di seluruh pod.

Rumusnya adalah sebagai berikut:node weight

node

Versi setelah v1.9.3.164-g2105d2e-aliyun dan sebelum v1.9.3.276-g372aa98-aliyun

Seperti yang ditunjukkan pada gambar berikut, di versi CCM setelah v1.9.3.164-g2105d2e-aliyun dan sebelum v1.9.3.276-g372aa98-aliyun, CCM menghitung bobot node berdasarkan jumlah pod yang diterapkan pada node tersebut. Bobot yang dihitung untuk ketiga instance ECS adalah 16, 33, dan 50. Oleh karena itu, lalu lintas didistribusikan ke ketiga instance ECS dengan rasio sekitar 1:2:3, menghasilkan beban yang lebih seimbang di seluruh pod.

Rumusnya adalah sebagai berikut:calculation formula

ccm4

Versi sebelum v1.9.3.164-g2105d2e-aliyun

Seperti yang ditunjukkan pada gambar berikut, di versi sebelum v1.9.3.164-g2105d2e-aliyun, bobot semua server backend untuk layanan dalam mode Local adalah 100. Artinya, lalu lintas didistribusikan secara merata ke ketiga instance ECS. Hal ini menyebabkan beban berat pada pod di ECS 1 dan beban ringan pada pod di ECS 3, menghasilkan beban yang tidak seimbang di seluruh pod.

CCM3

Cara mengkueri alamat IP, nama, dan jenis semua instance SLB dalam kluster?

  1. Hubungkan ke kluster ACK menggunakan kubectl.

  2. Jalankan perintah berikut untuk mengambil nama, alamat IP, dan tipe alamat setiap layanan LoadBalancer di semua namespace.

    kubectl get services -A -ojson | jq '.items[] | select(.spec.type == "LoadBalancer") | {name: .metadata.name, namespace: .metadata.namespace, ip: .status.loadBalancer.ingress[0].ip, lb_type: .metadata.annotations."service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type"}'

    Output yang diharapkan adalah sebagai berikut:

    {
      "name": "test",
      "namespace": "default",
      "ip": "192.168.*.*",
      "lb_type": "intranet"
    }
    {
      "name": "nginx-ingress-lb",
      "namespace": "kube-system",
      "ip": "47.97.*.*",
      "lb_type": "null"
    }

Bagaimana cara memastikan bahwa LoadBalancer dapat menutup koneksi yang ada secara elegan saat server backend layanan LoadBalancer diganti?

Anda dapat mengonfigurasi pengurasan koneksi menggunakan anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain dan service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout. Setelah server backend dihapus dari layanan, LoadBalancer terus memproses koneksi yang ada dalam periode drain-timeout. Untuk informasi selengkapnya, lihat Aktifkan pengurasan koneksi untuk pendengar.

FAQ tentang penggunaan kembali instance SLB yang ada

Mengapa penggunaan kembali instance SLB yang ada gagal?

  • Periksa versi CCM. Versi CCM sebelum v1.9.3.105-gfd4e547-aliyun tidak mendukung penggunaan kembali instance SLB. Untuk informasi selengkapnya tentang cara melihat dan meningkatkan versi CCM, lihat Tingkatkan komponen CCM.

  • Periksa apakah instance SLB yang ingin Anda gunakan kembali dibuat oleh kluster. Anda tidak dapat menggunakan kembali instance SLB yang dibuat oleh kluster.

  • Periksa apakah instance SLB tersebut adalah instance SLB untuk API Server. Anda tidak dapat menggunakan kembali instance SLB untuk API Server.

  • Jika Anda ingin menggunakan kembali instance SLB akses internal, pastikan bahwa instance SLB dan kluster berada dalam VPC yang sama. Anda tidak dapat menggunakan kembali instance SLB lintas VPC.

Mengapa pendengar tidak dikonfigurasi saat saya menggunakan kembali instance SLB yang ada?

Periksa apakah anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners diatur ke "true". Jika anotasi ini tidak dikonfigurasi, pendengar tidak akan dibuat secara otomatis.

Catatan

Secara default, penggunaan kembali instance CLB yang ada tidak menimpa pendengarnya karena alasan berikut:

  • Jika pendengar instance CLB yang ada terikat ke layanan, memaksa menimpanya dapat menyebabkan gangguan layanan.

  • CCM mendukung konfigurasi backend terbatas dan tidak dapat menangani konfigurasi kompleks. Jika Anda memiliki kebutuhan konfigurasi backend yang kompleks, Anda dapat mengonfigurasi pendengar di konsol tanpa menimpa yang sudah ada.

Karena alasan ini, kami menyarankan agar Anda tidak memaksa menimpa pendengar. Anda dapat memaksa menimpa pendengar jika port pendengar instance CLB yang ada tidak lagi digunakan.

Pertanyaan lainnya

Apa yang harus dilakukan jika peningkatan CCM gagal

Untuk informasi selengkapnya tentang cara mengatasi kegagalan peningkatan komponen CCM, lihat Pemeriksaan peningkatan Cloud Controller Manager (CCM) gagal.

Pesan 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 instance CLB telah mencapai batas kuota.

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

  • Secara default, instance CLB dapat memiliki hingga 200 server backend yang terpasang. Anda dapat meminta peningkatan kuota. Untuk mengkueri dan meningkatkan kuota Anda, masuk ke halaman Manajemen Kuota SLB.

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

  • Saat beberapa layanan menggunakan kembali instance CLB, jumlah server backend bersifat kumulatif. Buat instance CLB baru saat Anda membuat layanan.

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

Instance CLB bersama tidak mendukung ENI.

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

Penting

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

There are no available nodes for the LoadBalancer

Instance 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 tidak normal, temukan dan selesaikan masalah pod tersebut. Untuk informasi selengkapnya, lihat Pemecahan masalah pod.

  • Jika instance 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

Instance CLB tidak dapat dikaitkan berdasarkan layanan.

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

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

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

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

    2. Jika instance CLB dibuat otomatis oleh CCM, periksa apakah instance CLB memiliki label kubernetes.do.not.delete. Jika tidak, tambahkan label tersebut. Untuk informasi selengkapnya, lihat Bagaimana cara mengganti nama instance 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 bahwa kuota CLB Anda mencukupi.

  2. Jalankan perintah berikut untuk memeriksa apakah layanan kluster memiliki kesalahan. Jika ada kesalahan, selesaikan peristiwa tersebut seperti 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 dikaitkan dengan kelompok vServer tidak dapat dihapus.

Solusi:

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

    Jika anotasi berisi ID instance CLB, instance CLB tersebut digunakan kembali.

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

Status Code: 400 Code: NetworkConflict

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

Solusi: Pastikan bahwa instance CLB dan kluster Anda 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 selengkapnya tentang cara meningkatkan CCM, lihat Tingkatkan komponen CCM.

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

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

Solusi: Tingkatkan komponen CCM.

cannot change ResourceGroupId once created

Grup sumber daya instance CLB tidak dapat diubah setelah instance 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 dapat ditemukan di VPC.

Solusi: Periksa apakah anotasi service.beta.kubernetes.io/backend-type: eni dikonfigurasi dalam layanan. Jika ya, periksa apakah plug-in 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 instance 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 ke PayByCLCU.

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

Kesalahan ini terjadi saat instance 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 instance CLB yang Anda buat secara manual di konsol Classic Load Balancer (CLB).

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

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

      • Jika alamat IP instance CLB tidak cocok dengan alamat IP eksternal Layanan, masuk ke konsol Classic Load Balancer (CLB). Di wilayah kluster, temukan instance 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 instance CLB yang sesuai, ubah ID CLB dalam anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id menjadi ID instance CLB yang Anda buat secara manual di konsol CLB, lalu buat ulang Layanan.

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

Tipe instance CLB tidak dapat diubah setelah instance 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 terpasang ke instance CLB dan tidak dapat dipasang ke instance lain.

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

Cara mengonfigurasi pendengar untuk layanan NodePort

CCM hanya mendukung konfigurasi pendengar untuk layanan LoadBalancer. Anda perlu mengubah tipe layanan dari NodePort menjadi LoadBalancer.

Cara mengakses layanan NodePort

  • Untuk mengakses Layanan dari dalam kluster (pada node kluster), Anda dapat menggunakan ClusterIP + Port atau IP Node + NodePort Layanan. Nomor port default yang diekspos oleh Layanan NodePort lebih besar dari 30000.

  • Untuk mengakses Layanan dari luar kluster (di luar node kluster), Anda dapat menggunakan alamat IP node dan NodePort Layanan. Nomor port default yang diekspos oleh Layanan NodePort lebih besar dari 30000.

  • Untuk mengakses layanan dari luar VPC (dari VPC lain atau Internet), Anda perlu mengekspos layanan LoadBalancer lalu mengakses layanan melalui titik akhir eksternalnya.

    Catatan

    Jika Anda mengatur kebijakan lalu lintas eksternal layanan Anda ke Local, pastikan bahwa node yang Anda akses meng-host pod backend layanan tersebut. Untuk informasi selengkapnya tentang kebijakan lalu lintas eksternal, lihat Kebijakan lalu lintas eksternal.

Cara mengonfigurasi rentang NodePort dengan benar

Di Kubernetes, API Server menyediakan parameter ServiceNodePortRange ( --service-node-port-range parameter baris perintah). Parameter ini membatasi rentang NodePort yang dapat didengarkan oleh layanan NodePort atau LoadBalancer. Nilai defaultnya adalah 30000 hingga 32767. Di kluster ACK Pro, Anda dapat memodifikasi rentang port ini dengan menyesuaikan parameter lapisan kontrol. Untuk informasi selengkapnya, lihat Sesuaikan parameter lapisan kontrol untuk kluster ACK Pro.

  • Anda harus sangat berhati-hati saat memodifikasi rentang NodePort. Pastikan bahwa rentang NodePort tidak bertentangan dengan rentang port yang ditentukan oleh parameter kernel net.ipv4.ip_local_port_range pada node kluster. Parameter kernel ip_local_port_range mengontrol rentang nomor port lokal yang dapat digunakan oleh aplikasi apa pun di sistem Linux. Nilai default ip_local_port_range adalah 32768 hingga 60999.

  • Dengan konfigurasi default kluster ACK Anda, parameter ServiceNodePortRange dan parameter ip_local_port_range tidak bertentangan. Jika Anda sebelumnya telah menyesuaikan salah satu parameter ini untuk meningkatkan batas port, sehingga rentangnya tumpang tindih, pengecualian jaringan sporadis dapat terjadi pada node. Dalam kasus parah, hal ini dapat menyebabkan kegagalan pemeriksaan kesehatan bisnis dan node kluster offline. Kami menyarankan agar Anda mengembalikan nilai default atau menyesuaikan kedua rentang port tersebut agar tidak tumpang tindih sama sekali.

  • Setelah Anda menyesuaikan rentang port, beberapa layanan NodePort atau LoadBalancer di kluster mungkin masih menggunakan port dalam rentang parameter ip_local_port_range sebagai NodePort. Anda perlu mengonfigurasi ulang layanan ini untuk menghindari konflik. Anda dapat menjalankan perintah kubectl edit <service-name> untuk langsung mengubah nilai bidang spec.ports.nodePort menjadi NodePort yang tidak digunakan.

Cara menambahkan izin yang diperlukan saat Anda meningkatkan komponen CCM ke versi yang lebih baru di kluster khusus ACK

Untuk meningkatkan kinerja, versi CCM yang lebih baru secara bertahap memperkenalkan API Alibaba Cloud yang memerlukan izin RAM tambahan (misalnya, v2.11.2 untuk manajemen rute di jaringan Flannel dan v2.12.1 untuk manajemen batch NLB).

Oleh karena itu, jika Anda ingin meningkatkan komponen ke v2.11.2 atau yang lebih baru di kluster khusus ACK, Anda harus memberikan izin yang diperlukan ke peran RAM-nya sebelum peningkatan untuk memastikan komponen berfungsi sebagaimana mestinya.

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

  2. Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel navigasi kiri, klik Cluster Information.

  3. Klik tab Basic Information. Di area Cluster Resources, klik nama peran untuk Master RAM Role.

  4. Pada halaman detail peran di konsol Resource Access Management, klik Permission Management, temukan kebijakan kustom yang namanya dimulai dengan k8sMasterRolePolicy-Ccm- dalam daftar kebijakan, lalu klik nama kebijakan tersebut untuk membuka halaman manajemen kebijakan akses.

    Untuk kluster yang dibuat pada waktu yang lebih awal, kebijakan tersebut mungkin tidak ada. Anda dapat memilih kebijakan kustom yang namanya dimulai dengan k8sMasterRolePolicy-.

  5. Klik Edit Policy dan tambahkan izin nlb:ListAsynJobs ke izin NLB.

    image

Jika Anda menggunakan kluster Flannel, Anda juga harus menambahkan izin vpc:CreateRouteEntries dan vpc:DeleteRouteEntries ke izin terkait VPC.

p976639

Setelah Anda menambahkan izin, kirimkan kebijakan tersebut sesuai petunjuk di halaman. Setelah perubahan disimpan, Anda dapat meningkatkan komponen CCM.