全部产品
Search
文档中心

:Memperbarui NGINX Ingress controller

更新时间:Jul 02, 2025

Setelah meningkatkan kluster, Anda mungkin perlu memperbarui NGINX Ingress Controller karena beberapa API di versi Kubernetes baru sudah tidak digunakan lagi. Pembaruan ini direkomendasikan untuk memastikan stabilitas, keamanan, serta akses ke fitur terbaru.

Prosedur

Pastikan stabilitas NGINX Ingress Controller karena ini merupakan komponen kunci dari data plane.

Masalah ketidakcocokan dapat terjadi jika Anda memperbarui NGINX Ingress Controller ke versi terbaru. Versi terbaru mencakup perubahan signifikan, termasuk perubahan kustom yang substansial. Selain itu, pembaruan langsung membawa risiko lebih tinggi karena masalah ketidakcocokan mungkin tidak segera terdeteksi setelah pembaruan.

Berbeda dengan komponen lainnya, NGINX Ingress Controller diperbarui secara bertahap. Hal ini memungkinkan Anda memeriksa status beban kerja dan mengembalikan pembaruan jika terjadi pengecualian.

Fase 1: Precheck

Sistem secara otomatis melakukan precheck pada NGINX Ingress controller sebelum pembaruan untuk memverifikasi kepatuhan dengan persyaratan. Jika NGINX Ingress controller tidak memenuhi prasyarat atau status komponen tidak sehat, Anda harus memperbaiki masalah tersebut secara manual sebelum dapat memperbarui komponen.

Fase 2: Verifikasi

Sebuah pod dibuat untuk versi baru NGINX Ingress Controller. Pod ini digunakan untuk memverifikasi status dan aturan Ingress versi baru. Setelah pod dibuat, sebagian lalu lintas pengguna didistribusikan ke pod tersebut. Anda dapat menganalisis log kontainer atau menggunakan Layanan Log Sederhana atau Managed Service for Prometheus untuk memeriksa apakah lalu lintas pengguna diproses sesuai harapan.

Setelah pod dibuat untuk versi baru, proses pembaruan dijeda. Setelah Anda mengonfirmasi bahwa tidak ada pengecualian yang terjadi pada komponen dan beban kerja, Anda dapat melanjutkan proses pembaruan secara manual. Jika Anda mengidentifikasi pengecualian, Anda dapat mengembalikan pembaruan dan menghapus pod untuk versi baru.

Untuk mengembalikan pembaruan, modifikasi parameter spec.minReadySeconds dan spec.strategy dalam Deployment.

Fase 3: Rilis

Pembaruan bergulir dilakukan selama fase rilis untuk mengganti versi lama NGINX Ingress Controller dengan versi baru. Setelah semua pod NGINX Ingress Controller diperbarui, proses pembaruan dijeda untuk memungkinkan Anda memeriksa status komponen dan beban kerja. Setelah Anda mengonfirmasi bahwa tidak ada pengecualian yang terjadi, Anda dapat menyelesaikan pembaruan. Jika Anda mengidentifikasi pengecualian, Anda dapat mengembalikan NGINX Ingress Controller di semua pod ke versi lama dan kemudian mengakhiri pembaruan.

Fase 4: Pengembalian (opsional)

Proses pembaruan secara otomatis dijeda selama fase verifikasi dan rilis untuk memungkinkan Anda mengidentifikasi pengecualian yang terjadi selama pembaruan. Jika Anda mengidentifikasi pengecualian, Anda dapat mengembalikan NGINX Ingress Controller ke versi lama.

