Tipy a triky Kubernetes: vlastné chybové stránky v NGINX Ingress
V tomto článku chcem hovoriť o dvoch funkciách NGINX Ingress súvisiacich so zobrazovaním prispôsobených chybových stránok, ako aj o obmedzeniach, ktoré v nich existujú, a spôsoboch, ako ich obísť.
1. Zmena predvoleného backendu
NGINX Ingress štandardne používa predvolený backend, ktorý vykonáva zodpovedajúcu funkciu. To znamená, že keď požiadate o Ingress s uvedením hostiteľa, ktorý nie je v zdrojoch Ingress, dostaneme nasledujúcu stránku s kódom odpovede 404:
Čoraz častejšie však naši klienti prichádzajú s požiadavkou zobraziť svoju stránku s firemným logom a ďalšími vymoženosťami namiesto štandardnej 404. Na to má NGINX Ingress vstavaná schopnosť predefinovať default-backend-service. Záznam formátu odovzdáme ako argument rovnomennej možnosti namespace/servicename. Port služby by mal byť 80.
Ak to chcete urobiť, musíte si vytvoriť svoj vlastný modul (nasadenie) a službu s vašou aplikáciou (príklad implementácie v YAML z úložiska ingress-nginx), ktorý bude poskytnutý namiesto predvoleného backendu.
Tu je malá ilustrácia:
~$ 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>
Takže všetky domény, ktoré nie sú explicitne vytvorené cez YAML s kind: Ingress, spadajú do predvoleného backendu. Vo vyššie uvedenom zozname sa táto doména stala sadsdasdas.
2. Spracovanie chýb HTTP v aplikácii pomocou predvoleného backendu
Ďalšou situáciou sú požiadavky končiace sa chybami HTTP (404, 500, 502...) do aplikácie, ktorá takéto situácie nespracováva (negenerujú sa zodpovedajúce krásne stránky). Môže to byť spôsobené aj túžbou vývojárov zobrazovať rovnaké chybové stránky vo viacerých aplikáciách.
Na implementáciu tohto prípadu na strane servera potrebujeme:
Postupujte podľa pokynov uvedených vyššie v odseku o predvolenom backende;
Pridajte kľúč do konfigurácie nginx-ingress ConfigMap custom-http-errors, napríklad s hodnotou 404,503 (samozrejme zodpovedá chybovým kódom, na ktoré sa vzťahuje nové pravidlo).
Očakávaný výsledok bol dosiahnutý: keď je klientska aplikácia spustená a dostane chybu s kódom odpovede 404 alebo 503, požiadavka bude automaticky presmerovaná na nový predvolený backend...
Pri vývoji aplikácie pre predvolený backend a vlastné http-chyby však musíte vziať do úvahy dôležitú vlastnosť:
!!! 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.
Faktom je, že keď je požiadavka presmerovaná, hlavičky budú obsahovať užitočné informácie s predchádzajúcim kódom odpovede a ďalšie informácie (ich úplný zoznam je k dispozícii tu).
To znamená, že vy sami musíte dbajte na správny kód odpovede. Tu je príklad. z dokumentácie, ako to funguje.
Rôzne aplikácie majú rôzne predvolené backendy
Aby ste sa uistili, že riešenie nie je globálne pre celý klaster, ale vzťahuje sa len na konkrétne aplikácie, musíte najprv skontrolovať verziu Ingress. Ak sa zhoduje 0.23 alebo vyššie, použite natívne anotácie Ingress:
Môžeme prepísať default-backend pre z každého Ingress pomocou anotácií;
Môžeme prepísať custom-http-errors pre z každého Ingress pomocou anotácií.
V dôsledku toho bude zdroj Ingress vyzerať asi takto:
V tomto prípade budú chyby 404 a 502 presmerované na službu error-pages so všetkými potrebnými hlavičkami.
В predchádzajúce verzie Ingress túto funkciu nemali (osudný záväzok o 0.23). A ak máte vo svojom klastri spustené 2 úplne odlišné aplikácie a chcete pre každú z nich určiť inú predvolenú backendovú službu a spracovanie rôznych chybových kódov, budete musieť použiť riešenia, z ktorých máme dve.
Vstup < 0.23: priblížiť sa k jednej
Táto možnosť je jednoduchšia. Ako aplikáciu, ktorá obsluhuje svoje stránky, máme bežné HTML, ktoré sa nevie pozrieť na hlavičky a vrátiť správne kódy odpovedí. Takáto aplikácia je spustená pomocou Ingress z adresy URL /error-pagesa v katalógu ws bude vrátený kód HTML.
Možnosť pre aplikáciu, ktorá dokáže spracovať hlavičky... A vo všeobecnosti je to správnejšia cesta, požičaná z vlastných http-chyb. Ručné použitie (kopírovanie) vám umožní nemeniť globálne nastavenia.
Kroky sú nasledovné. Tvoríme rovnaké nasadenie s aplikáciou, ktorá dokáže počúvať potrebné titulky a správne reagovať. Pridajte útržok servera do aplikácie Ingress s nasledujúcim obsahom:
Ako vidíte, pre každú chybu, ktorú chceme spracovať, si musíme vytvoriť vlastné umiestnenie, kam sa vložia všetky potrebné hlavičky, ako v „natívnom“. vlastné chybové stránky. Takto môžeme vytvárať rôzne personalizované chybové stránky aj pre jednotlivé lokality a servery.