Mga tip ug trick sa Kubernetes: naandan nga mga panid sa sayup sa NGINX Ingress

Mga tip ug trick sa Kubernetes: naandan nga mga panid sa sayup sa NGINX Ingress

Niini nga artikulo, gusto nakong hisgutan ang bahin sa duha ka bahin sa NGINX Ingress nga may kalabutan sa pagpakita sa personal nga mga panid sa sayup, ingon man ang ilang mga limitasyon ug mga paagi sa paglibot niini.

1. Usba ang default backend

Sa kasagaran, ang NGINX Ingress naggamit sa default backend, nga naghimo sa katugbang nga function. Nagpasabot kini nga kung mangayo ug Ingress nga adunay host nga wala sa mga kapanguhaan sa Ingress, makuha namon kini nga panid nga adunay 404 nga tubag nga code:

Mga tip ug trick sa Kubernetes: naandan nga mga panid sa sayup sa NGINX Ingress

Bisan pa, labi ka kanunay, ang among mga kliyente moabut uban ang usa ka hangyo nga ipakita ang ilang panid nga adunay logo sa kompanya ug uban pang mga pasilidad imbes sa sumbanan nga 404. Alang niini, ang NGINX Ingress adunay built-in nga kapabilidad pagpasabot pag-usab default-backend-service. Gipasa namo ang format nga rekord isip argumento sa opsyon sa samang ngalan namespace/servicename. Ang service port kinahanglang 80.

Aron mahimo kini, kinahanglan nimo nga maghimo sa imong kaugalingon nga pod (deployment) ug usa ka serbisyo sa imong aplikasyon (pananglitan nga pagpatuman sa YAML gikan sa ingress-nginx repository), nga ihatag imbes sa default backend.

Ania ang gamay nga ilustrasyon:

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

Mao nga ang tanan nga mga domain nga dili klaro nga gihimo pinaagi sa YAML nga adunay kind: Ingress, nahulog sa default-backend. Sa listahan sa ibabaw, kini nga domain nahimong sadsdasdas.

2. Pagdumala sa mga sayop sa HTTP sa aplikasyon pinaagi sa default backend

Ang laing sitwasyon mao ang mga hangyo nga natapos sa HTTP errors (404, 500, 502…) sa usa ka aplikasyon nga wala magdumala sa maong mga sitwasyon (ang katugbang nga nindot nga mga panid wala mamugna). Mahimo usab kini tungod sa tinguha sa mga developer nga ibalik ang parehas nga mga panid sa sayup sa daghang mga aplikasyon.

Aron ipatuman kini nga kaso sa bahin sa server, kinahanglan namon:

  1. Sunda ang mga instruksyon sa ibabaw gikan sa paragraph mahitungod sa default backend;
  2. Idugang ang yawe sa configuration ConfigMap nginx-ingress custom-http-errors, pananglitan, uban sa bili 404,503 (klaro nga motakdo sa mga error code nga nasakup sa bag-ong lagda).

Ang gipaabot nga resulta makab-ot: kung ang aplikasyon sa kliyente nagdagan ug nakadawat usa ka sayup nga adunay 404 o 503 nga tubag nga code, ang hangyo awtomatiko nga i-redirect sa bag-ong default backend ...

Bisan pa, kung maghimo usa ka aplikasyon alang sa default backend ug custom-http-errors, kinahanglan nga tagdon ang usa ka hinungdanon nga bahin:

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

Ang tinuod mao nga kung ang hangyo gi-redirect, ang mga ulohan adunay sulud nga mapuslanon nga kasayuran sa miaging code sa pagtubag ug dugang nga kasayuran (ang ilang tibuuk nga lista magamit dinhi).

Kini nagpasabut nga kinahanglan nimo ampingi ang saktong response code. Ania ang usa ka pananglitan gikan sa dokumentasyon kung giunsa kini paglihok.

Lahi nga mga aplikasyon - lainlain nga default backend

Aron ang solusyon dili global alang sa tibuok cluster, apan magamit lamang sa piho nga mga aplikasyon, una kinahanglan nimo nga susihon ang bersyon sa Ingress. Kon kini motakdo 0.23 o labaw pa, gamita ang lumad nga Ingress annotation:

  1. Mahimo natong ipasabut pag-usab default-backend alang sa matag usa Ingress uban sa anotasyon;
  2. Mahimo natong ipasabut pag-usab custom-http-errors alang sa matag usa Ingress uban sa anotasyon.

Ingon usa ka sangputanan, ang kapanguhaan sa Ingress mahimong ingon niini:

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

Sa kini nga kaso, ang 404 ug 502 nga mga sayup ibalhin sa serbisyo sa mga panid sa sayup nga adunay tanan nga kinahanglan nga mga ulohan.

Π’ Ang nangaging mga bersyon sa Ingress wala niini nga bahin. (makamatay nga pasalig sa 0.23). Ug kung ikaw adunay 2 nga hingpit nga lainlain nga mga aplikasyon nga nagdagan sa imong cluster ug gusto nimong ipiho ang lainlaing mga default-backend-service ug pagdumala sa lainlaing mga code sa sayup alang sa matag usa niini, kinahanglan nimo nga mogamit mga workarounds alang niini, diin kami adunay duha.

Ingress <0.23: duol sa usa

Kini nga kapilian mas simple. Ingon usa ka aplikasyon nga naghubad sa mga panid niini, kami adunay yano nga HTML, nga wala mahibal-an kung unsaon pagtan-aw sa mga ulohan ug pagbalik sa husto nga mga code sa pagtubag. Ang ingon nga aplikasyon gilusad sa Ingress nga adunay url /error-pages, ug sa direktoryo ws ihatag HTML.

Ilustrasyon sa 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

Ang serbisyo alang niini nga pag-deploy kinahanglan nga tipo nga ClusterIP.

Sa samang higayon, sa aplikasyon diin atong dumalahon ang sayop, sa Ingress atong idugang ang server-snippet o configuration-snippet nga adunay mosunod nga sulod:

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: ikaduha nga pamaagi

Usa ka variant alang sa usa ka aplikasyon nga makaproseso sa mga ulohan ... Ug sa kinatibuk-an, kini usa ka mas husto nga paagi, hinulaman gikan sa custom-http-errors. Ang paggamit niini nga mano-mano (pagkopya) magtugot kanimo nga dili usbon ang mga setting sa kalibutan.

Ang mga lakang mao ang mosunod. Kami nagmugna parehas nga deployment nga adunay aplikasyon nga makapamati sa husto nga mga ulohan ug makatubag sa husto. Gidugang namo ang mga aplikasyon sa server-snippet sa Ingress nga adunay mosunod nga sulod:

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

Sama sa imong nakita, alang sa matag sayup nga gusto namon nga iproseso, kinahanglan namon nga maghimo sa among kaugalingon nga lokasyon, diin ang tanan nga kinahanglan nga mga ulohan ilisan, sama sa "lumad" custom-error-pages. Niining paagiha makahimo kami og lain-laing personalized nga mga panid sa sayop bisan alang sa indibidwal nga mga lokasyon ug mga server.

PS

Ang uban gikan sa K8s tips & tricks series:

Basaha usab sa among blog:

Source: www.habr.com

Idugang sa usa ka comment