Topik ini mencantumkan masalah umum saat menggunakan ALB Ingress.
Pertanyaan mengenai fitur
Bagaimana perbedaan antara ALB Ingress dan Nginx Ingress?
Gunakan ALB Ingress. Berbeda dengan Nginx Ingress yang mengharuskan Anda mengelola infrastruktur sendiri, ALB Ingress dibangun di atas Alibaba Cloud Application Load Balancer (ALB) dan sepenuhnya dikelola. ALB Ingress tidak memerlukan operasi atau pemeliharaan, serta menyediakan manajemen lalu lintas Ingress yang lebih kuat dan layanan gateway berkinerja tinggi. Untuk perbandingan detail antara Nginx Ingress, ALB Ingress, dan MSE Ingress, lihat Perbandingan Nginx Ingress, ALB Ingress, dan MSE Ingress.
Apakah ALB Ingress mendukung akses jaringan publik dan pribadi sekaligus?
Masalah
Dalam skenario nyata, Anda perlu mengakses ALB Ingress melalui jaringan publik maupun pribadi. Namun, Anda tidak yakin apakah ALB Ingress mendukung keduanya secara bersamaan.
Solusi
Ya. Untuk menggunakan akses jaringan publik dan pribadi sekaligus, buat instans ALB publik. Instans tersebut membuat alamat IP elastis (EIP) di setiap zona untuk komunikasi jaringan publik, serta menyediakan alamat IP virtual (VIP) pribadi yang dapat digunakan untuk mengakses ALB melalui jaringan pribadi. Jika Anda hanya memerlukan akses jaringan pribadi, buat instans ALB pribadi.
Bagaimana cara memastikan ALB Ingress menggunakan nama domain ALB yang tetap?
Setelah Anda membuat instans ALB dengan AlbConfig, ALB Ingress mereferensikan AlbConfig melalui IngressClass. Hal ini memungkinkan ALB Ingress menggunakan nama domain dari instans ALB yang sesuai. Selama IngressClass dan AlbConfig yang terkait dengan ALB Ingress tidak berubah, nama domain tersebut tetap sama.
Mengapa saya tidak dapat menemukan pod ALB Ingress Controller di kluster saya?
Masalah
Saat mencari pod ALB Ingress Controller di kluster Anda, Anda tidak menemukan pod terkait di namespace kube-system dan tidak dapat melihat komponen ALB Ingress Controller menggunakan metode standar.
Solusi
Anda hanya dapat melihat pod ALB Ingress Controller di namespace kube-system pada cluster khusus ACK. Pada ACK Edisi Dasar, ACK Edisi Pro, dan ACK Serverless, komponen ALB Ingress Controller dikelola sepenuhnya sehingga tidak terlihat di kluster tersebut. Untuk petunjuk peningkatan cluster khusus ACK ke kluster ACK yang dikelola Edisi Pro, lihat Migrasi panas cluster khusus ACK ke kluster ACK yang dikelola Edisi Pro.
Bagaimana cara mendukung penyambungan server bertipe IP?
Masalah
Anda ingin menyambungkan pod backend ke ALB berdasarkan alamat IP. Namun secara default, Service tidak secara otomatis membuat kelompok server berbasis IP, sehingga membatasi distribusi lalu lintas ke layanan backend.
Solusi
Tambahkan anotasi alb.ingress.kubernetes.io/server-group-type: Ip ke Service. Hal ini akan membuat kelompok server berbasis IP untuk Service tersebut, sehingga Anda dapat mendaftarkan pod backend ke ALB berdasarkan alamat IP.
Anda tidak dapat mengubah tipe kelompok server setelah pembuatan. Dalam mode jaringan Flannel, mengganti tipe Service—misalnya antara ClusterIP dan NodePort—akan mengubah tipe attachment node antara IP dan ECS, sehingga mencegah node bergabung ke kelompok server asal. Oleh karena itu, Anda tidak dapat langsung mengubah tipe Service.
Untuk mengubah tipe kelompok server, buat Service baru dengan anotasi
alb.ingress.kubernetes.io/server-group-type: Ip. Hal ini menghindari gangguan terhadap attachment node kelompok server yang sudah ada.Jika Service yang direferensikan oleh Ingress belum ada, ALB Ingress Controller akan membuat kelompok server sebelum dapat membaca anotasi Service dan mengonfigurasinya sebagai tipe instans secara default. Hal ini menyebabkan kegagalan attachment server berbasis IP. Untuk menghindarinya, buat Service terlebih dahulu sebelum membuat Ingress.
Setelah menetapkan anotasi
alb.ingress.kubernetes.io/server-group-type: Ip, jangan menghapusnya. Menghapusnya menyebabkan ketidaksesuaian antara tipe kelompok server dan Service, yang mengakibatkan kegagalan rekonsiliasi dan mencegah node backend bergabung ke kelompok server.
apiVersion: v1
kind: Service
metadata:
annotations:
alb.ingress.kubernetes.io/server-group-type: Ip
name: tea-svc
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: tea
type: ClusterIPApa tujuan kelompok server default kube-system-fake-svc-80 yang digunakan oleh backend ALB?
Sebuah listener harus memiliki aturan pengalihan default. Saat ini, aturan pengalihan hanya mendukung pengalihan ke kelompok server. Oleh karena itu, kelompok server kube-system-fake-svc-80 diperlukan agar listener dapat berfungsi. Kelompok server ini tidak menangani lalu lintas bisnis, tetapi Anda tidak boleh menghapusnya.
Bagaimana cara mengonfigurasi resolusi nama domain untuk Ingress?
Contoh ini menunjukkan cara menambahkan rekaman DNS dengan tipe catatan diatur ke
CNAME, rekaman host diatur ke@(yang menunjukkan bahwa domain root, sepertiingress-demo.com, diselesaikan secara langsung), dan nilai rekaman diatur ke alamat titik akhir Ingress.Buka browser, lalu kunjungi http://ingress-demo.com/coffee untuk memverifikasi bahwa resolusi nama domain berfungsi.

