Tip & trik Kubernetes: kaca kesalahan khusus ing NGINX Ingress
Ing artikel iki, aku pengin ngomong babagan rong fitur NGINX Ingress sing ana gandhengane karo nampilake kaca kesalahan sing dipersonalisasi, uga watesan sing ana lan cara kanggo ngatasi.
1. Ngganti backend gawan
Kanthi gawan, NGINX Ingress nggunakake backend standar, sing nindakake fungsi sing cocog. Iki tegese nalika njaluk Ingress sing nemtokake host sing ora ana ing sumber daya Ingress, kita nampa kaca ing ngisor iki kanthi kode respon 404:
Nanging, luwih akeh klien kita njaluk panjaluk kanggo nuduhake kaca kanthi logo perusahaan lan fasilitas liyane tinimbang standar 404. Kanggo nindakake iki, NGINX Ingress duwe kemampuan dibangun ing nemtokake maneh default-backend-service. We pass entri format minangka bantahan kanggo pilihan saka jeneng sing padha namespace/servicename. Port layanan kudu 80.
Kanggo nindakake iki, sampeyan kudu nggawe pod (penyebaran) lan layanan karo aplikasi sampeyan (conto implementasine ing YAML saka repositori ingress-nginx), sing bakal diwenehake tinimbang backend standar.
Mangkene ilustrasi cilik:
~$ curl -i -XGET http://sadsdasdas.kube-cloud.my/
HTTP/1.1 404 Not Found
Date: Mon, 11 Mar 2019 05:38:15 GMT
Content-Type: */*
Transfer-Encoding: chunked
Connection: keep-alive
<span>The page you're looking for could not be found.</span>
Dadi kabeh domain sing ora digawe sacara eksplisit liwat YAML karo kind: Ingress, tiba ing default-backend. Ing dhaptar ing ndhuwur, domain iki dadi sadsdasdas.
2. Nangani kesalahan HTTP ing aplikasi nggunakake backend gawan
Kahanan liyane yaiku panjaluk sing diakhiri karo kesalahan HTTP (404, 500, 502...) menyang aplikasi sing ora ngolah kahanan kasebut (kaca-kaca ayu sing cocog ora digawe). Iki bisa uga amarga kepinginan para pangembang kanggo ngladeni kaca kesalahan sing padha ing pirang-pirang aplikasi.
Kanggo ngleksanakake kasus iki ing sisih server kita kudu:
Tindakake pandhuan ing ndhuwur saka paragraf babagan backend standar;
Tambah tombol menyang konfigurasi nginx-ingress ConfigMap custom-http-errors, contone, karo nilai 404,503 (temenan cocog karo kode kesalahan sing dijamin dening aturan anyar).
Asil sing dikarepake wis digayuh: nalika aplikasi klien mlaku lan nampa kesalahan kanthi kode respon 404 utawa 503, panjalukan kasebut bakal dialihake kanthi otomatis menyang backend standar anyar...
Nanging, nalika ngembangake aplikasi kanggo backend default lan custom-http-errors, sampeyan kudu nggatekake fitur penting:
!!! Important The custom backend is expected to return the correct HTTP status code instead of 200. NGINX does not change the response from the custom default backend.
Kasunyatane yaiku nalika panyuwunan dialihake, header bakal ngemot informasi sing migunani karo kode respon sadurunge lan informasi tambahan (dhaptar lengkap kasedhiya kene).
Iki tegese sampeyan dhewe kudu ngurus kode respon sing bener. Mangkene conto saka dokumentasi cara kerjane.
Aplikasi sing beda duwe backend standar sing beda
Kanggo mesthekake yen solusi ora global kanggo kabeh kluster, nanging mung ditrapake kanggo aplikasi tartamtu, sampeyan kudu mriksa versi Ingress. Yen cocog 0.23 utawa luwih, gunakake anotasi Ingress asli:
Kita bisa ngatasi default-backend kanggo saben Ingress nggunakake anotasi;
Kita bisa ngatasi custom-http-errors kanggo saben Ingress nggunakake anotasi.
Pilihan iki luwih prasaja. Minangka aplikasi sing nglayani kaca, kita duwe HTML biasa, sing ora ngerti carane ndeleng header lan ngasilake kode respon sing bener. Aplikasi kasebut diluncurake karo Ingress saka url /error-pages, lan ing katalog ws bakal dadi HTML bali.
Layanan kanggo panyebaran iki kudu saka jinis ClusterIP.
Ing wektu sing padha, ing aplikasi sing bakal ngolah kesalahan, ing Ingress kita nambah potongan server utawa potongan konfigurasi kanthi konten ing ngisor iki:
Pilihan kanggo aplikasi sing bisa ngolah header ... Lan ing umum iki cara sing luwih bener, dipinjam saka custom-http-errors. Nggunakake kanthi manual (nyalin) bakal ngidini sampeyan ora ngganti setelan global.
Langkah-langkahe kaya ing ngisor iki. Kita nggawe panyebaran padha kanthi aplikasi sing bisa ngrungokake judhul sing dibutuhake lan nanggapi kanthi bener. Tambah potongan-server menyang aplikasi Ingress kanthi isi ing ngisor iki:
Kaya sing sampeyan ngerteni, kanggo saben kesalahan sing arep diproses, kita kudu nggawe lokasi dhewe, ing ngendi kabeh header sing dibutuhake bakal dilebokake, kaya ing "native". kaca-kesalahan-custom. Kanthi cara iki, kita bisa nggawe kaca kesalahan pribadi sing beda sanajan kanggo lokasi lan server individu.