Kubernetes matipi & matipi: tsika yekukanganisa mapeji muNGINX Ingress

Kubernetes matipi & matipi: tsika yekukanganisa mapeji muNGINX Ingress

Muchikamu chino, ndinoda kutaura pamusoro pezvinhu zviviri zveNGINX Ingress zvine chokuita nekuratidza mapeji ekukanganisa kwemunhu, pamwe chete nemiganhu iripo mavari uye nzira dzekushanda dzakavapoteredza.

1. Kuchinja default backend

By default, NGINX Ingress inoshandisa default backend, iyo inoita basa rinoenderana. Izvi zvinoreva kuti kana uchikumbira Ingress ichitsanangura muenzi asiri muIngress zviwanikwa, tinogashira peji rinotevera rine 404 mhinduro kodhi:

Kubernetes matipi & matipi: tsika yekukanganisa mapeji muNGINX Ingress

Nekudaro, kazhinji kazhinji vatengi vedu vanouya nechikumbiro chekuratidza peji yavo ine logo yekambani uye zvimwe zvinowanika panzvimbo peiyo standard 404. Kuti uite izvi, NGINX Ingress ine yakavakirwa-mukati kugona redefine default-backend-service. Isu tinopfuudza iyo fomati yekupinda senharo kune iyo sarudzo yezita rimwechete namespace/servicename. Chiteshi chesevhisi chinofanira kunge chiri makumi masere.

Kuti uite izvi, unofanirwa kugadzira yako pod (deployment) uye sevhisi nechishandiso chako (muenzaniso kuita muYAML kubva kune ingress-nginx repository), iyo ichapihwa pachinzvimbo cheiyo default backend.

Heino mufananidzo mudiki:

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

Saka ese madomasi asina kugadzirwa zvakajeka kuburikidza neYAML ne kind: Ingress, inowira mune default-backend. Mune rondedzero iri pamusoro, iyi domain yakave sadsdasdas.

2. Kubata zvikanganiso zveHTTP muchirongwa uchishandisa default backend

Imwe mamiriro zvikumbiro zvinopera muHTTP zvikanganiso (404, 500, 502...) kune application isingagadzirise mamiriro akadai (mapeji anoenderana akanaka haana kugadzirwa). Izvi zvinogona zvakare kuve nekuda kwechishuwo chevagadziri vekushandisa iwo mapeji ekukanganisa akafanana mune akawanda maapplication.

Kuti tishandise iyi kesi padivi reseva tinoda:

  1. Tevedza mirairo iri pamusoro kubva pandima nezve default backend;
  2. Wedzera kiyi kune nginx-ingress kumisikidza ConfigMap custom-http-errors, somuenzaniso, nehuwandu 404,503 (zviri pachena inowirirana nemakodhi ekukanganisa anofukidzwa nemutemo mutsva).

Mhedzisiro inotarisirwa yawanikwa: kana chikumbiro chemutengi chiri kushanda uye chikagashira chikanganiso nekodhi yemhinduro 404 kana 503, chikumbiro chinozodzoserwa otomatiki kune itsva default backend...

Nekudaro, kana uchigadzira application ye default backend uye tsika-http-zvikanganiso, unofanirwa kufunga nezve chinhu chakakosha:

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

Icho chokwadi ndechekuti kana chikumbiro chikafambiswazve, misoro ichange iine ruzivo runobatsira neiyo yapfuura kodhi yekupindura uye neruzivo rwekuwedzera (runyorwa rwavo rwakakwana rwuripo. pano).

Izvi zvinoreva kuti iwe pachako unofanira chengetedza kodhi yemhinduro chaiyo. Heuno muenzaniso kubva pane zvinyorwa kuti zvinoshanda sei.

Maapplication akasiyana ane akasiyana default backends

Kuti uone kuti mhinduro yacho haisi yepasi rose yeboka rose, asi inoshanda kune chaiwo maapplication, iwe unofanirwa kutanga watarisa iyo Ingress vhezheni. Kana zvichienderana 0.23 kana kupfuura, shandisa zvinyorwa zveIngress:

  1. Tinogona kushandura default-backend nokuti cheumwe neumwe Ingress's kushandisa annotations;
  2. Tinogona kushandura custom-http-errors nokuti cheumwe neumwe Ingress's kushandisa annotations.

Nekuda kweizvozvo, iyo Ingress resource ichaita senge ichi:

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

Muchiitiko ichi, kukanganisa 404 uye 502 kuchadzoserwa kune yekukanganisa-mapeji sevhisi ine ese anodiwa misoro.

Π’ shanduro dzekare dzeIngress dzainge dzisina chinhu ichi (kuzvipira ku0.23) Uye kana iwe uine 2 akasiyana zvachose maapplication ari mucluster yako uye iwe uchida kudoma akasiyana default-backend-sevhisi uye kugadziriswa kweakasiyana makodhi makodhi kune yega yega, nekuda kweizvi uchafanirwa kushandisa workaround, yatinayo maviri.

Ingress <0.23: swedera kune imwe

Iyi sarudzo iri nyore. Sechikumbiro chinoshumira mapeji ayo, tine HTML yenguva dzose, iyo isingazivi kutarisa misoro uye kudzorera mhinduro dzakakodzera. Chikumbiro chakadaro chinotenderedzwa neIngress kubva kuurl /error-pages, uye mubhuku ws ichava HTML yakadzorerwa.

Mufananidzo muYAML:

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

Sevhisi yekutumirwa iyi inofanirwa kunge iri yerudzi rweClusterIP.

Panguva imwecheteyo, mukushandisa kwatinozogadzirisa kukanganisa, muIngress tinowedzera server-snippet kana dhizaini-snippet ine zvinotevera zvirimo:

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;
      }

Ingress <0.23: nzira yechipiri

Sarudzo yeapplication inogona kugadzirisa misoro... Uye kazhinji iyi ndiyo nzira chaiyo, yakakweretwa kubva kutsika-http-zvikanganiso. Kuishandisa nemaoko (kukopa) kuchakubvumidza kuti usachinje marongero epasirese.

Matanho acho ndeaya anotevera. Isu tinosika kumwe kutumirwa nechikumbiro chinogona kuteerera kumisoro inodiwa uye kupindura nemazvo. Wedzera server-snippet kune Ingress application ine zvinotevera zvirimo:

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;
      }

Sezvauri kuona, pakukanganisa kwega kwega kwatinoda kugadzirisa, isu tinofanirwa kugadzira yedu pachedu nzvimbo, apo misoro yese inodiwa ichaiswa, se "yekuzvarwa" imwe. custom-error-mapeji. Nenzira iyi tinokwanisa kugadzira akasiyana mapeji ekukanganisa akasarudzika kunyangwe kune ega nzvimbo uye maseva.

PS

Zvimwe kubva kuK8s matipi & matipi akateedzana:

Verenga zvakare pablog yedu:

Source: www.habr.com

Voeg