Suġġerimenti u tricks ta' Kubernetes: paġni ta' żbalji personalizzati f'NGINX Ingress

Suġġerimenti u tricks ta' Kubernetes: paġni ta' żbalji personalizzati f'NGINX Ingress

F'dan l-artikolu, irrid nitkellem dwar żewġ karatteristiċi ta 'NGINX Ingress relatati mal-wiri ta' paġni ta 'żball personalizzati, kif ukoll il-limitazzjonijiet li jeżistu fihom u modi kif taħdem madwarhom.

1. Nibdlu l-backend default

B'mod awtomatiku, NGINX Ingress juża l-backend default, li jwettaq il-funzjoni korrispondenti. Dan ifisser li meta nitolbu Ingress li jispeċifika host li mhuwiex fir-riżorsi Ingress, nirċievu l-paġna li ġejja b'kodiċi ta 'rispons 404:

Suġġerimenti u tricks ta' Kubernetes: paġni ta' żbalji personalizzati f'NGINX Ingress

Madankollu, aktar u aktar spiss il-klijenti tagħna jiġu b'talba biex juru l-paġna tagħhom b'logo korporattiv u kumditajiet oħra minflok l-istandard 404. Biex tagħmel dan, NGINX Ingress għandu kapaċità mibnija tiddefinixxi mill-ġdid default-backend-service. Aħna ngħaddu l-entrata tal-format bħala argument għall-għażla tal-istess isem namespace/servicename. Il-port tas-servizz għandu jkun 80.

Biex tagħmel dan, trid toħloq il-pod (skjerament) u s-servizz tiegħek stess bl-applikazzjoni tiegħek (eżempju ta' implimentazzjoni f'YAML mir-repożitorju ingress-nginx), li se jingħata minflok il-backend default.

Hawn illustrazzjoni żgħira:

~$ 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>

Allura l-oqsma kollha li mhumiex maħluqa espliċitament permezz ta 'YAML ma' kind: Ingress, jaqgħu fil default-backend. Fil-lista ta 'hawn fuq, dan id-dominju sar sadsdasdas.

2. Immaniġġjar ta 'żbalji HTTP fl-applikazzjoni billi tuża l-backend default

Sitwazzjoni oħra hija talbiet li jispiċċaw fi żbalji HTTP (404, 500, 502...) għal applikazzjoni li ma tipproċessax sitwazzjonijiet bħal dawn (il-paġni sbieħ korrispondenti mhumiex iġġenerati). Dan jista 'jkun ukoll minħabba x-xewqa tal-iżviluppaturi li jservu l-istess paġni ta' żball f'applikazzjonijiet multipli.

Biex nimplimentaw dan il-każ fuq in-naħa tas-server għandna bżonn:

  1. Segwi l-istruzzjonijiet hawn fuq mill-paragrafu dwar backend default;
  2. Żid ċavetta għall-konfigurazzjoni nginx-ingress ConfigMap custom-http-errors, per eżempju, bil-valur 404,503 (ovvjament jikkorrispondi għall-kodiċijiet ta 'żball li huma koperti mir-regola l-ġdida).

Inkiseb ir-riżultat mistenni: meta l-applikazzjoni tal-klijent tkun qed taħdem u tirċievi żball bil-kodiċi tar-rispons 404 jew 503, it-talba tiġi ridiretta awtomatikament lejn il-backend default ġdid...

Madankollu, meta tiżviluppa applikazzjoni għal backend default u custom-http-errors, trid tqis karatteristika importanti:

!!! 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.

Il-fatt hu li meta talba tiġi ridirezzjonata, l-intestaturi jkun fihom informazzjoni utli bil-kodiċi tar-rispons preċedenti u informazzjoni addizzjonali (il-lista sħiħa tagħhom hija disponibbli hawn).

Dan ifisser li inti stess trid ħu ħsieb il-kodiċi tar-rispons korrett. Hawn hu eżempju. mid-dokumentazzjoni kif taħdem.

Applikazzjonijiet differenti għandhom backends default differenti

Biex tiżgura li s-soluzzjoni mhix globali għall-cluster kollu, iżda tapplika biss għal applikazzjonijiet speċifiċi, l-ewwel trid tiċċekkja l-verżjoni Ingress. Jekk jaqbel 0.23 jew ogħla, uża l-annotazzjonijiet tad-dħul indiġeni:

  1. Nistgħu jegħlbu default-backend għall- ta 'kull wieħed Ingress's bl-użu ta' annotazzjonijiet;
  2. Nistgħu jegħlbu custom-http-errors għall- ta 'kull wieħed Ingress's bl-użu ta' annotazzjonijiet.

Bħala riżultat, ir-riżorsa Ingress se tidher xi ħaġa bħal din:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ .Chart.Name }}-app2
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/custom-http-errors: "404,502"
    nginx.ingress.kubernetes.io/default-backend: error-pages