Prasyarat

  • Sebelum memperbarui NGINX Ingress Controller, pastikan Anda memiliki cara untuk memantau lalu lintas bisnis dan mengidentifikasi pengecualian. Anda dapat menggunakan Layanan Log Sederhana atau Managed Service for Prometheus untuk memantau lalu lintas bisnis. Untuk informasi lebih lanjut, lihat Analisis dan pantau log akses nginx-ingress-controller dan Gunakan Managed Service for Prometheus.

  • Pastikan status NGINX Ingress Controller sehat, semua pod NGINX Ingress Controller berada dalam keadaan Siap, dan tidak ada log kesalahan yang dihasilkan.

  • Pastikan tidak ada aturan penskalaan otomatis, seperti HorizontalPodAutoscaler (HPA), yang digunakan. Jika aturan penskalaan otomatis ada, hapus aturan tersebut, selesaikan pembaruan, dan buat ulang aturan.

  • Pastikan Layanan LoadBalancer berjalan sesuai harapan.

  • Jangan modifikasi NGINX Ingress Controller atau aturan Ingress selama pembaruan.

  • Jika versi NGINX Ingress Anda lebih awal dari 0.44, perhatikan perbedaan dalam pencocokan awalan saat Anda memperbaruinya. Untuk informasi lebih lanjut, lihat Catatan Pembaruan.

  • Pastikan kluster memiliki node yang cukup untuk memungkinkan pod NGINX Ingress dibuat dan dijadwalkan dengan benar. Komponen diperbarui menggunakan strategi rilis canary. Pertama, pod yang menjalankan versi target NGINX Ingress dibuat. Setelah lalu lintas diverifikasi, klik Continue untuk memicu pembaruan bergulir.

Prosedur

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

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.

  3. Di halaman Add-ons, temukan NGINX Ingress Controller dan klik Upgrade di bagian kanan bawah.

  4. Di halaman yang muncul, konfirmasikan informasi dan klik Start untuk memulai pembaruan.

    Catatan

    Anda dapat kembali ke halaman pembaruan kapan saja selama proses pembaruan, atau klik Progress di halaman Add-ons untuk melihat kemajuan pembaruan.

  5. Precheck dilakukan di Fase 1. Setelah precheck selesai, pembaruan secara otomatis berlanjut ke Fase 2.

    Jika NGINX Ingress Controller gagal melewati precheck, Anda dapat mengklik View Details di bawah Precheck untuk pergi ke halaman View Report. Kemudian, perbaiki masalah yang ditampilkan di halaman ini. Untuk informasi lebih lanjut, lihat bagian Precheck dari topik ini. Setelah Anda memperbaiki masalah, klik Retry untuk memulai pembaruan ulang.

  6. Setelah fase verifikasi berakhir, proses pembaruan dijeda. Anda dapat memeriksa status NGINX Ingress Controller dan beban kerja. Untuk informasi lebih lanjut, lihat bagian Verifikasi dari topik ini.

    • Untuk informasi lebih lanjut tentang cara memperbaiki masalah bahwa pod gagal dibuat, lihat bagian Apa yang harus saya lakukan jika pod gagal dibuat selama fase verifikasi dan rilis? dari topik ini. Anda juga dapat menganalisis log kesalahan pod untuk mengidentifikasi penyebab kegagalan memulai pod. Setelah Anda memperbaiki masalah, klik Retry untuk melakukan verifikasi ulang.

    • Jika pengecualian terjadi pada beban kerja Anda, klik Roll Back untuk mengembalikan pembaruan. Setelah pengembalian selesai, proses pembaruan berakhir. Anda dapat mengklik Upgrade di halaman Add-ons untuk memulai pembaruan ulang.

  7. Setelah verifikasi berhasil, klik Continue untuk melanjutkan ke fase rilis. Setelah pembaruan bergulir selama fase rilis selesai, proses pembaruan dijeda. Anda dapat memeriksa status NGINX Ingress Controller dan beban kerja. Jika pengecualian terjadi pada beban kerja Anda, klik Roll Back untuk mengembalikan pembaruan. Setelah pengembalian selesai, proses pembaruan berakhir. Anda dapat mengklik Tingkatkan di halaman Add-ons untuk memulai pembaruan ulang.

  8. Jika tidak ada pengecualian yang terjadi, klik Continue untuk menyelesaikan pembaruan.

    Catatan

    Pastikan bahwa proses pembaruan selesai dalam satu minggu.

Precheck

Tabel Precheck

Item Pemeriksaan

Konten

Pemecahan Masalah

Deployment Exist

Periksa apakah Deployment (kube-system/nginx-ingress-controller) dari NGINX Ingress Controller ada.

T/A

Deployment Sehat

