Pelajari cara mendiagnosis dan mengatasi masalah Service LoadBalancer di kluster ACS.
Informasi latar belakang
Saat Anda membuat Service Type=LoadBalancer, ACS Cloud Controller Manager (CCM) secara otomatis membuat dan mengonfigurasi resource SLB, termasuk instans, Pendengar (listener), dan kelompok server backend. Kebijakan pembaruan otomatis SLB dijelaskan secara rinci dalam Pertimbangan saat mengonfigurasi Service LoadBalancer.
Prosedur
Pastikan versi CCM adalah 1.9.3.276-g372aa98-aliyun atau lebih baru. Perbarui CCM. Catatan rilis CCM: Cloud Controller Manager.

-
Jalankan perintah berikut untuk menemukan Service yang terkait dengan instans SLB:
kubectl get svc -A |grep -i LoadBalancer|grep ${XXX.XXX.XXX.XXX} #XXX.XXX.XXX.XXX adalah alamat IP instans SLB. -
Jalankan perintah berikut untuk memeriksa event error Service:
kubectl -n {your-namespace} describe svc {your-svc-name}PentingJika tidak ada event error yang muncul, verifikasi bahwa versi CCM adalah 1.9.3.276-g372aa98-aliyun atau lebih baru. Perbarui CCM.
-
Jika terdapat event error, periksa Error Service dan solusinya.
-
Jika tidak ada event error, ikuti langkah-langkah Troubleshooting.
-
-
Jika masalah tetap berlanjut, hubungi grup dukungan ACS di DingTalk.
Error Service dan solusinya
Tabel berikut mencantumkan error Service umum beserta solusinya.
|
Pesan error |
Deskripsi dan solusi |
|
|
Instans SLB shared-resource tidak mendukung server backend tipe ENI. Solusi: Untuk menggunakan server backend ENI, buat instans SLB berkinerja tinggi dengan menambahkan anotasi Penting
Pastikan anotasi sesuai dengan versi CCM Anda. Daftar anotasi yang didukung per versi tercantum dalam Tambahkan anotasi ke file YAML Service untuk mengonfigurasi instans CLB. |
|
|
Tidak ada server backend yang terkait dengan instans SLB. Periksa apakah pod terkait dengan Service dan berjalan normal. Solusi:
|
|
Sistem tidak dapat menemukan instans SLB yang terkait dengan Service. Solusi: Login ke Konsol SLB dan cari instans SLB di wilayah Service berdasarkan
|
|
|
Akun Anda memiliki pembayaran tertunda. |
|
|
Saldo akun tidak mencukupi. |
|
|
Pembatasan kecepatan API dipicu untuk SLB. Solusi:
|
|
|
Pendengar (listener) yang terkait dengan kelompok vServer tidak dapat dihapus. Solusi:
|
|
|
Instans SLB internal-facing yang digunakan ulang dan kluster tidak berada dalam VPC yang sama. Solusi: Pastikan instans SLB dan kluster dideploy dalam VPC yang sama. |
|
|
vSwitch tidak memiliki alamat IP yang tersedia. Solusi: Gunakan |
|
|
Field Solusi: Atur field |
|
|
Secara default, versi CCM yang lebih lama membuat instans SLB shared-resource, yang sudah tidak tersedia untuk pembelian. Solusi: Perbarui CCM. |
|
|
Anda tidak dapat mengubah kelompok sumber daya instans SLB setelah dibuat. Solusi: Hapus anotasi |
|
|
Alamat IP ENI yang ditentukan tidak ditemukan dalam VPC. Solusi: Periksa apakah anotasi |
|
Anda tidak dapat mengubah metode penagihan instans SLB yang digunakan oleh Service dari pay-as-you-go ke pay-by-specification. Solusi:
|
|
|
Instans SLB yang dibuat oleh CCM digunakan ulang. Solusi:
|
|
|
Anda tidak dapat mengubah tipe instans SLB setelah dibuat. Solusi: Buat ulang Service terkait. |
|
|
Anda tidak dapat mengaitkan instans SLB dengan Service yang sudah dikaitkan dengan instans SLB lain. Solusi: Anda tidak dapat menggunakan ulang instans SLB yang ada dengan mengubah nilai anotasi |
Troubleshooting
Tabel berikut mencantumkan skenario troubleshooting umum beserta solusinya.
|
Kategori |
Masalah |
Solusi |
|
Masalah yang terjadi saat mengakses instans SLB |
Instans SLB tidak mendistribusikan traffic secara merata. |
|
|
Error 503 terjadi saat saya mengakses instans SLB selama pembaruan aplikasi. |
Error 503 terjadi saat saya mengakses instans SLB selama pembaruan aplikasi |
|
|
Instans SLB tidak dapat diakses dari dalam kluster. |
||
|
Instans SLB tidak dapat diakses dari luar kluster. |
||
|
Error |
||
|
Masalah terkait konfigurasi SLB |
Anotasi Service tidak berlaku. |
Apa yang harus saya lakukan jika anotasi Service tidak berlaku? |
|
Konfigurasi instans SLB dimodifikasi. |
||
|
Sistem gagal menggunakan ulang instans SLB yang ada. |
Mengapa sistem gagal menggunakan instans SLB yang ada untuk lebih dari satu Service? |
|
|
Tidak ada pendengar yang dibuat saat instans SLB yang ada digunakan ulang. |
Mengapa tidak ada pendengar yang dibuat saat saya menggunakan ulang instans SLB yang ada? |
|
|
Titik akhir (endpoint) Service berbeda dari yang ditentukan untuk server backend instans SLB. |
Apa yang harus saya lakukan jika kelompok vServer instans SLB tidak diperbarui? |
|
|
Masalah terkait penghapusan SLB |
Instans SLB dihapus. |
|
|
Instans SLB tidak dihapus bersamaan dengan Service. |
Instans SLB tidak mendistribusikan traffic secara merata
Penyebab
Algoritma penjadwalan instans SLB tidak tepat.
Gejala
Traffic tidak didistribusikan secara merata ke server backend instans SLB.
Solusi
-
Jika koneksi berdurasi panjang (long-lived connections) dibuat ke Service Anda, atur algoritma penjadwalan instans SLB ke Weighted Least Connections (WLC) dengan menambahkan anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wlc".
Error 503 terjadi saat saya mengakses instans SLB selama pembaruan aplikasi
Penyebab
Pengurasan koneksi (connection draining) tidak dikonfigurasi untuk pendengar SLB atau shutdown yang mulus (graceful shutdown) tidak dikonfigurasi untuk pod.
Gejala
Error 503 terjadi saat Anda mengakses instans SLB selama pembaruan aplikasi.
Solusi
-
Tambahkan anotasi
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drainuntuk mengonfigurasi pengurasan koneksi pada pendengar SLB. Detail anotasi terdapat dalam Operasi umum untuk mengelola pendengar. -
Atur parameter
preStopdanreadinessProbeuntuk pod berdasarkan mode jaringan pod.-
readinessProbememeriksa apakah kontainer siap menerima traffic. Pod hanya ditambahkan ke endpoint setelah lulus pemeriksaan kesiapan, lalu dikaitkan ke instans SLB. Atur interval probing, periode delay, dan ambang batas tidak sehat yang sesuai untukreadinessProbe— aplikasi dengan waktu startup lama dapat menyebabkan restart berulang jika ambang batas terlalu singkat. -
Atur
preStopsesuai waktu yang dibutuhkan pod untuk menangani permintaan yang tersisa. AturterminationGracePeriodSecondsminimal 30 detik lebih lama daripreStop.
Contoh konfigurasi pod:
apiVersion: v1 kind: Pod metadata: name: nginx namespace: default spec: containers: - name: nginx image: nginx # Liveness probe livenessProbe: failureThreshold: 3 initialDelaySeconds: 30 periodSeconds: 30 successThreshold: 1 tcpSocket: port: 80 timeoutSeconds: 1 # Readiness probe readinessProbe: failureThreshold: 3 initialDelaySeconds: 30 periodSeconds: 30 successThreshold: 1 tcpSocket: port: 80 timeoutSeconds: 1 # Graceful shutdown lifecycle: preStop: exec: command: - sleep - "30" terminationGracePeriodSeconds: 60 -
Instans SLB tidak dapat diakses dari luar kluster
Penyebab
Anda mengonfigurasi aturan ACL untuk instans SLB, atau instans SLB tidak berjalan dengan baik.
Gejala
Anda tidak dapat mengakses instans SLB dari luar kluster.
Solusi
-
Jalankan perintah berikut untuk mengkueri event Service dan melakukan troubleshooting error. Error Service dan solusinya.
kubectl -n {your-namespace} describe svc {your-svc-name} -
Periksa apakah aturan ACL dikonfigurasi untuk instans SLB.
Jika aturan ACL dikonfigurasi untuk instans SLB, periksa apakah alamat IP klien diizinkan. Detail konfigurasi ACL terdapat dalam Kontrol akses.
-
Periksa apakah instans SLB dikaitkan dengan kelompok vServer.
Jika tidak ada kelompok vServer yang dikaitkan, periksa apakah pod aplikasi dikaitkan dengan Service dan berjalan normal. Jika pod tidak berjalan normal, lakukan troubleshooting. Pod troubleshooting.
-
Periksa apakah server backend yang tidak sehat terdeteksi oleh pendengar SLB.
Jika server backend yang tidak sehat terdeteksi, periksa apakah pod aplikasi berjalan normal. Untuk detail pemeriksaan kesehatan SLB, lihat Jalankan skrip pemeriksaan kesehatan.
-
Jika masalah tetap berlanjut, hubungi grup dukungan ACS di DingTalk.
Layanan HTTPS backend tidak dapat diakses
Penyebab
Setelah Anda menentukan sertifikat di instans SLB, instans SLB mendekripsi permintaan HTTPS dan meneruskan permintaan HTTP ke pod backend.
Gejala
Anda tidak dapat mengakses layanan HTTPS backend.
Solusi
Atur targetPort ke port HTTP dalam Service. Misalnya, port HTTPS adalah 443 dalam Service NGINX berikut. Dalam kasus ini, Anda harus mengubah nilai targetPort menjadi 80.
Contoh:
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:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer