Kubernetes talooyinka & tabaha: bogagga qaladka gaarka ah ee gudaha NGINX

Kubernetes talooyinka & tabaha: bogagga qaladka gaarka ah ee gudaha NGINX

Maqaalkan, waxaan rabaa in aan ka hadlo laba sifo oo ka mid ah NGINX Ingress oo la xidhiidha muujinta boggaga khaladka shakhsi ahaaneed, iyo sidoo kale xaddidaadaha ka jira iyaga iyo siyaabaha looga shaqeeyo iyaga.

1. Beddelidda dhabarka dambe

Sida caadiga ah, NGINX Ingress waxay isticmaashaa dhabarka asalka ah, kaas oo qabta shaqada u dhiganta. Tani waxay ka dhigan tahay marka la codsanayo soo-galitaanka oo qeexaya martigeliyaha aan ku jirin agabka gudaha, waxaan heleynaa bogga soo socda oo leh 404 summada jawaabta:

Kubernetes talooyinka & tabaha: bogagga qaladka gaarka ah ee gudaha NGINX

Si kastaba ha ahaatee, marar badan iyo marar badan macaamiisheena waxay la yimaadaan codsi ah inay muujiyaan boggooda oo leh calaamadda shirkadda iyo adeegyada kale halkii ay ka ahaan lahaayeen heerka 404. Si tan loo sameeyo, NGINX Ingress ayaa leh karti ku dhisan dib u qeexid default-backend-service. Waxaanu u gudbinaa qaabka gelitaanka dood ahaan ikhtiyaarka isla magaca namespace/servicename. Dekadda adeeggu waa inay noqotaa 80.

Si tan loo sameeyo, waxaad u baahan tahay inaad abuurto sanduuqaaga (diridda) iyo adeegga codsigaaga (tusaale ahaan fulinta YAML Laga soo bilaabo kaydka ingress-nginx), kaas oo la siin doono bedelkii dhabarka hore.

Halkan waxaa ah sawir yar:

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

Markaa dhammaan domains-yada aan si cad loogu abuurin YAML leh kind: Ingress, ku dhaca dhabarka dambe. Liiska sare, domainkani wuxuu noqday sadsdasdas.

2. Wax ka qabashada khaladaadka HTTP ee arjiga iyadoo la isticmaalayo dhabarka caadiga ah

Xaalad kale ayaa ah codsiyada ku dhamaanaya khaladaadka HTTP (404, 500, 502...) codsi aan ka shaqaynayn xaaladahan oo kale (bogagga quruxda badan ee u dhigma lama soo saarin). Tani waxay sidoo kale laga yaabaa inay sabab u tahay rabitaanka horumarinta si ay ugu adeegaan bogag qalad ah oo isku mid ah codsiyo badan.

Si loo hirgeliyo kiiskan dhinaca server-ka waxaan u baahanahay:

  1. Raac tilmaamaha kore ee cutubka ku saabsan dhabarka dambe;
  2. Ku dar furaha isku xidhka nginx-ingress ConfigMap custom-http-errors, tusaale ahaan, oo leh qiimaha 404,503 (sida cad waxay u dhigantaa koodka qaladka ee uu daboolayo qaanuunka cusub).

Natiijadii la filayey waa la gaarey: marka codsiga macmiilku uu socdo oo uu helo qalad leh lambarka jawaabta 404 ama 503, codsiga waxaa si toos ah loogu wareejin doonaa dhabarka cusub ee asalka ah...

Si kastaba ha ahaatee, marka la samaynayo arji loogu talagalay dhabarka dambe iyo caadada-http- khaladaadka, waxaad u baahan tahay inaad tixgeliso sifo muhiim ah:

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

Xaqiiqdu waxay tahay in marka codsiga dib loo hagayo, madaxyadu waxay ka koobnaan doonaan macluumaad faa'iido leh oo leh koodkii jawaabta hore iyo macluumaad dheeraad ah (liiska dhamaystiran waa la heli karaa halkan).