Periksa apakah semua pod yang dikendalikan oleh Deployment NGINX Ingress Controller berada dalam keadaan Siap. Pastikan bahwa pod-pod ini tidak sedang melakukan pembaruan bergulir atau berjalan dalam keadaan tidak stabil lainnya.

T/A

Log Kesalahan

Periksa 200 entri log terbaru dalam log kesalahan pod. Pastikan tidak ada kesalahan dengan tingkat keparahan Error atau Fatal.

Jika kesalahan di atas ada, pengecualian baru-baru ini terjadi pada NGINX Ingress Controller karena konfigurasi yang tidak valid. Anda harus memperbaiki masalah tersebut dan kemudian memulai pembaruan ulang. Untuk informasi lebih lanjut, lihat Pemecahan Masalah NGINX Ingress Controller.

Layanan LoadBalancer Sehat

Periksa apakah Layanan LoadBalancer (kube-system/nginx-ingress-lb) dari NGINX Ingress Controller ada. Jika Layanan LoadBalancer ada, periksa apakah acara kesalahan dihasilkan untuk Layanan LoadBalancer.

Jika Layanan LoadBalancer tidak ada, acara Peringatan dihasilkan.

Jika Layanan LoadBalancer tidak ada, lihat solusi untuk masalah "Hapus secara manual nginx-ingress-lb Layanan di namespace kube-system kluster yang memiliki NGINX Ingress Controller terpasang" dalam Catatan Penggunaan dan Instruksi Operasi Berisiko Tinggi.

Jika acara kesalahan dihasilkan untuk Layanan LoadBalancer, selesaikan masalah berdasarkan isi acara tersebut. Untuk informasi lebih lanjut, lihat bagian Kesalahan Layanan dan Solusi dari topik "Pemecahan Masalah Layanan". Item pemeriksaan ini dilewati jika jenis Layanan bukan LoadBalancer.

HPA

Periksa apakah Deployment NGINX Ingress Controller menggunakan HPA. HPA dapat memicu aktivitas penskalaan selama proses pembaruan dan memengaruhi pembaruan secara negatif.

Oleh karena itu, Anda harus menghapus sumber daya HPA dari kluster sebelum Anda memperbarui NGINX Ingress Controller dan kemudian mengonfigurasi ulang HPA setelah pembaruan selesai.

Deployment

Periksa apakah Deployment NGINX Ingress Controller hanya mencakup perubahan yang kompatibel.

Pembaruan tidak dapat mempertahankan perubahan kustom yang Anda buat pada Deployment NGINX Ingress Controller.

  • Hanya parameter berikut yang dipertahankan sebagai parameter kustom dalam Deployment setelah NGINX Ingress Controller diperbarui:

    • replicas: jumlah pod replika.

    • template.metadata.labels: label pod.

    • template.spec.nodeSelector: pemilih pod.

    • template.spec.tolerations: toleransi.

    • template.spec.containers[0].resources: batas sumber daya untuk kontainer NGINX Ingress Controller.

  • Parameter berikut tidak memengaruhi precheck tetapi sudah tidak digunakan setelah NGINX Ingress Controller diperbarui:

    • Parameter redeploy-timestamp di bagian template.metadata.annotations.

    • Anotasi kubectl.kubernetes.io/restartedAt.

    • Anotasi scheduler.alpha.kubernetes.io/critical-pod.

    • Parameter imagePullPolicy.

    • Parameter template.spec.containers.securityContext.procMount jika nilai parameter tersebut diatur ke Default.

    • Konfigurasi Webhook, termasuk parameter runtime, volume, dan port.

