全部产品
Search
文档中心

Container Service for Kubernetes:Kamus Konfigurasi NGINX Ingress

更新时间:Jun 26, 2025

Anda dapat mengonfigurasi NGINX Ingress dengan menyesuaikan ConfigMap atau anotasi dari NGINX Ingress. Topik ini menjelaskan cara mengonfigurasi anotasi umum dan bidang ConfigMap yang digunakan oleh NGINX Ingress.

Daftar isi

Sumber daya

Item konfigurasi

ConfigMap

Konfigurasi default ConfigMap

Deskripsi bidang

Anotasi

Algoritma penyeimbangan beban

Afinasi cookie

Pengalihan

Penulisan ulang

Pembatasan laju

Fallback

Rilis canary

Batas waktu

Berbagi sumber daya lintas domain (CORS)

Kebijakan pengulangan

Kontrol akses berbasis alamat IP

Pemantulan trafik

Perlindungan keamanan

Otentikasi keamanan

Konfigurasi default ConfigMap

Untuk memodifikasi konfigurasi ConfigMap yang digunakan oleh NGINX Ingress, jalankan perintah kubectl edit cm -n kube-system nginx-configuration. Blok kode sampel berikut menyediakan konfigurasi default dari ConfigMap. Untuk informasi lebih lanjut, lihat Dokumentasi Resmi.

apiVersion: v1
kind: ConfigMap
metadata:
 name: nginx-configuration
 namespace: <Namespace>  # Nilai default: kube-system.
 labels:
   app: ingress-nginx
data:
   log-format-upstream: '$remote_addr - [$remote_addr] - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status $req_id $host [$proxy_alternative_upstream_name]'
   proxy-body-size: 20m
   proxy-connect-timeout: "10"
   max-worker-connections: "65536"
   enable-underscores-in-headers: "true"
   reuse-port: "true"
   worker-cpu-affinity: "auto"
   server-tokens: "false"
   ssl-redirect: "false"
   allow-backend-server-header: "true"
   ignore-invalid-headers: "true"
   generate-request-id: "true"
   upstream-keepalive-timeout: "900"

Tabel berikut menjelaskan bidang dalam blok kode sebelumnya.

Bidang

Deskripsi

log-format-upstream

Format log. Jika Anda memodifikasi bidang ini, Anda harus memperbarui konfigurasi di kube-system/k8s-nginx-ingress AliyunLogConfig dan format log yang dikumpulkan oleh Layanan Log Sederhana. Untuk informasi lebih lanjut, lihat Mendiagnosis log akses pod controller NGINX Ingress di Layanan Log Sederhana.

proxy-body-size

Ukuran maksimum badan permintaan klien. Untuk informasi lebih lanjut, lihat client_max_body_size.

proxy-connect-timeout

Periode timeout untuk membangun koneksi dengan server proxy. Jika Anda menetapkan bidang ini, Anda juga harus menetapkan bidang grpc_connect_timeout untuk koneksi gRPC. Nilai maksimum: 75. Unit: detik. Saat menetapkan nilai, Anda tidak perlu menentukan unit.

max-worker-connections

Jumlah maksimum koneksi simultan yang dapat dibuka oleh proses pekerja. Jika Anda menetapkan nilai menjadi 0, nilai dari max-worker-open-files digunakan.

enable-underscores-in-headers

Menentukan apakah mendukung header yang mencakup garis bawah (_).

reuse-port

Membuat soket mendengarkan terpisah untuk setiap proses pekerja untuk memungkinkan sistem mendistribusikan koneksi masuk antara proses pekerja. Bidang ini menggunakan opsi soket SO_REUSEPORT.

worker-cpu-affinity

Mengikat otomatis proses pekerja ke inti CPU yang tersedia untuk mengoptimalkan kinerja proses. Bidang ini cocok untuk skenario komputasi berperforma tinggi.

server-tokens

Mengirim header Server NGINX dalam respons dan menampilkan versi NGINX pada halaman kesalahan. Untuk menonaktifkan bidang ini, atur nilainya menjadi false.

ssl-redirect