Tani waxay la macno tahay in adiga laftaadu ay waajib tahay daryeesho code jawaabta saxda ah. Waa kan tusaale laga bilaabo dukumeentiyada sida ay u shaqeyso.

Codsiyada kala duwan waxay leeyihiin dib-u-celin hore oo kala duwan

Si loo hubiyo in xalku aanu ahayn mid caalami ah kooxda oo dhan, laakiin ay khusayso codsiyada gaarka ah, marka hore waxaad u baahan tahay inaad hubiso nooca Ingress-ka. Haddii ay ku habboon tahay 0.23 ama ka badan, adeegso sharraxaadda Ingress-ka asalka ah:

  1. Waan ka gudbi karnaa default-backend si ay u mid kasta Ingress's iyadoo la isticmaalayo tafsiir;
  2. Waan ka gudbi karnaa custom-http-errors si ay u mid kasta Ingress's iyadoo la isticmaalayo tafsiir.

Natiijo ahaan, kheyraadka Ingress-ka ayaa u ekaan doona sidan:

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

Xaaladdan oo kale, khaladaadka 404 iyo 502 ayaa loo wareejin doonaa adeegga boggaga khaladka leh dhammaan madaxyada lagama maarmaanka ah.

Π’ Noocyadii hore ee Ingress ma lahayn sifadan (Qiimaha ugu sarreeya saamiyada 0.23). Oo haddii aad haysato 2 codsi oo kala duwan oo ku dhex jira kooxdaada oo aad rabto inaad qeexdo adeeg-backend-ka duwan oo kala duwan iyo habaynta koodhadhka khaladaadka kala duwan mid kasta oo iyaga ka mid ah, tani waa inaad isticmaashaa xalal, kuwaas oo aanu laba ka mid ah hayno.

Soo galitaanka <0.23: u wajahid mid

Doorashadan ayaa ka fudud. Codsi ahaan u adeega bogaggiisa, waxaanu leenahay HTML joogto ah, kaas oo aan garanayn sida loo eego madaxyada oo u soo celiyo koodka jawaabta saxda ah. Codsigan oo kale waxa lagu soo rogey Ingress ka url /error-pages, iyo ku jira buugga ws waxay noqon doontaa HTML-ka la soo celiyay.

Sawirka 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

Adeegga geyntan waa inuu noqdaa nooca ClusterIP.

Isla mar ahaantaana, arjiga aan ka baaraandegi doono qaladka, gudaha Ingress waxaan ku darnaa server-snippet ama qaabeynta-snippet leh waxyaabaha soo socda:

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

Soo galitaanka <0.23: habka labaad

Ikhtiyaar ah codsiga ka shaqayn kara madaxyada Isticmaalka gacanta (koobiyaynta) waxay kuu ogolaanaysaa inaadan bedelin goobaha caalamiga ah.

Talaabooyinka waa sida soo socota. Waxaan abuurnaa isla geynta oo wata codsi dhageysan kara cinwaannada muhiimka ah oo si sax ah uga jawaabi kara. Ku dar qayb ka mid ah server-ka codsiga Ingress oo wata nuxurka soo socda:

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

Sida aad arki karto, qalad kasta oo aan rabno inaan ka shaqeyno, waxaan u baahanahay inaan sameyno meel noo gaar ah, halkaas oo dhammaan madaxyada lagama maarmaanka ah la gelin doono, sida mid "hooyo" ah. caadadii-qalada-boggaga. Sidan waxaan u abuuri karnaa bogag khalad ah oo shakhsi ahaaneed oo kala duwan xitaa meelaha gaarka ah iyo adeegayaasha.

PS

Wax kale oo ka mid ah talooyinka iyo tabaha K8s:

Sidoo kale ka akhri boggayaga:

Source: www.habr.com

Add a comment