Memodifikasi parameter di atas dalam Deployment NGINX Ingress Controller tidak menyebabkan item pemeriksaan ini menunjukkan GAGAL. Jika Anda membuat perubahan pada Deployment selain parameter di atas, menggunakan versi lama, atau memperbarui NGINX Ingress Controller tanpa memenuhi semua persyaratan pembaruan, item pemeriksaan ini menunjukkan GAGAL. Daftar berikut menjelaskan alasan umum mengapa item pemeriksaan ini menunjukkan GAGAL:

  • Anda memasang volume kustom menggunakan Enterprise Distributed Application Service (EDAS). Anda harus menangguhkan EDAS selama pembaruan.

  • Pengaturan podAntiAffinity berbeda dari yang ada di template standar, kemungkinan karena adanya modifikasi pada template. Sebagai contoh, pengaturan podAntiAffinity diubah dari required menjadi preferred. Anda perlu memodifikasi pengaturan podAntiAffinity secara manual agar sesuai dengan pengaturan podAntiAffinity dalam template standar.

  • Parameter nodeAffinity ditambahkan untuk menentukan node eksklusif. Anda harus menggunakan parameter nodeSelector sebagai gantinya.

Jika item pemeriksaan ini menunjukkan GAGAL, Anda dapat memulihkan template Deployment secara manual. Untuk informasi lebih lanjut, lihat bagian Apa yang harus saya lakukan jika template Deployment gagal melewati pemeriksaan? dari topik ini.

Konfigurasi Ingress

Periksa apakah Ingress dalam kluster hanya mencakup fitur yang kompatibel.

Jika Ingress dalam kluster menggunakan fitur yang tidak kompatibel, NGINX Ingress Controller mungkin gagal mendistribusikan lalu lintas pengguna sesuai harapan setelah NGINX Ingress Controller diperbarui. Akibatnya, gangguan layanan mungkin terjadi. Untuk informasi lebih lanjut tentang cara memperbaiki masalah kompatibilitas terkait Ingress, lihat bagian Masalah Kompatibilitas dari topik ini.

Konfigurasi Komponen

Periksa apakah ConfigMap nginx-configuration di namespace kube-system berisi konfigurasi yang tidak kompatibel.

Jika ConfigMap berisi konfigurasi yang tidak kompatibel, NGINX Ingress Controller mungkin gagal mendistribusikan lalu lintas pengguna sesuai harapan setelah NGINX Ingress Controller diperbarui. Akibatnya, gangguan layanan mungkin terjadi. Untuk informasi lebih lanjut tentang cara menyelesaikan masalah kompatibilitas terkait Ingress, lihat bagian Masalah Kompatibilitas dari topik ini.

Masalah ketidakcocokan

Selama pengembangan dan pemeliharaan, versi baru NGINX Ingress Controller dapat memperkenalkan fitur baru, meningkatkan fitur yang ada, atau memperbaiki masalah keamanan. Namun, pembaruan ini juga dapat menyebabkan masalah kompatibilitas dengan versi sebelumnya karena perubahan dalam arsitektur internal atau variasi dalam pustaka dependensi. Untuk informasi lebih lanjut tentang catatan rilis NGINX Ingress Controller, lihat NGINX Ingress Controller.

Pemeriksaan validasi NGINX asli dinonaktifkan secara default

Versi yang terpengaruh: versi lebih awal dari v1.11.5-aliyun.1

Untuk memperbaiki CVE-2025-1974, mulai dari v1.11.5-aliyun.1, NGINX Ingress Controller menonaktifkan validasi konfigurasi NGINX asli secara default (setara dengan logika nginx -t). Meskipun webhook validasi tetap diaktifkan untuk komponen tersebut, ia tidak memvalidasi konfigurasi yang didefinisikan dalam anotasi snippet. Hanya anotasi non-snippet yang menjalani validasi. Untuk konfigurasi snippet, validitas harus diverifikasi melalui log kesalahan runtime yang dihasilkan oleh NGINX. Untuk detail kerentanan, lihat Advisori Keamanan untuk Kerentanan CVE-2025-1097, CVE-2025-1098, CVE-2025-1974, CVE-2025-24513, dan CVE-2025-24514.

Jika Anda menggunakan anotasi snippet, jalankan perintah berikut setelah setiap modifikasi snippet untuk memantau log pod NGINX Ingress Controller untuk kesalahan konfigurasi:

kubectl logs -f <Nginx-ingress-pod-name> -n kube-system |grep Error

Untuk mempertahankan kemampuan validasi NGINX asli, aktifkan secara manual dengan menambahkan parameter enable-nginx-native-validation: "true" ke kube-system/nginx-configuration ConfigMap setelah evaluasi risiko menyeluruh.