Jika server memiliki sertifikat TLS, HTTPS secara paksa digunakan oleh konfigurasi global dan dilakukan pengalihan 301.

allow-backend-server-header

Menentukan apakah akan mengembalikan header server, bukan string NGINX genetik, dari backend.

ignore-invalid-headers

Menentukan apakah mengabaikan bidang header yang tidak valid.

generate-request-id

Jika tidak ada X-Request-ID dalam permintaan, nilai acak akan dihasilkan.

upstream-keepalive-timeout

Periode timeout dari koneksi keep-alive idle ke server upstream. Bidang ini sesuai dengan direktif keepalive_timeout dari NGINX. Periode timeout default adalah 60 detik.

Ingress anotasi

Saat menggunakan controller NGINX Ingress, Anda dapat memodifikasi konfigurasi controller untuk memenuhi kebutuhan bisnis Anda. Untuk mengontrol perilaku NGINX, Anda dapat menambahkan anotasi ke NGINX Ingress. Tabel berikut menjelaskan anotasi NGINX Ingress umum. Untuk informasi lebih lanjut, lihat Anotasi NGINX Ingress.

Algoritma penyeimbangan beban

NGINX Ingress menyediakan berbagai algoritma penyeimbangan beban untuk mengoptimalkan distribusi lalu lintas di antara layanan backend. Anda dapat memilih algoritma penyeimbangan beban berdasarkan fitur dan persyaratan aplikasi Anda.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/load-balance

Menentukan algoritma penyeimbangan beban untuk layanan backend. Nilai valid:

  • round_robin (default): algoritma round-robin, yang merupakan algoritma penyeimbangan beban umum yang cocok dalam sebagian besar kasus.

  • ewma: algoritma Peak Exponential Weighted Moving Average (Peak EWMA), yang cocok untuk aplikasi yang memerlukan respons cepat.

nginx.ingress.kubernetes.io/upstream-hash-by

Penghashan konsisten adalah algoritma hashing khusus yang menggunakan ruang hash melingkar daripada ruang hash linier biasa. Saat Anda menambahkan atau menghapus node, Anda hanya perlu memigrasikan rute tertentu searah jarum jam. Ini membantu Anda mengurangi rerouting dan menerapkan penyeimbangan beban.

Blok YAML sampel berikut memberikan contoh tentang cara mengonfigurasi penghashan konsisten untuk penyeimbangan beban.

Kluster yang menjalankan Kubernetes 1.22 atau lebih baru

apiVersion: networking.k8s.io/v1
kind: Ingress 
metadata: 
  name: ingress-test
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"               # Gunakan Uniform Resource Identifier (URI) dari permintaan untuk hashing. 
    nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri$host"          # Gunakan URI dan nama domain dari permintaan untuk hashing. 
    nginx.ingress.kubernetes.io/upstream-hash-by: "${request_uri}-text-value"  # Gunakan URI dari permintaan dan nilai teks kustom untuk hashing. 
spec:
  rules:
    - host: ''
      http:
        paths:
          - path: '/'
            backend:
              service:
                name: <YOUR_SERVICE_NAME>  # Ganti nilai dengan nama Service aktual.
                port:
                  number: <YOUR_SERVICE_PORT>  # Ganti nilai dengan port Service aktual.
            property:
              ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
            pathType: ImplementationSpecific
  ingressClassName: nginx

Kluster yang menjalankan versi Kubernetes lebih lama dari 1.22

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-test
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"               # Gunakan URI dari permintaan untuk hashing. 
    nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri$host"          # Gunakan URI dan nama domain dari permintaan untuk hashing. 
    nginx.ingress.kubernetes.io/upstream-hash-by: "${request_uri}-text-value"  # Gunakan URI dari permintaan dan nilai teks kustom untuk hashing. 
spec:
  rules:
    - host: ''
      http:
        paths:
          - path: '/'
            backend:
              serviceName: <YOUR_SERVICE_NAME>  # Ganti nilai dengan nama Service aktual.
              servicePort: <YOUR_SERVICE_PORT>  # Ganti nilai dengan port Service aktual.

Afinasi cookie

Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi afinasi sesi berbasis cookie.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/affinity

Tipe afinitas. Nilai default: cookie. Hanya tipe cookie yang didukung.

nginx.ingress.kubernetes.io/affinity-mode

Mode afinitas. Nilai valid:

  • balanced: mendistribusikan permintaan di antara beberapa instance untuk menerapkan penyeimbangan beban.

  • persistent: terus menerus meneruskan permintaan dari klien ke instance backend yang sama untuk memastikan konsistensi data dan menerapkan persistensi sesi.

Nilai default: balanced.

nginx.ingress.kubernetes.io/session-cookie-name

Nilai cookie yang digunakan sebagai kunci hash.

nginx.ingress.kubernetes.io/session-cookie-path

Path yang ditetapkan pada cookie. Nilai default: /. Jika Anda menetapkan nginx.ingress.kubernetes.io/use-regex menjadi true, path cookie sesi tidak mendukung ekspresi reguler.

nginx.ingress.kubernetes.io/session-cookie-max-age

Periode validitas cookie yang dihasilkan. Unit: detik.

nginx.ingress.kubernetes.io/session-cookie-expires

Jumlah waktu yang berlalu antara pembuatan cookie dan kedaluwarsa cookie.

Blok YAML sampel berikut memberikan contoh tentang cara mengonfigurasi afinasi berbasis cookie:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-test
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
spec:
  ingressClassName: nginx
  rules:
  - host: stickyingress.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: http-svc
            port: 
              number: 80

Pengalihan

Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi pengalihan untuk NGINX Ingress.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/ssl-redirect

Mengalihkan permintaan HTTP ke HTTPS. Untuk informasi lebih lanjut, lihat Pengalihan HTTP-to-HTTPS.

nginx.ingress.kubernetes.io/force-ssl-redirect

Mengalihkan permintaan HTTP ke HTTPS.

  • true: mengalihkan ke permintaan HTTPS.

  • false: tidak mengalihkan ke permintaan HTTPS.

Nilai default: false.

nginx.ingress.kubernetes.io/permanent-redirect

URL tujuan untuk pengalihan permanen. URL tujuan harus mencakup skema, yaitu HTTP atau HTTPS.

nginx.ingress.kubernetes.io/permanent-redirect-code

Kode status HTTP untuk pengalihan permanen. Nilai default: 301.

nginx.ingress.kubernetes.io/temporal-redirect

URL tujuan untuk pengalihan sementara. URL tujuan harus mencakup skema, yaitu HTTP atau HTTPS.

nginx.ingress.kubernetes.io/app-root

Menentukan jalur root aplikasi tujuan untuk pengalihan. Anotasi ini digunakan untuk mengalihkan permintaan dari / ke jalur yang ditentukan.

Konfigurasi Ingress sampel berikut menunjukkan cara menentukan URL tujuan untuk pengalihan permanen. Setelah Anda menerapkan aturan Ingress, permintaan ke foo.com akan dialihkan ke bar.com.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/permanent-redirect: "https://bar.com"
spec:
  ingressClassName: nginx
  rules:
  - host: foo.com
    http:
      paths:
      - path: "/"
        pathType: ImplementationSpecific
        backend:
         service:
            name: httpbin
            port:
              number: 8000

Penulisan ulang

Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi penulisan ulang untuk NGINX Ingress.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/rewrite-target

Menentukan jalur tujuan untuk operasi penulisan ulang. Grup tangkapan didukung. Untuk informasi lebih lanjut tentang Ingress, lihat Konfigurasikan pengalihan URL.

nginx.ingress.kubernetes.io/upstream-vhost

Menentukan nama host tujuan untuk operasi penulisan ulang.

Konfigurasi Ingress sampel berikut menunjukkan cara mengonfigurasi penulisan ulang host. Setelah Anda menerapkan aturan Ingress, sistem akan menulis ulang nama host dari permintaan ke example.com/test sebagai test.com/test.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
  name: demo
spec:
  ingressClassName: nginx
  rules:
    - host: example.com
      http:
        paths:
          - backend:
              service:
                name: demo-service
                port: 
                  number: 80
            path: /test
            pathType: ImplementationSpecific

Pembatasan laju

Untuk memastikan stabilitas layanan, Anda dapat mengonfigurasi kebijakan pembatasan laju untuk mengontrol frekuensi dan konkurensi permintaan yang dikirim dari setiap alamat IP klien. Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi pembatasan laju.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/limit-connections

Jumlah maksimum koneksi simultan yang dapat dibuat oleh alamat IP. Jika jumlah koneksi simultan yang dibuat oleh alamat IP melebihi batas atas, kesalahan 503 akan dikembalikan.

nginx.ingress.kubernetes.io/limit-rate

Ukuran maksimum (diukur dalam KB) data yang dapat ditransmisikan melalui setiap koneksi per detik. Jika Anda menetapkan nilai menjadi 0, pembatasan laju untuk transmisi data dinonaktifkan. Untuk mengaktifkan pembatasan laju untuk transmisi data, Anda harus terlebih dahulu mengaktifkan penyanggaan proxy.

nginx.ingress.kubernetes.io/limit-whitelist

Rentang alamat IP klien yang ingin Anda kecualikan dari pembatasan laju. Tetapkan nilainya menjadi daftar blok CIDR yang dipisahkan koma.

nginx.ingress.kubernetes.io/limit-rpm

Jumlah maksimum permintaan yang dapat diterima dari alamat IP per menit. Batas laju burst sama dengan batas laju dikalikan dengan pengali. Pengali default adalah 5. Jika jumlah permintaan yang diterima dari alamat IP per menit melebihi batas atas, kesalahan limit-req-status-code akan dikembalikan. Secara default, kesalahan 503 dikembalikan.

nginx.ingress.kubernetes.io/limit-rps

Jumlah maksimum permintaan yang dapat diterima dari alamat IP per detik. Batas laju burst sama dengan batas laju dikalikan dengan pengali. Pengali default adalah 5. Jika jumlah permintaan yang diterima dari alamat IP per detik melebihi batas atas, kesalahan limit-req-status-code akan dikembalikan. Secara default, kesalahan 503 dikembalikan.

nginx.ingress.kubernetes.io/limit-burst-multiplier

Pengali yang digunakan untuk menghitung batas laju permintaan burst. Nilai default: 5. Anda dapat menggunakan anotasi ini untuk menentukan pengali kustom.

Konfigurasi Ingress sampel berikut menunjukkan cara mengonfigurasi pembatasan laju:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/limit-rate: 100K
    nginx.ingress.kubernetes.io/limit-whitelist: 10.1.10.100
    nginx.ingress.kubernetes.io/limit-rps: 1
    nginx.ingress.kubernetes.io/limit-rpm: 30
spec:
  rules:
  - host: iphone.example.com 
    http:
      paths:
      - path: 
        backend:
          serviceName: iphone-backend-svc
          servicePort: 80

Fallback

Untuk memastikan ketersediaan tinggi dan stabilitas layanan Anda, NGINX Ingress menyediakan konfigurasi pemulihan bencana (fallback) untuk memungkinkan Anda menyelesaikan masalah seperti ketidaktersediaan node dan kesalahan tertentu. Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi pemulihan bencana.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/default-backend

Layanan fallback. Jika tidak ada node yang tersedia untuk layanan yang didefinisikan dalam aturan Ingress, permintaan secara otomatis diteruskan ke layanan fallback.

Anda dapat mengonfigurasi pengaturan global untuk controller NGINX Ingress di halaman Add-ons di konsol ACK.

nginx.ingress.kubernetes.io/custom-http-errors

Anotasi ini bekerja sama dengan anotasi nginx.ingress.kubernetes.io/default-backend. Jika kode status HTTP yang ditentukan dikembalikan oleh layanan backend, permintaan asli diteruskan kembali ke layanan fallback.

Penting

Saat permintaan diteruskan ke layanan fallback, jalur permintaan ditulis ulang sebagai garis miring (/). Perilaku ini konsisten dengan perilaku yang diimplementasikan di ingress-nginx.

Anda dapat mengonfigurasi anotasi ini dengan cara yang sama seperti Anda mengonfigurasi bidang custom-http-errors di ConfigMap. Anotasi ini digunakan untuk menentukan bidang proxy-intercept-errors untuk NGINX dan hanya berlaku untuk jalur NGINX yang terkait dengan Ingress.

Anda dapat menentukan kode kesalahan yang berbeda untuk layanan backend dari Ingress yang berbeda. Jika Anda menentukan custom-http-errors dalam konfigurasi global dan anotasi ini, kode kesalahan dalam anotasi ini akan menimpa kode kesalahan dalam konfigurasi global dan berlaku untuk nama host dan jalur di Ingress yang sesuai.

Rilis canary

Rilis canary dan penerapan biru-hijau banyak digunakan untuk memastikan peningkatan aplikasi yang mulus dan ketersediaan tinggi. Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi kontrol lalu lintas fleksibel untuk memenuhi berbagai persyaratan untuk rilis layanan. Untuk informasi lebih lanjut, lihat Gunakan Controller NGINX Ingress untuk Menerapkan Rilis Canary dan Biru-Hijau.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/canary

Menentukan apakah akan mengaktifkan fitur rilis canary.

nginx.ingress.kubernetes.io/canary-by-header

Menentukan kunci header permintaan yang digunakan untuk pemisahan lalu lintas.

nginx.ingress.kubernetes.io/canary-by-header-value

Menentukan nilai header permintaan yang digunakan untuk pemisahan lalu lintas. Kecocokan tepat didukung untuk nilai header permintaan.

nginx.ingress.kubernetes.io/canary-by-header-pattern

Menentukan nilai header permintaan yang digunakan untuk pemisahan lalu lintas. Kecocokan ekspresi reguler didukung untuk nilai header permintaan.

nginx.ingress.kubernetes.io/canary-by-cookie

Menentukan kunci cookie permintaan yang digunakan untuk pemisahan lalu lintas.

nginx.ingress.kubernetes.io/canary-weight

Menentukan bobot yang digunakan untuk pemisahan lalu lintas.

nginx.ingress.kubernetes.io/canary-weight-total

Menentukan bobot total.