spec:
  tls:
  - hosts:
    - app2.example.com
    secretName: wildcard-tls
  rules:
  - host: app2.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: {{ .Chart.Name }}-app2
          servicePort: 80

F'dan il-każ, l-iżbalji 404 u 502 jiġu ridiretti lejn is-servizz tal-paġni tal-iżbalji bl-intestaturi kollha meħtieġa.

В verżjonijiet preċedenti ta 'Ingress ma kellhomx din il-karatteristika (impenn fatali f'0.23). U jekk għandek 2 applikazzjonijiet kompletament differenti li qed jaħdmu fil-cluster tiegħek u trid tispeċifika servizz default-backend differenti u pproċessar ta 'kodiċi ta' żball differenti għal kull wieħed minnhom, għal dan ser ikollok tuża workarounds, li minnhom għandna tnejn.

Dħul < 0.23: approċċ wieħed

Din l-għażla hija aktar sempliċi. Bħala applikazzjoni li sservi l-paġni tagħha, għandna HTML regolari, li ma jafx kif iħares lejn l-intestaturi u jirritorna l-kodiċijiet ta 'rispons korretti. Applikazzjoni bħal din titħaddem b'Ingress mill-url /error-pages, u fil-katalgu ws se jkun l-HTML ritornat.

Illustrazzjoni f'YAML:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ .Chart.Name }}-app2
  annotations:
    kubernetes.io/ingress.class: "nginx"
    ingress.kubernetes.io/server-snippet: |
      proxy_intercept_errors on;
      error_page 500 501 502 503 504 @error_pages;
      location @error_pages {
        rewrite ^ /error-pages/other/index.html break;
        proxy_pass http://error-pages.prod.svc.cluster.local;
      }
spec:
  tls:
  - hosts:
    - app2.example.com
    secretName: wildcard-tls
  rules:
  - host: app2.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: {{ .Chart.Name }}-app2
          servicePort: 80

Is-servizz għal dan l-iskjerament għandu jkun tat-tip ClusterIP.

Fl-istess ħin, fl-applikazzjoni fejn se nipproċessaw l-iżball, f'Ingress inżidu server-snippet jew konfigurazzjoni-snippet bil-kontenut li ġej:

nginx.ingress.kubernetes.io    /server-snippet: |
      proxy_intercept_errors on;
      error_page 500 501 502 503 504 @error_pages;
      location @error_pages {
        rewrite ^ /error-pages/ws/index.html break;
        proxy_pass http://error-pages.prod.svc.cluster.local;
      }

Dħul < 0.23: it-tieni approċċ

Għażla għal applikazzjoni li tista 'tipproċessa headers... U b'mod ġenerali dan huwa mod aktar korrett, misluf minn custom-http-errors. L-użu manwalment (ikkupjar) jippermettilek li ma tibdelx is-settings globali.

Il-passi huma kif ġej. Noħolqu istess skjerament b’applikazzjoni li tista’ tisma’ l-aħbarijiet meħtieġa u tirrispondi b’mod korrett. Żid server-snippet mal-applikazzjoni Ingress bil-kontenut li ġej:

nginx.ingress.kubernetes.io    /server-snippet: |
      proxy_intercept_errors off;
      error_page 404 = @custom_404;
      error_page 503 = @custom_503;
      location @custom_404 {
        internal;
        proxy_intercept_errors off;
        proxy_set_header       X-Code             404;
        proxy_set_header       X-Format           $http_accept;
        proxy_set_header       X-Original-URI     $request_uri;
        proxy_set_header       X-Namespace        $namespace;
        proxy_set_header       X-Ingress-Name     $ingress_name;
        proxy_set_header       X-Service-Name     $service_name;
        proxy_set_header       X-Service-Port     $service_port;
        proxy_set_header       Host               $best_http_host;
        rewrite ^ /error-pages/ws/index.html break;
        proxy_pass http://error-pages.prod.svc.cluster.local;
      }
      location @custom_503 {
        internal;
        proxy_intercept_errors off;
        proxy_set_header       X-Code             503;
        proxy_set_header       X-Format           $http_accept;
        proxy_set_header       X-Original-URI     $request_uri;
        proxy_set_header       X-Namespace        $namespace;
        proxy_set_header       X-Ingress-Name     $ingress_name;
        proxy_set_header       X-Service-Name     $service_name;
        proxy_set_header       X-Service-Port     $service_port;
        proxy_set_header       Host               $best_http_host;
        rewrite ^ /error-pages/ws/index.html break;
        proxy_pass http://error-pages.prod.svc.cluster.local;
      }

Kif tistgħu taraw, għal kull żball li rridu nipproċessaw, irridu nagħmlu l-post tagħna stess, fejn jiddaħħlu l-headers kollha meħtieġa, bħal f'dak "nattiv". paġni ta' żball tad-dwana. Dan il-mod nistgħu noħolqu paġni ta 'żball personalizzati differenti anke għal postijiet u servers individwali.

PS

Oħrajn mis-serje ta' tips & tricks K8s:

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment