全部产品
Search
文档中心

Container Service for Kubernetes:Catatan Penggunaan Controller NGINX Ingress

更新时间:Jul 02, 2025

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

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).

Penting

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: 50

Konfigurasikan 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
              - 30

Tingkatkan 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:

  • Managed Service for Prometheus: Anda dapat mengaktifkan Managed Service for Prometheus saat membuat kluster. Setelah pembuatan kluster, Anda juga dapat memilih Operations > Prometheus Monitoring untuk mengaktifkan dan mengakses layanan tersebut. Untuk informasi lebih lanjut, lihat Gunakan Managed Service for Prometheus untuk memantau kluster ACK.

    Catatan

    Jika menggunakan Managed Service for Prometheus, tambahkan bidang host ke Ingress. Alternatifnya, tambahkan --metrics-per-host=false ke parameter startup controller.

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.

Penting

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.