Controller NGINX Ingress diterapkan di kluster Container Service for Kubernetes (ACK) dan digunakan untuk mengontrol Ingress. Controller ini menawarkan performa tinggi serta fleksibilitas dalam penyesuaian konfigurasi. Versi yang disediakan oleh ACK dikembangkan berdasarkan versi open source dan terintegrasi dengan layanan Alibaba Cloud. Stabilitasnya bergantung pada konfigurasi dan status kluster. Topik ini menjelaskan catatan penting terkait penggunaannya.
Daftar isi
Tingkatkan performa dan stabilitas controller NGINX Ingress
Tentukan jumlah pod controller yang tepat dan konfigurasikan batas sumber daya yang sesuai
Secara default, dua pod disediakan saat Anda menginstal controller NGINX Ingress melalui halaman Add-ons atau saat membuat kluster. Sesuaikan jumlah pod sesuai kebutuhan bisnis Anda.
Saat menerapkan controller NGINX Ingress, pastikan pod controller didistribusikan di berbagai node untuk mencegah perebutan sumber daya dan titik kegagalan tunggal (SPOF). Jadwalkan pod controller pada node eksklusif guna memastikan performa dan stabilitas controller NGINX Ingress. Untuk detail lebih lanjut, lihat Gunakan node eksklusif untuk memastikan performa dan stabilitas controller NGINX Ingress. Kami menyarankan agar Anda tidak menetapkan batas sumber daya untuk pod controller NGINX Ingress guna menghindari gangguan layanan akibat kesalahan out of memory (OOM). Jika batas sumber daya diperlukan, tetapkan batas CPU minimal 1.000 millicores dan batas memori minimal 2 GiB. Format batas CPU dalam file YAML adalah 1000m.
Gunakan node eksklusif untuk meningkatkan performa dan stabilitas controller NGINX Ingress
Untuk stabilitas tinggi, jadwalkan pod controller ke node eksklusif. Ini membantu mencegah perebutan sumber daya. Untuk detail lebih lanjut, lihat Terapkan Controller Ingress yang Sangat Andal.
Anda juga dapat mengonfigurasi controller untuk aplikasi dengan trafik berat. Lihat Konfigurasikan Controller NGINX Ingress dalam Skenario Beban Tinggi.
Optimalkan performa controller NGINX Ingress
Modifikasi pengaturan sistem dan parameter NGINX untuk meningkatkan performa:
Modifikasi Pengaturan Sistem: Beberapa pengaturan default telah dioptimalkan. Anda dapat menyesuaikan pengaturan lain seperti antrian backlog dan rentang port maksimum untuk mendukung koneksi bersamaan dalam jumlah besar.
Tune Parameter NGINX:
Jumlah maksimum koneksi per proses pekerja: Sesuaikan untuk mendukung koneksi bersamaan dalam jumlah besar.
Permintaan Keepalive: Tingkatkan jumlah permintaan yang diproses per koneksi keepalive untuk memperpanjang durasi koneksi.
Timeout Keepalive: Pastikan timeout koneksi ke pod backend tidak lebih pendek dari timeout ke controller NGINX Ingress (default 900 detik).
Parameter di atas telah dioptimalkan secara default. Modifikasi hanya diperlukan jika ada kebutuhan khusus. Gunakan ConfigMap untuk penyesuaian lebih lanjut. Lihat ConfigMaps.
Konfigurasikan HPA untuk melakukan penskalaan otomatis berdasarkan beban
Dalam skenario beban berat, konfigurasikan Horizontal Pod Autoscaler (HPA) untuk menskalakan pod controller. Lihat Implementasikan Horizontal Pod Autoscaler (HPA).
Gangguan layanan mungkin terjadi selama penskalaan HPA. Lakukan konfigurasi dengan hati-hati.
Berikut contoh template YAML untuk konfigurasi HPA:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-ingress-controller-hpa
namespace: kube-system
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-ingress-controller
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50Konfigurasikan PreStop hooks untuk aplikasi backend
Saat pembaruan bergulir dilakukan, controller NGINX Ingress menghapus titik akhir pod yang sedang dihentikan. Jika pod backend segera dihentikan, permintaan yang sedang diproses mungkin gagal.
Untuk menghindari hilangnya trafik, konfigurasikan PreStop hooks agar pod backend tetap berjalan selama periode tertentu setelah titik akhir mereka dihapus.
Tambahkan konfigurasi berikut ke template pod:
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- name: app
lifecycle:
# Konfigurasikan PreStop hook untuk menjaga pod tetap berjalan selama 30 detik sebelum dihentikan.
# Anda dapat menentukan perintah sleep dalam template pod.
preStop:
exec:
command:
- sleep
- 30Tingkatkan observabilitas controller NGINX Ingress
Gunakan Simple Log Service dan Managed Service for Prometheus untuk meningkatkan observabilitas controller NGINX Ingress
Controller NGINX Ingress menyediakan dasbor Ingress berdasarkan Simple Log Service dan Managed Service for Prometheus untuk wawasan trafik yang lebih baik.
Layanan Log:
Jika Anda memilih opsi Aktifkan Layanan Log dan Buat Dasbor Ingress saat membuat kluster, masuk ke Konsol ACK, pilih . Di bagian Ingress Overview, Anda dapat melihat dasbor Ingress yang disediakan oleh ACK berdasarkan Simple Log Service. Untuk melihat log controller NGINX Ingress, pilih . Informasi lebih lanjut dapat ditemukan di Analisis dan pantau log akses nginx-ingress.
Jika tidak diaktifkan saat pembuatan kluster, konfigurasikan komponen log secara manual. Lihat Analisis dan Pantau Log Akses Nginx-Ingress dan Pemantauan Dasbor Ingress.
Managed Service for Prometheus: Anda dapat mengaktifkan Managed Service for Prometheus saat membuat kluster. Setelah pembuatan kluster, Anda juga dapat memilih untuk mengaktifkan dan mengakses layanan tersebut. Untuk informasi lebih lanjut, lihat Gunakan Managed Service for Prometheus untuk memantau kluster ACK.
CatatanJika menggunakan Managed Service for Prometheus, tambahkan bidang
hostke Ingress. Alternatifnya, tambahkan--metrics-per-host=falseke parameter startupcontroller.
Fitur lanjutan dari controller NGINX Ingress
Gunakan beberapa controller NGINX Ingress
Terapkan beberapa controller untuk mengisolasi jaringan internal dari Internet. Lihat Terapkan Beberapa Controller Ingress dalam Kluster.
Akses controller NGINX Ingress dari dalam kluster
Masalah konektivitas dapat terjadi jika externalTrafficPolicy diatur ke Local dan tidak ada pod controller yang dijadwalkan ke node kluster. Secara default, controller menggunakan mode Local.
Untuk mengakses controller dari dalam kluster, gunakan alamat IP kluster Layanan LoadBalancer atau nama domain internal nginx-ingress-lb.kube-system. Lihat What can I do if the cluster cannot access the IP address of the SLB instance exposed by the LoadBalancer Service.
Gunakan WAF atau WAF transparan
Aktifkan WAF atau WAF transparan melalui Konsol Web Application Firewall (WAF) atau Konsol Application Load Balancer (ALB). Masalah berikut mungkin terjadi:
Permintaan TLS diblokir oleh WAF atau WAF transparan, sehingga sertifikat Secret kluster tidak diekspos ke Internet.
Trafik ke port 443 dari dalam kluster mungkin gagal melewati WAF atau WAF transparan, menyebabkan kesalahan sertifikat.
Untuk mempertahankan alamat IP klien, aktifkan modul realip NGINX dan gunakan header
X-Forwarded-For. Tambahkan konfigurasi berikut ke ConfigMap controller NGINX Ingress:use-forwarded-headers: "true" # Gunakan opsi ini jika versi controller NGINX Ingress adalah 0.30.0 atau lebih awal. enable-real-ip: "true" # Gunakan opsi ini jika versi controller NGINX Ingress adalah 0.44.0 atau lebih baru. proxy-real-ip-cidr: <The back-to-origin CIDR block that you obtain from WAF>
Gunakan controller NGINX Ingress untuk melakukan penyebaran biru-hijau dan rilis canary
Gunakan fitur rilis canary melalui Konsol ACK atau dengan menambahkan anotasi. Lihat Gunakan Controller NGINX Ingress untuk Implementasi Rilis Canary dan Penyebaran Biru-Hijau.
Pastikan bahwa versi lama dan baru Layanan hanya terkait dengan Ingress canary untuk menghindari konflik aturan distribusi trafik.
Gunakan controller NGINX Ingress sebagai proxy untuk mendistribusikan permintaan non-HTTP
Secara default, controller terhubung ke Layanan backend melalui HTTP. Protokol yang didukung termasuk WebSocket, HTTPS, dan gRPC. Lihat Protokol Backend.
WebSocket: Didukung secara default. Untuk menjaga koneksi tetap hidup, sesuaikan timeout koneksi menggunakan anotasi. Lihat Timeout Kustom.
HTTPS: Tambahkan anotasi
nginx.ingress.kubernetes.io/backend-protocol:"HTTPS"untuk mengakses Layanan HTTPS.gRPC: Layanan gRPC hanya dapat diakses melalui port TLS. Pastikan koneksi terenkripsi TLS digunakan. Lihat Terapkan Layanan gRPC di Backend Controller NGINX Ingress.