Batas waktu

Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi batas waktu untuk NGINX Ingress, termasuk pengaturan batas waktu global dan pengaturan batas waktu kustom untuk sumber daya tertentu. Pengaturan batas waktu yang tepat dapat mengoptimalkan kinerja dan keandalan koneksi.

  • Pengaturan Batas Waktu Global

    Anda dapat menjalankan perintah kubectl edit cm -n kube-system nginx-configuration untuk mengonfigurasi bidang berikut untuk pengaturan batas waktu global.

    Opsi konfigurasi

    Deskripsi

    Nilai default

    proxy-connect-timeout

    Menetapkan periode timeout untuk membangun koneksi dengan server proxy. Secara umum, nilainya tidak boleh melebihi 75 detik.

    5 detik

    proxy-read-timeout

    Menetapkan periode timeout untuk membaca respons dari server proxy. Periode timeout ini berlaku antara dua operasi baca berturut-turut, bukan untuk transmisi seluruh respons.

    60 detik

    proxy-send-timeout

    Menetapkan periode timeout untuk mengirim permintaan ke server proxy. Periode timeout ini berlaku antara dua operasi tulis berturut-turut, bukan untuk transmisi seluruh permintaan.

    60 detik

    proxy-stream-next-upstream-timeout

    Membatasi jumlah waktu yang diizinkan untuk meneruskan koneksi ke server berikutnya. Jika Anda menetapkan nilainya menjadi 0, tidak ada batasan yang diberlakukan.

    600 detik

    proxy-stream-timeout

    Menetapkan periode timeout antara dua operasi baca atau tulis berturut-turut pada koneksi klien atau server proxy. Jika tidak ada data yang ditransmisikan dalam periode tersebut, koneksi ditutup.

    600 detik

    upstream-keepalive-timeout

    Menetapkan periode timeout untuk menjaga koneksi idle tetap terbuka dengan server upstream.

    • Edition open source: 60 detik

    • Edition ACK: 900 detik

    worker-shutdown-timeout

    Menetapkan periode timeout untuk shutdown yang aman.

    240 detik

    proxy-protocol-header-timeout

    Menetapkan periode timeout untuk menerima header protokol proxy. Nilai default mencegah handler Transport Layer Security (TLS) passthrough menunggu tanpa batas untuk koneksi yang rusak.

    5 detik

    ssl-session-timeout

    Menetapkan periode validitas untuk parameter sesi SSL di cache sesi. Waktu kedaluwarsa bergantung pada waktu pembuatan. Setiap cache sesi menempati sekitar 0,25 MB ruang.

    10 menit

    client-body-timeout

    Menetapkan periode timeout untuk membaca badan permintaan klien.

    60 detik

    client-header-timeout

    Menetapkan periode timeout untuk membaca header permintaan klien.

    60 detik

  • Pengaturan Batas Waktu Kustom pada Sumber Daya Tertentu

    Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi pengaturan batas waktu untuk sumber daya tertentu.

    Anotasi

    Deskripsi

    nginx.ingress.kubernetes.io/proxy-connect-timeout

    Menetapkan periode timeout untuk membangun koneksi dengan server proxy.

    nginx.ingress.kubernetes.io/proxy-send-timeout

    Menetapkan periode timeout untuk mengirim data ke server proxy.

    nginx.ingress.kubernetes.io/proxy-read-timeout

    Menetapkan periode timeout untuk membaca data dari server proxy.

    nginx.ingress.kubernetes.io/proxy-request-buffering

    Menentukan apakah akan mengaktifkan fitur penyanggaan permintaan. Nilai valid:

    • on: mengaktifkan penyanggaan permintaan. Setelah penyanggaan permintaan diaktifkan, data permintaan hanya diteruskan ke workload backend setelah sepenuhnya diterima. Permintaan yang dikodekan chunked HTTP/1.1 tidak tunduk pada pengaturan ini dan selalu disimpan dalam buffer.

    • off: menonaktifkan penyanggaan permintaan. Setelah penyanggaan permintaan dinonaktifkan, jika terjadi kesalahan selama transmisi data, tidak ada workload yang dipilih untuk percobaan ulang.

CORS

Setelah Anda mengonfigurasi berbagi sumber daya lintas domain (CORS) untuk controller NGINX Ingress, Anda dapat mengizinkan sumber daya tertentu diakses lintas domain. Untuk informasi lebih lanjut, lihat Konfigurasikan CORS pada NGINX Ingress.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/enable-cors

Menentukan apakah akan mengaktifkan CORS.

nginx.ingress.kubernetes.io/cors-allow-origin

Menentukan situs pihak ketiga yang diizinkan untuk CORS.

nginx.ingress.kubernetes.io/cors-allow-methods

Menentukan metode permintaan yang diizinkan untuk CORS. Metode permintaan yang diizinkan mencakup GET, POST, dan PUT.

nginx.ingress.kubernetes.io/cors-allow-headers

Menentukan header permintaan yang diizinkan untuk CORS.

nginx.ingress.kubernetes.io/cors-expose-headers

Menentukan header respons yang diizinkan untuk diekspos ke browser.

nginx.ingress.kubernetes.io/cors-allow-credentials

Menentukan apakah akan mengizinkan kredensial dibawa dalam permintaan CORS.

nginx.ingress.kubernetes.io/cors-max-age

Menentukan durasi maksimum di mana hasil pra-pemeriksaan disimpan dalam cache.

Kebijakan pengulangan

Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi kebijakan pengulangan. Pengulangan dapat meningkatkan ketersediaan dan toleransi kesalahan aplikasi Anda.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/proxy-next-upstream-tries

Menetapkan jumlah percobaan ulang yang diizinkan jika kondisi pengulangan terpenuhi. Nilai default: 3.

nginx.ingress.kubernetes.io/proxy-next-upstream-timeout

Menentukan periode timeout untuk permintaan ulang. Unit: detik. Secara default, tidak ada periode timeout yang dikonfigurasi.