Anotasi snippet dinonaktifkan secara default

Versi yang terpengaruh: versi lebih awal dari v1.9.3-aliyun.1.

Untuk tujuan keamanan, NGINX Ingress Controller v1.9.3-aliyun.1 dan versi lebih baru melarang anotasi snippet.

  • nginx.ingress.kubernetes.io/configuration-snippet

  • nginx.ingress.kubernetes.io/server-snippet

  • nginx.ingress.kubernetes.io/stream-snippet

  • nginx.ingress.kubernetes.io/auth-snippet

  • nginx.ingress.kubernetes.io/modsecurity-snippet

Untuk memastikan keamanan dan stabilitas, jika Anda ingin menggunakan fitur tertentu, kami sarankan Anda menggunakan anotasi atau pengaturan yang sesuai sebagai ganti anotasi snippet.

Jika Anda ingin menggunakan anotasi snippet, evaluasi risiko dan tambahkan allow-snippet-annotations: "true" ke kube-system/nginx-configuration ConfigMap untuk mengizinkan anotasi snippet.

Ketidakcocokan dengan versi TLS lebih awal

Versi yang terpengaruh: versi lebih awal dari v1.7.0-aliyun.1.

TLS 1.1 dan versi lebih awal memiliki masalah keamanan. NGINX Ingress Controller tidak lagi mendukung versi TLS berikut: TLS 1.1 dan TLS 1.0. Sebelum Anda memperbarui NGINX Ingress Controller, pastikan bahwa layanan Anda tidak bergantung pada TLS 1.1 atau versi lebih awal, dan TLS 1.1 serta versi lebih awal telah dihapus dari pengaturan TLS layanan Anda. Perubahan pada ConfigMap berlaku segera.

Konten berikut menunjukkan contoh pengaturan TLS dalam ConfigMap nginx-configuration dari NGINX Ingress Controller di namespace kube-system:

ssl-protocols: SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3

Setelah memverifikasi bahwa layanan Anda tidak bergantung pada TLS 1.1 atau versi lebih awal, Anda dapat menghapus baris konfigurasi ini untuk menggunakan pengaturan TLS default. Anda juga dapat menghapus TLS 1.1, TLS 1.0, SSL 3.0, dan SSL 2.0 dari pengaturan TLS. Contoh:

ssl-protocols: TLSv1.2 TLSv1.3

Jika Anda ingin menggunakan versi TLS yang lebih lama, lengkapi konfigurasi dengan merujuk pada dokumen yang diperlukan. Untuk informasi lebih lanjut, lihat bagian Protokol SSL atau TLS mana yang didukung oleh Ingress? dari topik "FAQ Nginx Ingress".

Masalah ketidakcocokan terkait anotasi nginx.ingress.kubernetes.io/rewrite-target

Versi yang terpengaruh: versi lebih awal dari 0.22.0.

  • NGINX Ingress Controller 0.22.0 menambahkan perubahan pada cara menggunakan anotasi nginx.ingress.kubernetes.io/rewrite-target. Di NGINX Ingress Controller 0.22.0 dan versi lebih baru, Anda perlu secara eksplisit menentukan grup penangkapan jika ingin menggunakan anotasi rewrite-target.

  • Anotasi rewrite-target dalam versi NGINX Ingress Controller lebih awal dari 0.22.0 tidak kompatibel dengan anotasi rewrite-target dalam versi yang lebih baru. Sebelum Anda memperbarui NGINX Ingress Controller, ganti rewrite-target dengan configuration-snippet.

Sebagai contoh, versi NGINX Ingress Controller Anda lebih awal dari 0.22.0 dan Anda menggunakan aturan Ingress berikut:

Lihat konten YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: rewrite
  namespace: default
spec:
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - path: /something/
        pathType: Prefix
        backend:
          service:
            name: http-svc
            port:
              number: 80
      - path: /something123/
        pathType: Prefix
        backend:
          service:
            name: http-svc-1
            port:
              number: 80

Modifikasi aturan Ingress berdasarkan konten berikut:

Lihat konten YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    # Gunakan anotasi rewrite. /something menunjukkan jalur, tidak termasuk garis miring (/) di akhir. 
    # Jika Ingress mencakup beberapa jalur, tambahkan jumlah anotasi rewrite yang sama. 
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite "(?i)/something(/|$)(.*)" /$2 break;
      rewrite "(?i)/something123(/|$)(.*)" /$2 break;
  name: rewrite
  namespace: default
spec:
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - path: /something/ # Pertahankan nilai yang sama dengan jalur Ingress di versi sebelumnya. 
        pathType: Prefix
        backend:
          service:
            name: http-svc
            port:
              number: 80
      - path: /something123/ # Pertahankan nilai yang sama dengan jalur Ingress di versi sebelumnya. 
        pathType: Prefix
        backend:
          service:
            name: http-svc-1
            port:
              number: 80

Anda dapat mulai memperbarui NGINX Ingress Controller setelah Anda memodifikasi aturan Ingress. Setelah pembaruan selesai, modifikasi aturan Ingress berdasarkan konten berikut:

YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    # Referensi konten yang cocok. 
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: rewrite
  namespace: default
spec:
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      # Gunakan grup penangkapan. 
      - path: /something(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: http-svc
            port:
              number: 80
      # Gunakan grup penangkapan. 
      - path: /something123(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: http-svc-1
            port:
              number: 80

Direktif root dan alias asli NGINX sudah tidak digunakan

Versi yang terpengaruh: versi lebih awal dari 1.2.1-aliyun.1.

Karena risiko keamanan yang terkait dengan direktif-direktif ini, versi baru NGINX Ingress Controller telah menghentikan penggunaannya. Sebelum memperbarui, pastikan konfigurasi Ingress Anda tidak mencakup direktif root atau alias yang ditambahkan ke bidang snippet.

Verifikasi

Verifikasi status NGINX Ingress controller dan beban kerja

Selain kemampuan pemantauan ACK, ACK juga memungkinkan Anda menggunakan Layanan Log Sederhana, Managed Service for Prometheus dashboard, dan log kontainer untuk memantau status NGINX Ingress Controller. Untuk mengaktifkan layanan di atas, lihat Analisis dan pantau log akses nginx-ingress-controller dan Gunakan Managed Service for Prometheus.

Layanan Log Sederhana

Anda dapat melihat log yang dikumpulkan oleh Layanan Log Sederhana di konsol ACK.

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

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Operations > Log Center.

  3. Klik tab Application Logs. Lalu, pilih nginx-ingress dari daftar drop-down Logstore dan klik Select Logstore.

    Catatan

    Jika nginx-ingress tidak ada, periksa apakah fitur pengumpulan log diaktifkan untuk NGINX Ingress Controller. Untuk informasi lebih lanjut, lihat Analisis dan pantau log akses nginx-ingress-controller.

Anda dapat melihat log akses aplikasi dalam daftar log atau tentukan pod dalam pernyataan kueri untuk melihat log akses pod tersebut. Misalnya, Anda dapat menentukan pod versi baru NGINX Ingress Controller dalam pernyataan kueri. Pastikan tingkat keberhasilan permintaan ke pod baru sesuai harapan dan jumlah permintaan yang dikirim ke pod baru sama dengan yang dikirim ke pod lama. Jika statistik pod baru secara signifikan berbeda dari pod lama, kembalikan pembaruan.

Catatan

Jika permintaan gagal mencocokkan aturan Ingress, kesalahan 404 akan dikembalikan. Secara default, kesalahan tersebut tidak dicatat dalam log akses.

Managed Service for Prometheus dashboard

Anda dapat menggunakan dashboard yang disediakan oleh Managed Service for Prometheus untuk memantau permintaan yang diproses oleh NGINX Ingress Controller.

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

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Operations > Prometheus Monitoring.

  3. Klik tab Network Monitoring, lalu klik tab Ingresses.

    Catatan

    Jika tab Ingresses tidak ditampilkan, periksa apakah pengumpulan metrik Prometheus dikonfigurasi untuk NGINX Ingress Controller. Untuk informasi lebih lanjut, lihat Gunakan Managed Service for Prometheus.

Anda dapat melihat metrik Ingress di dashboard atau melihat metrik pod tertentu. Pastikan tingkat keberhasilan permintaan ke pod baru normal dan jumlah permintaan yang dikirim ke pod baru sama dengan yang dikirim ke pod lama. Jika statistik pod baru secara signifikan berbeda dari pod lama, kembalikan pembaruan.

Catatan

Jika tidak ada host yang ditentukan dalam aturan Ingress, metrik Ingress tidak dikumpulkan. Host default diatur ke tanda bintang (*).

Log Pod

Anda dapat menggunakan kubectl untuk mencetak log pod untuk pemecahan masalah.

  • Jalankan perintah berikut untuk mencetak log pod yang berisi kesalahan NGINX dengan tingkat keparahan Warn, Error, dan Crit:

    kubectl logs -n kube-system <Nama Pod> | grep -e warn -e error -e crit
  • Jalankan perintah berikut untuk mencetak log pod yang berisi kesalahan kontroler:

    kubectl logs -n kube-system <Nama Pod> | grep "^[EF]"

Catatan Pembaruan

Saat Anda memperbarui NGINX Ingress Controller, perhatikan perubahan dalam pencocokan awalan. Pastikan konfigurasi jalur sesuai dengan URL permintaan. Jika tidak, kode status 404 akan dikembalikan untuk permintaan.

Masalah yang Diketahui

Perbedaan dalam pencocokan awalan mungkin ada di berbagai versi NGINX Ingress Controller, yang berpotensi menyebabkan masalah akses layanan.

  • Pada versi lebih awal dari 0.44, aturan pencocokan awalan bersifat longgar. Misalnya, awalan /aaa/bbb dapat cocok dengan /aaa/bbbbb dalam URL permintaan.

  • Setelah pembaruan, aturan pencocokan awalan menjadi lebih ketat dan hanya cocok dengan URL permintaan yang tepat. Dalam contoh di atas, /aaa/bbbbb dalam URL permintaan tidak cocok. Sebagai gantinya, kode status 404 dikembalikan.

Ruang Lingkup Dampak

NGINX Ingress Controller versi lebih awal dari v0.44 terpengaruh. Untuk informasi lebih lanjut tentang catatan rilis, lihat NGINX Ingress Controller. Untuk informasi terkait pull request, lihat kubernetes/ingress-nginx #6443.

Konfigurasi Contoh

Anda dapat menggunakan template YAML berikut untuk membandingkan konfigurasi NGINX yangdirender oleh NGINX Ingress Controller versi berbeda, seperti 0.22.0.5-552e0db-aliyun (versi lebih awal) dan 1.2.1-aliyun.1+ (versi lebih baru).

  apiVersion: extensions/v1beta1
  kind: Ingress
  metadata:
    labels:
      ingress-controller: nginx
    name: test
    namespace: default
  spec:
    ingressClassName: nginx
    rules:
    - host: www.example.com
      http:
        paths:
        - backend:
            service:
              name: api-resources-svc
              port:
                number: 8080
          path: /api/resource
  • Dalam versi lebih awal

    Dalam versi seperti 0.22.0.5-552e0db-aliyun, konfigurasi NGINX adalah:

    Location /api/resource   # Jalur tidak berakhir dengan garis miring (/). 

    Dalam konfigurasi di atas, jalur /api/resource mengizinkan akses dari http://www.example.com/api/resource dalam versi NGINX yang lebih lama.

    Catatan

    Jalur permintaan sebenarnya adalah resources, bukan resource.

  • Dalam versi lebih baru

    Jika NGINX Ingress Controller diperbarui ke versi lebih baru seperti 1.2.1-aliyun.1+, konfigurasi NGINX adalah:

    Location /api/resource/  # Jalur berakhir dengan garis miring (/).
    {
    }
    ...
    Location = /api/resource  # Lokasi lain ditambahkan untuk pencocokan tepat.
    {
    }

    Kode status HTTP 404 dikembalikan jika Anda mencoba mengakses http://www.example.com/api/resources.

FAQ

Bisakah saya memperbarui NGINX Ingress controller ke versi tertentu? Setelah pembaruan berhasil, bisakah saya kembali ke versi sebelumnya?

Anda tidak dapat memperbarui NGINX Ingress Controller ke versi tertentu. NGINX Ingress Controller diperbarui secara bertahap dan hanya dapat diperbarui ke versi terbaru. Setelah pembaruan selesai, pembaruan tidak dapat dikembalikan.

Apa yang harus saya lakukan jika pod gagal dibuat selama fase verifikasi dan rilis?

Penyebab

Solusi

Penyimpangan terjadi saat ACK memulai pod untuk versi baru NGINX Ingress Controller. Misalnya, ACK gagal memuat konfigurasi pod. Akibatnya, pod tetap dalam keadaan crash.

Gunakan metode di atas untuk mencetak log pod dan memecahkan masalah. Untuk informasi lebih lanjut, lihat Pemecahan Masalah NGINX Ingress Controller.

Kegagalan penjadwalan pod biasanya terjadi saat Anda menerapkan NGINX Ingress Controller pada node khusus. Saat ACK membuat pod untuk versi baru NGINX Ingress Controller, ACK mungkin gagal menemukan node untuk pod karena batasan sumber daya dan pemilih node.

Tambahkan node ke kluster Anda atau kurangi jumlah pod untuk NGINX Ingress Controller selama jam sepi sebelum Anda memperbarui komponen sehingga pod baru dapat dijadwalkan ke node.

Apa yang harus saya lakukan jika template Deployment gagal melewati pemeriksaan?

Jika template Deployment gagal melewati pemeriksaan, klik hyperlink di sebelah kanan Cause untuk pergi ke halaman Perbandingan Komponen. Anda dapat melihat parameter komponen yang gagal melewati pemeriksaan.

  1. Di halaman NGINX Ingress Controller Update, klik View Details di bawah Precheck.

  2. Di bagian Cluster Components Result dari halaman Report, klik hasil dalam kotak merah yang ditandai dengan ①. Di tab Result, klik Deployment Template. Lalu, klik hyperlink di sebelah kanan Cause yang ditandai dengan ②.

    image..png

  3. Di halaman Component Comparison, Anda dapat melihat parameter komponen yang gagal melewati pemeriksaan.

    Di halaman Perbandingan Komponen, template komponen standar ditampilkan di sebelah kiri dan template komponen saat ini ditampilkan di sebelah kanan. Halaman Perbandingan Komponen menampilkan perbedaan antara template, termasuk parameter yang kompatibel dan tidak kompatibel, serta mencantumkan perbedaan di bagian bawah halaman. Halaman Perbandingan Komponen juga menunjukkan apakah komponen melewati pemeriksaan dan menampilkan parameter yang menyebabkan perbedaan.

    Dalam gambar berikut, perbedaan ditemukan antara template dan parameter yang menyebabkan perbedaan adalah .spec.template.spec.containers.(nginx-ingress-controller).args. nginx-ingress-controller adalah nama kontainer tempat parameter tersebut berada. Hasil perbandingan menunjukkan bahwa --v=2 ditentukan dalam parameter args di template standar, sedangkan --v=3 ditentukan dalam parameter args di template saat ini. Anda harus memodifikasi parameter args sebelum memperbarui komponen.

    image..png

  4. Modifikasi parameter yang menyebabkan perbedaan.

    Di panel navigasi kiri, pilih Workloads > Deployments. Di halaman Deployment, temukan NGINX Ingress controller dan pilih More > View in YAML di kolom Tindakan. Di kotak dialog Edit YAML, ubah nilai parameter args dari --v=3 menjadi --v=2.

  5. Setelah Anda memodifikasi parameter args, Anda dapat menyegarkan halaman Perbandingan Komponen untuk memeriksa apakah perbedaan telah diperbaiki. Jika The component passes the comparison check. ditampilkan di bagian bawah halaman, template Deployment melewati pemeriksaan.

    Catatan

    Sistem memulai ulang pod NGINX Ingress Controller untuk menerapkan modifikasi pada Deployment. Kami sarankan Anda melakukan operasi terkait selama jam sepi.

    image..png

Referensi