Ganti nama domain dengan nama domain terdaftar aktual Anda untuk verifikasi. Jika resolusi nama domain tidak berfungsi, lihat Cara cepat memecahkan masalah kegagalan resolusi DNS.
Bagaimana cara mengonfigurasi enkripsi HTTPS untuk Ingress?
Beli sertifikat resmi, lengkapi permintaan sertifikat, dan pastikan sertifikat Anda berstatus Issued.
Contoh ini menunjukkan cara mengunduh file sertifikat dalam format PEM untuk nama domain
ingress-demo.com. Tipe server diatur ke Other.Buat secret untuk menyimpan file sertifikat.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, klik .
Pada halaman Secrets, pilih namespace
defaultlalu klik Create di pojok kiri atas. Tambahkan konfigurasi berikut lalu klik OK.Name:
ingress-tlsType: TLS Certificate
Certificate: Isi file sertifikat yang diunduh (.pem).
Key: Isi file kunci privat yang diunduh (.key).

Perbarui AlbConfig untuk menambahkan listener
HTTPS:443untuk instans ALB.Di panel navigasi sebelah kiri, pilih . Pada tab Resource Objects, cari dan klik AlbConfig.
Dalam daftar objek resource AlbConfig, temukan resource target
alblalu klik Edit YAML di kolom Actions.Tambahkan field
spec.listeners.port: 443danspec.listeners.protocol: HTTPS, lalu klik OK.
Perbarui Ingress untuk menambahkan konfigurasi TLS dan mengaitkan listener
HTTPS:443.Di panel navigasi sebelah kiri, pilih . Di kolom Actions Ingress target, klik Update.
Tambahkan konfigurasi berikut lalu klik OK.
TLS Settings: Enabled
Domain Name:
ingress-demo.comSecret:
ingress-tlsAnnotation:
alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]
Buka browser, lalu kunjungi
https://ingress-demo.com/coffeeuntuk memverifikasi bahwa akses HTTPS telah dienkripsi.
Ganti nama domain dengan nama domain terdaftar aktual Anda untuk verifikasi.
Untuk informasi selengkapnya tentang cara mengonfigurasi sertifikat HTTPS, lihat Konfigurasi sertifikat HTTPS untuk komunikasi terenkripsi.
Anomali penggunaan
Mengapa instans ALB saya turun spesifikasi dari Edisi WAF Enhanced ke Edisi Standar?
Akar penyebab
Setelah Anda mengaktifkan perlindungan WAF secara manual untuk instans ALB di konsol WAF, ALB Ingress Controller mendeteksi selama rekonsiliasi bahwa edisi aktual instans ALB tidak sesuai dengan field edition yang dideklarasikan di AlbConfig. Jika AlbConfig tidak secara eksplisit menentukan edition: StandardWithWaf, Controller akan mengembalikan instans ke Edisi Standar default, sehingga WAF turun ke Edisi Standar.
Solusi
Untuk mempertahankan Edisi WAF Enhanced, tetapkan secara eksplisit field edition ke StandardWithWaf di AlbConfig saat membuat instans ALB baru atau melakukan peningkatan dan penurunan instans yang sudah ada.
Mengapa saya mendapatkan kode kesalahan HTTP seperti 503, 502, dan 404 saat mengakses nama domain Ingress?
Akar penyebab
Kesalahan 503 (Service Temporarily Unavailable)
Tidak ada aturan routing yang sesuai: Path permintaan tidak sesuai dengan aturan routing yang dikonfigurasi di Ingress.
Tidak ada pod backend yang sehat: Semua pod yang terkait dengan layanan tidak siap atau tidak ada, sehingga menghasilkan objek endpoint kosong.
Kesalahan 502 (Bad Gateway)
Listener HTTP atau HTTPS menerima permintaan koneksi klien. Jika instans ALB tidak dapat meneruskan permintaan ke pod atau menerima respons dari pod, instans tersebut mengirimkan kode status HTTP 502 Bad Gateway ke klien.
Kesalahan 404 (Not Found)
Hal ini biasanya berarti permintaan sesuai dengan aturan routing yang ditentukan di Ingress, tetapi tidak sesuai dengan URL layanan aktual yang disediakan oleh aplikasi di dalam pod.
Kesalahan 400 (Bad Request)
Hal ini dapat terjadi karena berbagai alasan, seperti permintaan HTTP yang dikirim ke listener HTTPS.
Untuk kode error HTTP lainnya, lihat Kode Status ALB.
Solusi
Periksa status Ingress. Jalankan perintah
kubectl describe ingress <ingress-name> -n <namespace>dan periksa bagian Events untuk pesan kesalahan. Misalnya, jika Anda melihat event sepertilistener does not exist in alb, Anda harus membuat listener yang diperlukan untuk resource Ingress di AlbConfig.... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedBuildModel **** ingress listener is not exist in alb, port: 443, protocol: HTTPS Warning FailedBuildModel **** ingress listener not found for (443/HTTPS), with ingresses 1 ...Periksa endpoint backend. Jalankan perintah
kubectl get endpoints <service-name> -n <namespace>untuk memastikan fieldENDPOINTSberisi setidaknya satu alamat IP dan port pod yang sehat. Jika field tersebut kosong, verifikasi bahwaselectorlayanan sesuai denganlabelspada pod Anda, dan pastikan pod berada dalam statusRunning.Periksa status dan log pod. Pertama, jalankan perintah
kubectl get pod -l <app=your-app> -n <namespace>untuk memeriksa status pod aplikasi Anda. Kemudian, jalankankubectl logs <pod-name> -n <namespace>untuk memeriksa log pod tertentu guna mengidentifikasi kegagalan startup atau kesalahan pemrosesan permintaan.Uji konektivitas jaringan. Dari dalam pod lain atau langsung dari node, gunakan
curluntuk mengakses ClusterIP layanan backend atau IP pod langsung. Hal ini memverifikasi bahwa layanan dapat dijangkau dari dalam kluster.
Setelah mengonfigurasi TLS Ingress, mengapa HTTPS tetap tidak dapat diakses?
Akar penyebab
Instans ALB tidak mendengarkan di port 443. Anda telah mengonfigurasi enkripsi TLS untuk Ingress, tetapi listener
HTTPS:443yang sesuai belum dibuat.Sertifikat dikonfigurasi salah. Tipe secret bukan
kubernetes.io/tlsatauIngressTLS, atau isitls.crtdantls.keydi fielddatasalah atau tidak cocok.Pembaruan sertifikat belum berlaku. Anda memperbarui sertifikat di Alibaba Cloud Certificate Management Service, tetapi tidak memperbarui ID sertifikat yang ditentukan di AlbConfig, atau rekonsiliasi penemuan sertifikat otomatis tidak dipicu. Akibatnya, instans ALB masih mereferensikan sertifikat lama.
Solusi
Periksa port listener. Jalankan perintah
kubectl describe albconfig <alb-name> -n <namespace>untuk memeriksa apakah konfigurasispec.listeners.port: 443danspec.listeners.protocol: HTTPShilang.Periksa konfigurasi Ingress. Periksa apakah konfigurasi Ingress kehilangan anotasi
alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]. Anotasi ini mengaitkan Ingress dengan listener HTTP dan HTTPS.Periksa konfigurasi secret. Periksa field
secretNamedarispec.tlsdi konfigurasi Ingress untuk memastikan secret yang benar direferensikan. Jalankan perintahkubectl get secret <secret-name> -n <namespace> -o yamluntuk memastikan tipe secret dan integritas data.
Mengapa aturan ALB Ingress saya tidak berlaku?
Masalah
Setelah Anda membuat aturan ALB Ingress baru, aturan tersebut tidak berlaku seperti yang diharapkan. Lalu lintas tidak diteruskan ke layanan backend yang dituju.
Akar penyebab
Instans ALB memelihara aturan routing secara berurutan. Jika beberapa resource ALB Ingress menggunakan instans ALB yang sama, kesalahan konfigurasi pada satu ALB Ingress mencegah semua perubahan ALB Ingress lainnya berlaku.
Solusi
Jika ALB Ingress Anda tidak berlaku, kemungkinan ALB Ingress sebelumnya salah dikonfigurasi. Perbaiki terlebih dahulu ALB Ingress yang salah konfigurasi tersebut. Setelah itu, ALB Ingress baru Anda akan berlaku.
ALB Ingress tidak melaporkan aktivitas anomali, tetapi perubahan tidak berlaku. Apa yang harus saya lakukan?
Masalah
Setelah Anda mengubah konfigurasi ALB Ingress atau mengaitkannya dengan AlbConfig, tidak ada aktivitas anomali yang muncul. Namun, perubahan tersebut tidak berlaku.
Solusi
Hal ini dapat terjadi jika pengikatan antara IngressClass dan AlbConfig salah. Periksa field parameters di IngressClass Anda. Untuk petunjuk langkah demi langkah, lihat Mengaitkan AlbConfig dengan Ingress menggunakan IngressClass.
Aturan pengalihan ALB Ingress dihapus segera setelah dibuat, menyebabkan kode status 503. Apa yang harus saya lakukan?
Masalah
Aturan pengalihan ALB Ingress dihapus tepat setelah dibuat. Hal ini mengembalikan kode status 503 dan menghentikan distribusi lalu lintas.
Solusi
Periksa apakah semua resource Ingress yang terkait dengan aturan pengalihan memiliki anotasi canary: true. Rilis canary memerlukan versi baseline untuk mengarahkan lalu lintas. Oleh karena itu, Anda tidak perlu menambahkan canary: true ke Ingress baseline. Untuk petunjuk penggunaan ALB Ingress dalam rilis bertahap, lihat Implementasikan rilis bertahap dengan ALB Ingress.
Rilis canary hanya mendukung dua resource Ingress dan memiliki kondisi terbatas. Kami menyarankan penggunaan aturan pengalihan kustom untuk opsi routing lalu lintas yang lebih kaya. Untuk petunjuknya, lihat Kustomisasi aturan pengalihan ALB Ingress.
AlbConfig melaporkan “listener is not exist in alb, port: xxx”
Masalah
Permintaan ke port selain port 80 gagal terhubung. AlbConfig melaporkan “listener is not exist in alb, port: xxx”, yang berarti port tersebut tidak mendengarkan atau meneruskan lalu lintas.
Solusi
AlbConfig default hanya mencakup listener untuk port 80. Untuk mendengarkan port lain, tambahkan konfigurasi listener untuk port tersebut di AlbConfig. Untuk petunjuknya, lihat Buat listener.
Setelah mengonfigurasi listener HTTP dan HTTPS di AlbConfig, mengapa saya tidak dapat mengaksesnya?
Masalah
Saya telah mengonfigurasi listener HTTP dan HTTPS di AlbConfig. Namun, saya tidak dapat mengakses keduanya. Lalu lintas tidak didengarkan atau diteruskan.
Solusi
Pastikan Anda telah menambahkan anotasi alb.ingress.kubernetes.io/listen-ports ke resource Ingress. Anotasi ini memberi tahu ALB Ingress untuk mendengarkan baik HTTP (port 80) maupun HTTPS (port 443). Contohnya:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: https-ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' # Tambahkan anotasi ini agar ALB Ingress berfungsi dengan beberapa listener.
spec:
#...Mengapa perubahan konfigurasi manual di konsol ALB hilang? Mengapa aturan dihapus dan log akses dinonaktifkan?
Masalah
Setelah saya mengubah konfigurasi secara manual di konsol ALB, perubahan tersebut menghilang atau dihapus. Log akses juga dinonaktifkan.
Solusi
ALB Ingress memperbarui konfigurasi dengan mengubah resource di kluster Anda. Konfigurasi ini disimpan di API server kluster sebagai resource ALB Ingress atau AlbConfig. Perubahan manual di konsol ALB tidak memperbarui API server, sehingga tidak berlaku. Saat rekonsiliasi dijalankan, konfigurasi konsol akan ditimpa dengan nilai dari Ingress atau AlbConfig. Untuk menghindarinya, perbarui konfigurasi dengan mengubah resource ALB Ingress atau AlbConfig.
Mengapa muncul pesan kesalahan selama proses tuning: Specified parameter array contains too many items, up to 15 items, Certificates is not valid?
Masalah
Selama rekonsiliasi, saya mendapatkan kesalahan “Specified parameter array contains too many items, up to 15 items, Certificates is not valid”. Akibatnya, ALB Ingress tidak dapat mengaitkan sertifikat yang diperlukan.
Solusi
Mulai dari ALB Ingress Controller v2.11.0-aliyun.1, pagination sertifikat didukung. Jika Anda melihat kesalahan ini, versi ALB Ingress Controller Anda saat ini tidak mendukung pagination sertifikat, dan kasus penggunaan Anda mencoba mengaitkan lebih dari 15 sertifikat dalam satu rekonsiliasi. Untuk memperbaikinya, tingkatkan ALB Ingress Controller Anda ke versi terbaru. Untuk informasi versi, lihat ALB Ingress Controller. Untuk petunjuk peningkatan, lihat Kelola komponen ALB Ingress Controller.
Setelah saya mengonfigurasi instans ALB di konsol, mengapa menjalankan kubectl apply untuk memperbarui pengaturan ACL AlbConfig menghapus beberapa listener?
Masalah
Setelah saya membuat dan mengonfigurasi instans ALB di konsol, saya menjalankan kubectl apply untuk memperbarui pengaturan ACL AlbConfig. Beberapa listener terhapus secara tak terduga, sehingga port atau aturan tersebut berhenti berfungsi.
Solusi
Kami menyarankan Anda menggunakan perintah kubectl edit untuk langsung memperbarui konfigurasi resource. Jika Anda harus menggunakan perintah kubectl apply untuk memperbarui resource, jalankan perintah kubectl diff sebelum menjalankan kubectl apply untuk melihat pratinjau perubahan, verifikasi bahwa perubahan sesuai harapan, lalu gunakan kubectl apply untuk menerapkan perubahan ke kluster Kubernetes Anda.
Perintah kubectl apply melakukan pembaruan overwrite pada AlbConfig. Jadi, saat Anda menggunakan kubectl apply untuk memperbarui pengaturan ACL AlbConfig, sertakan konfigurasi listener lengkap dalam file YAML Anda. Jika tidak, listener yang tidak tercantum akan dihapus.
Jika listener dihapus setelah menjalankan kubectl apply, pulihkan dengan langkah-langkah berikut.
Periksa apakah file YAML Anda mencantumkan semua listener.
Jika ada listener yang dihapus tidak tercantum, lanjutkan ke langkah berikutnya. Jika tidak, lewati.
Jalankan perintah berikut untuk mengedit AlbConfig dan menambahkan kembali listener yang dihapus.
kubectl -n <namespace> edit albconfig <albconfig-name> # Ganti <namespace> dan <albconfig-name> dengan namespace dan nama resource AlbConfig Anda.
Tuning performa
Bagaimana cara mengurangi waktu rekonsiliasi server selama penskalaan pod di Service?
Masalah
Di Kubernetes, rekonsiliasi server memakan waktu terlalu lama saat pod yang terhubung ke Service mengalami penskalaan. Hal ini memengaruhi elastisitas real-time. Investigasi menunjukkan bahwa waktu rekonsiliasi meningkat seiring jumlah resource Ingress yang terkait.
Solusi
Untuk meningkatkan efisiensi tuning server, Anda dapat menerapkan langkah-langkah optimasi berikut:
Batasi jumlah Ingress: Hubungkan tidak lebih dari 30 resource Ingress ke satu Service.
Gabungkan aturan Ingress: Jika Anda memiliki banyak resource Ingress, hubungkan beberapa Service ke satu Ingress. Definisikan beberapa aturan pengalihan di Ingress tersebut untuk meningkatkan performa rekonsiliasi server.
Saat menggunakan plugin Flannel dan Service mode Local, bagaimana cara menetapkan bobot node secara otomatis?
Masalah
Saat menggunakan plugin Flannel dengan Service mode Local, distribusi lalu lintas di antara node tidak merata. Beberapa node menanggung beban lebih tinggi daripada yang lain. Bagaimana cara menetapkan bobot node secara otomatis berdasarkan jumlah pod per node untuk mencapai distribusi lalu lintas yang seimbang?
Solusi
Mulai dari ALB Ingress Controller v2.13.1-aliyun.1, penugasan bobot node otomatis didukung. Tingkatkan ke versi terbaru untuk menggunakan fitur ini. Untuk informasi selengkapnya, lihat Tingkatkan komponen ALB Ingress Controller.
Di kluster Flannel, saat Service berada dalam mode Local, bobot node dihitung seperti yang ditunjukkan pada diagram di bawah. Dalam contoh ini, pod aplikasi (app=nginx) berjalan di tiga instans ECS. Service A mengeksposnya ke luar.
Jumlah total pod backend dalam Service | Deskripsi |
Jumlah pod ≤ 100 | ALB Ingress Controller menetapkan bobot setiap node sesuai jumlah pod di node tersebut. Contoh: Seperti yang ditunjukkan di atas, tiga instans ECS memiliki 1, 2, dan 3 pod. Bobotnya diatur menjadi 1, 2, dan 3. Maka traffic didistribusikan dengan rasio 1:2:3 di antara tiga instans ECS tersebut. Hal ini mencapai distribusi beban pod yang lebih seimbang. |
Jumlah pod > 100 | ALB Ingress Controller menghitung bobot node sebagai persentase dari total pod yang berjalan di node tersebut. Contoh: Jika tiga instans ECS memiliki 100, 200, dan 300 pod, bobotnya diatur menjadi 16, 33, dan 50. Maka traffic didistribusikan dengan rasio 16:33:50 di antara tiga instans ECS tersebut. Hal ini mencapai distribusi beban pod yang lebih seimbang. |