ProHoster > Blog > uprava > Kubernetes savjeti i trikovi: prilagođene stranice s pogreškama u NGINX Ingressu
Kubernetes savjeti i trikovi: prilagođene stranice s pogreškama u NGINX Ingressu
U ovom članku želim govoriti o dvije značajke NGINX Ingressa koje se odnose na prikazivanje personaliziranih stranica s pogreškama, kao io ograničenjima koja postoje u njima i načinima kako ih zaobići.
1. Promjena zadane pozadine
Prema zadanim postavkama, NGINX Ingress koristi zadanu pozadinu koja obavlja odgovarajuću funkciju. To znači da kada zahtijevamo Ingress koji navodi host koji nije u Ingress resursima, dobivamo sljedeću stranicu s kodom odgovora 404:
Međutim, sve češće naši klijenti dolaze sa zahtjevom da im se stranica prikaže s logotipom tvrtke i drugim pogodnostima umjesto standardnog 404. Da bi to učinio, NGINX Ingress ima ugrađena sposobnost redefinirati default-backend-service. Unos formata prosljeđujemo kao argument istoimenoj opciji namespace/servicename. Port usluge trebao bi biti 80.
Da biste to učinili, morate izraditi vlastiti pod (uvođenje) i uslugu sa svojom aplikacijom (primjer implementacije u YAML iz repozitorija ingress-nginx), koji će biti dan umjesto zadane pozadine.
Evo male ilustracije:
~$ 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>
Dakle, sve domene koje nisu eksplicitno kreirane putem YAML-a sa kind: Ingress, spadaju u default-backend. U gornjem popisu ova je domena postala sadsdasdas.
2. Rukovanje HTTP pogreškama u aplikaciji pomoću zadane pozadine
Druga situacija su zahtjevi koji završavaju s HTTP greškama (404, 500, 502...) prema aplikaciji koja ne obrađuje takve situacije (ne generiraju se odgovarajuće lijepe stranice). To također može biti posljedica želje programera da poslužuju iste stranice s pogreškama u više aplikacija.
Za implementaciju ovog slučaja na strani poslužitelja potrebno nam je:
Slijedite gornje upute iz odlomka o zadanoj pozadini;
Dodajte ključ konfiguraciji nginx-ingress ConfigMap custom-http-errors, na primjer, s vrijednošću 404,503 (očito odgovara šiframa grešaka koje pokriva novo pravilo).
Očekivani rezultat je postignut: kada klijentska aplikacija radi i primi pogrešku s kodom odgovora 404 ili 503, zahtjev će se automatski preusmjeriti na novu zadanu pozadinu...
Međutim, kada razvijate aplikaciju za zadanu pozadinu i prilagođene http-pogreške, trebate uzeti u obzir važnu značajku:
!!! 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.
Činjenica je da kada se zahtjev preusmjeri, zaglavlja će sadržavati korisne informacije s prethodnim kodom odgovora i dodatnim informacijama (dostupan je njihov potpuni popis здесь).
To znači da morate i sami voditi računa o ispravnom kodu odgovora. Evo primjera iz dokumentacije kako radi.
Različite aplikacije imaju različite zadane pozadine
Kako biste bili sigurni da rješenje nije globalno za cijeli klaster, već da se primjenjuje samo na određene aplikacije, prvo morate provjeriti Ingress verziju. Ako se poklopi 0.23 ili više, koristite izvorne Ingress komentare:
U tom će slučaju pogreške 404 i 502 biti preusmjerene na uslugu stranica s pogreškama sa svim potrebnim zaglavljima.
В prethodne verzije Ingressa nisu imale ovu značajku (sudbonosni commit na 0.23). A ako imate 2 potpuno različite aplikacije koje se izvode u vašem klasteru i želite navesti različitu zadanu pozadinsku uslugu i obradu različitih kodova pogrešaka za svaku od njih, za to ćete morati koristiti zaobilazna rješenja, od kojih imamo dva.
Ulaz < 0.23: pristup jedan
Ova opcija je jednostavnija. Kao aplikacija koja poslužuje svoje stranice, imamo obični HTML, koji ne zna kako pogledati zaglavlja i vratiti ispravne kodove odgovora. Takva se aplikacija uvodi s Ingressom s url-a /error-pages, te u katalogu ws bit će vraćeni HTML.
Opcija za aplikaciju koja može obraditi zaglavlja ... I općenito ovo je ispravniji način, posuđen iz custom-http-errors. Ručno korištenje (kopiranje) omogućit će vam da ne mijenjate globalne postavke.
Koraci su sljedeći. Mi stvaramo isti raspored s aplikacijom koja može slušati potrebne naslove i ispravno odgovoriti. Dodajte isječak poslužitelja u aplikaciju Ingress sa sljedećim sadržajem:
Kao što vidite, za svaku pogrešku koju želimo obraditi, moramo napraviti vlastitu lokaciju, gdje će biti umetnuta sva potrebna zaglavlja, kao u "nativnom". prilagođene-stranice-pogreške. Na taj način možemo stvoriti različite personalizirane stranice s pogreškama čak i za pojedinačne lokacije i poslužitelje.