Kubernetes tips og triks: tilpassede feilsider i NGINX Ingress
I denne artikkelen vil jeg snakke om to funksjoner ved NGINX Ingress relatert til visning av personlige feilsider, samt begrensningene som finnes i dem og måter å omgå dem på.
1. Endre standard backend
Som standard bruker NGINX Ingress standard backend, som utfører den tilsvarende funksjonen. Dette betyr at når vi ber om en Ingress som spesifiserer en vert som ikke er i Ingress-ressursene, mottar vi følgende side med en 404-svarkode:
Imidlertid kommer oftere og oftere våre kunder med en forespørsel om å vise siden deres med en bedriftslogo og andre fasiliteter i stedet for standard 404. For å gjøre dette har NGINX Ingress innebygd kapasitet redefinere default-backend-service. Vi sender formatoppføringen som et argument til alternativet med samme navn namespace/servicename. Tjenestens port skal være 80.
For å gjøre dette må du lage din egen pod (distribusjon) og tjeneste med applikasjonen din (eksempelimplementering i YAML fra ingress-nginx-depotet), som vil bli gitt i stedet for standard backend.
Her er en liten illustrasjon:
~$ 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>
Så alle domener som ikke er eksplisitt opprettet via YAML med kind: Ingress, faller inn i standard-backend. I oppføringen ovenfor ble dette domenet sadsdasdas.
2. Håndtering av HTTP-feil i applikasjonen ved å bruke standard backend
En annen situasjon er forespørsler som ender med HTTP-feil (404, 500, 502...) til en applikasjon som ikke behandler slike situasjoner (de tilsvarende vakre sidene genereres ikke). Dette kan også skyldes at utviklere ønsker å betjene de samme feilsidene i flere applikasjoner.
For å implementere denne saken på serversiden trenger vi:
Følg instruksjonene ovenfor fra avsnittet om standard backend;
Legg til en nøkkel til nginx-ingress-konfigurasjonen ConfigMap custom-http-errors, for eksempel med verdien 404,503 (tilsvarer åpenbart feilkodene som omfattes av den nye regelen).
Det forventede resultatet er oppnådd: når klientapplikasjonen kjører og mottar en feil med svarkode 404 eller 503, vil forespørselen automatisk bli omdirigert til den nye standard backend...
Men når du utvikler en applikasjon for standard backend og tilpassede http-feil, må du ta hensyn til en viktig funksjon:
!!! 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.
Faktum er at når en forespørsel omdirigeres, vil overskriftene inneholde nyttig informasjon med den forrige svarkoden og tilleggsinformasjon (deres komplette liste er tilgjengelig her).
Det betyr at du selv må ta vare på riktig svarkode. Her er et eksempel fra dokumentasjonen hvordan det fungerer.
Ulike applikasjoner har forskjellige standard backends
For å sikre at løsningen ikke er global for hele klyngen, men kun gjelder spesifikke applikasjoner, må du først sjekke Ingress-versjonen. Hvis det stemmer 0.23 eller høyere, bruk de opprinnelige Ingress-kommentarene:
I dette tilfellet vil feil 404 og 502 bli omdirigert til feilsidetjenesten med alle nødvendige overskrifter.
В tidligere versjoner av Ingress hadde ikke denne funksjonen (skjebnesvangre forpliktelse på 0.23). Og hvis du har 2 helt forskjellige applikasjoner som kjører i klyngen din og du vil spesifisere en annen standard-backend-tjeneste og behandling av forskjellige feilkoder for hver av dem, må du bruke løsninger, hvorav vi har to.
Inngang < 0.23: nærmer seg én
Dette alternativet er enklere. Som en applikasjon som betjener sidene sine, har vi vanlig HTML, som ikke vet hvordan man ser på overskriftene og returnerer de riktige svarkodene. En slik applikasjon rulles ut med Ingress fra url /error-pages, og i katalogen ws vil være den returnerte HTML-en.
Et alternativ for en applikasjon som kan behandle overskrifter... Og generelt er dette en mer korrekt måte, lånt fra tilpassede-http-feil. Ved å bruke den manuelt (kopiering) kan du ikke endre globale innstillinger.
Fremgangsmåten er som følger. Vi skaper samme utplassering med en applikasjon som kan lytte til de nødvendige overskriftene og svare riktig. Legg til en server-snippet til Ingress-applikasjonen med følgende innhold:
Som du kan se, for hver feil vi ønsker å behandle, må vi lage vår egen plassering, der alle nødvendige overskrifter vil bli satt inn, som i den "innfødte". tilpassede feilsider. På denne måten kan vi lage forskjellige personlige feilsider selv for individuelle lokasjoner og servere.