nginx.ingress.kubernetes.io/proxy-next-upstream

Mengonfigurasi kebijakan pengulangan atau kondisi pengulangan. Pisahkan beberapa item dengan spasi. Misalnya, Anda dapat menggunakan http_500 dan http_502. Kebijakan berikut didukung:

  • error: mengembalikan respons saat terjadi kegagalan koneksi.

  • timeout: mengembalikan respons saat terjadi kesalahan timeout.

  • invalid_response: mengembalikan respons saat status kode yang tidak valid dikenali.

  • http_xxx: xxx dapat diganti dengan kode status. Misalnya, jika Anda menyetel xxx menjadi 500, workload berikutnya dipilih ketika upstream mengembalikan kode status 500. Kode status yang didukung adalah 500, 502, 503, 504, 403, 404, dan 429.

  • off: menonaktifkan mekanisme pengulangan dan mengembalikan respons tanpa memandang kesalahan yang terjadi.

Kontrol akses berbasis alamat IP

Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi daftar putih dan daftar hitam IP untuk NGINX Ingress.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/whitelist-source-range

Daftar putih IP. Alamat IP dan blok CIDR didukung. Pisahkan alamat IP atau blok CIDR dengan koma (,).

nginx.ingress.kubernetes.io/denylist-source-range

Daftar hitam IP. Alamat IP dan blok CIDR didukung. Pisahkan alamat IP atau blok CIDR dengan koma (,).

Konfigurasi Ingress sampel berikut menunjukkan cara mengonfigurasi daftar putih IP:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/whitelist-source-range: 10.1.10.2
spec:
  rules:
  - host: iphone.exmaple.com 
    http:
      paths:
      - path: 
        backend:
          serviceName: iphone-example-svc
          servicePort: 80

Untuk mengonfigurasi pengaturan global, jalankan perintah kubectl edit cm -n kube-system nginx-configuration dan ubah bidang whitelist-source-range.

Pemantulan trafik

Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi pemantulan trafik. Pemantulan trafik membantu Anda mendeteksi risiko potensial tanpa mengganggu layanan Anda di lingkungan produksi dan meningkatkan stabilitas aplikasi. Untuk informasi lebih lanjut, lihat Gunakan Controller Ingress untuk Memantulkan Lalu Lintas Jaringan.

Anotasi

Deskripsi

nginx.ingress.kubernetes.io/mirror-target

Alamat IP tujuan.

Anda dapat menentukan alamat IP Service atau alamat IP eksternal. Misalnya, Anda dapat menentukan https://test.env.com/$request_uri. $request_uri digunakan untuk menambahkan URI dari permintaan ke akhir URL tujuan.

nginx.ingress.kubernetes.io/mirror-request-body

Menentukan apakah akan memantulkan badan permintaan.

nginx.ingress.kubernetes.io/mirror-host

Informasi host yang digunakan untuk memantulkan trafik.

Perlindungan keamanan

