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 | |
Anotasi | |
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 |
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 |
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 |
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 |
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 |
upstream-keepalive-timeout | Periode timeout dari koneksi keep-alive idle ke server upstream. Bidang ini sesuai dengan direktif |
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:
|
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: nginxKluster 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: |
nginx.ingress.kubernetes.io/affinity-mode | Mode afinitas. Nilai valid:
Nilai default: |
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: |
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: 80Pengalihan
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.
Nilai default: |
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 |
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: 8000Penulisan 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: ImplementationSpecificPembatasan 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: 80Fallback
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 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 Anda dapat menentukan kode kesalahan yang berbeda untuk layanan backend dari Ingress yang berbeda. Jika Anda menentukan |
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-configurationuntuk mengonfigurasi bidang berikut untuk pengaturan batas waktu global.Opsi konfigurasi
Deskripsi
Nilai default
proxy-connect-timeoutMenetapkan periode timeout untuk membangun koneksi dengan server proxy. Secara umum, nilainya tidak boleh melebihi 75 detik.
5 detik
proxy-read-timeoutMenetapkan 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-timeoutMenetapkan 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-timeoutMembatasi 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-timeoutMenetapkan 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-timeoutMenetapkan periode timeout untuk menjaga koneksi idle tetap terbuka dengan server upstream.
Edition open source: 60 detik
Edition ACK: 900 detik
worker-shutdown-timeoutMenetapkan periode timeout untuk shutdown yang aman.
240 detik
proxy-protocol-header-timeoutMenetapkan 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-timeoutMenetapkan 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-timeoutMenetapkan periode timeout untuk membaca badan permintaan klien.
60 detik
client-header-timeoutMenetapkan 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-timeoutMenetapkan periode timeout untuk membangun koneksi dengan server proxy.
nginx.ingress.kubernetes.io/proxy-send-timeoutMenetapkan periode timeout untuk mengirim data ke server proxy.
nginx.ingress.kubernetes.io/proxy-read-timeoutMenetapkan periode timeout untuk membaca data dari server proxy.
nginx.ingress.kubernetes.io/proxy-request-bufferingMenentukan 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
|
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: 80Untuk 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 |
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. Fileca.crtberisi 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 |
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:
|
nginx.ingress.kubernetes.io/auth-realm | Ingress | Menentukan realm otentikasi. Nama pengguna dan kata sandi dibagikan dalam realm otentikasi. |
Prosedur:
Gunakan alat baris perintah
htpasswduntuk menghasilkan file kata sandi.htpasswd -c auth jokerLihat file kata sandi.
cat auth # Keluaran yang diharapkan: joker:$apr1$R.G4krs/$hh0mX8xe4A3lYKMjvlVs1/Buat Secret berdasarkan file kata sandi:
kubectl create secret generic basic-auth --from-file=authAktifkan 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