Anda dapat mengonfigurasi perlindungan keamanan untuk mengamankan komunikasi antara klien dan gateway. Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengenkripsi komunikasi. Untuk informasi lebih lanjut, lihat Enkripsi Controller NGINX Ingress.

  • Komunikasi Terenkripsi Antara Klien dan Gateway

    Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengenkripsi komunikasi antara klien dan gateway.

    Anotasi

    Ruang lingkup

    Deskripsi

    nginx.ingress.kubernetes.io/ssl-cipher

    Nama domain

    Menentukan paket cipher TLS. Anda dapat menentukan beberapa paket cipher TLS, yang dipisahkan oleh koma (,). Parameter ini hanya berlaku jika versi TLS dari 1.0 hingga 1.2 digunakan selama jabat tangan TLS. Paket cipher default:

    • ECDHE-ECDSA-AES128-GCM-SHA256

    • ECDHE-RSA-AES128-GCM-SHA256

    • ECDHE-ECDSA-AES128-SHA

    • ECDHE-RSA-AES128-SHA

    • AES128-GCM-SHA256

    • AES128-SHA

    • ECDHE-ECDSA-AES256-GCM-SHA384

    • ECDHE-RSA-AES256-GCM-SHA384

    • ECDHE-ECDSA-AES256-SHA

    • ECDHE-RSA-AES256-SHA

    • AES256-GCM-SHA384

    • AES256-SHA

    nginx.ingress.kubernetes.io/auth-tls-secret

    Nama domain

    Menentukan sertifikat otoritas sertifikat (CA) yang digunakan oleh gateway untuk memverifikasi sertifikat yang diberikan oleh klien selama jabat tangan mutual TLS (mTLS). Anotasi ini cocok untuk skenario di mana gateway perlu memverifikasi identitas klien.

    Secret yang sesuai harus mencakup file bernama ca.crt. File ca.crt berisi rantai CA lengkap.

  • Komunikasi Terenkripsi Antara Gateway dan Layanan Backend

    Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengenkripsi komunikasi antara layanan backend dan gateway.

    Anotasi

    Ruang lingkup

    Deskripsi

    nginx.ingress.kubernetes.io/proxy-ssl-secret

    Layanan

    Menentukan sertifikat klien yang digunakan oleh gateway. Sertifikat klien digunakan oleh layanan backend untuk mengotentikasi gateway.

    Sertifikat yang ditentukan harus dalam format Privacy Enhanced Mail (PEM).

    • Secret harus mencakup file berikut:

      • tls.crt: sertifikat klien.

      • tls.key: kunci privat dari sertifikat klien.

      • ca.crt: sertifikat CA tepercaya yang digunakan untuk mengotentikasi server HTTPS proxy.

    • Nilainya harus dalam format "namespace/secretName".

    nginx.ingress.kubernetes.io/proxy-ssl-name

    Layanan

    Menentukan Server Name Indication (SNI) yang digunakan selama jabat tangan TLS.

    nginx.ingress.kubernetes.io/proxy-ssl-server-name

    Layanan

    Menentukan apakah akan mengaktifkan atau menonaktifkan SNI yang digunakan selama jabat tangan TLS.

Otentikasi keamanan

Tabel berikut menjelaskan anotasi yang dapat Anda gunakan untuk mengonfigurasi Otentikasi Dasar untuk memungkinkan hanya pengguna yang berwenang mengakses aplikasi Anda.

Anotasi

Ruang lingkup

Deskripsi

nginx.ingress.kubernetes.io/auth-type

Ingress

Tipe otentikasi. Tetapkan nilainya menjadi basic.

nginx.ingress.kubernetes.io/auth-secret

Ingress

Menentukan nama Secret. Nama tersebut harus dalam format namespace/secretName. Nama Secret mencakup nama pengguna dan kata sandi yang digunakan untuk mengakses rute yang didefinisikan dalam aturan Ingress.

nginx.ingress.kubernetes.io/auth-secret-type

Ingress

Menentukan format konten Secret. Nilai valid:

  • auth-file: Kunci data adalah auth, dan nilai data adalah nama pengguna dan kata sandi. Informasi setiap akun menempati baris terpisah.

  • auth-map: Kunci data adalah nama pengguna dan nilai data adalah kata sandi.

nginx.ingress.kubernetes.io/auth-realm

Ingress

Menentukan realm otentikasi. Nama pengguna dan kata sandi dibagikan dalam realm otentikasi.

Prosedur:

  1. Gunakan alat baris perintah htpasswd untuk menghasilkan file kata sandi.

    htpasswd -c auth joker

    Lihat file kata sandi.

    cat auth 
    # Keluaran yang diharapkan: joker:$apr1$R.G4krs/$hh0mX8xe4A3lYKMjvlVs1/
  2. Buat Secret berdasarkan file kata sandi:

    kubectl create secret generic basic-auth --from-file=auth 
  3. Aktifkan Otentikasi Dasar dalam konfigurasi Ingress. Contoh:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-nginx
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/auth-type: basic
        nginx.ingress.kubernetes.io/auth-secret: basic-auth
    spec:
      rules:
      - host: iphone.example.com 
        http:
          paths:
          - path: 
            backend:
              serviceName: iphone-backend-svc
              servicePort: 80