Awgrymiadau a thriciau Kubernetes: tudalennau gwall personol yn NGINX Ingress

Awgrymiadau a thriciau Kubernetes: tudalennau gwall personol yn NGINX Ingress

Yn yr erthygl hon, rwyf am siarad am ddwy nodwedd NGINX Ingress sy'n ymwneud ag arddangos tudalennau gwall personol, yn ogystal Γ’'r cyfyngiadau sy'n bodoli ynddynt a ffyrdd o weithio o'u cwmpas.

1. Newid y backend rhagosodedig

Yn ddiofyn, mae NGINX Ingress yn defnyddio'r backend rhagosodedig, sy'n cyflawni'r swyddogaeth gyfatebol. Mae hyn yn golygu, wrth ofyn am Ingress yn nodi gwesteiwr nad yw yn adnoddau Ingress, ein bod yn derbyn y dudalen ganlynol gyda chod ymateb 404:

Awgrymiadau a thriciau Kubernetes: tudalennau gwall personol yn NGINX Ingress

Fodd bynnag, yn amlach na pheidio mae ein cleientiaid yn dod Γ’ chais i ddangos eu tudalen gyda logo corfforaethol ac amwynderau eraill yn lle'r safon 404. I wneud hyn, mae gan NGINX Ingress gallu adeiledig ailddiffinio default-backend-service. Rydym yn trosglwyddo'r cofnod fformat fel dadl i'r opsiwn o'r un enw namespace/servicename. Dylai porthladd y gwasanaeth fod yn 80.

I wneud hyn, mae angen i chi greu eich pod (defnydd) a'ch gwasanaeth eich hun gyda'ch cais (gweithredu enghreifftiol yn YAML o'r ystorfa ingress-nginx), a roddir yn lle'r backend rhagosodedig.

Dyma enghraifft fach:

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

Felly pob parth nad yw'n cael ei greu yn benodol trwy YAML gyda kind: Ingress, disgyn i mewn i default-backend. Yn y rhestriad uchod, daeth y parth hwn sadsdasdas.

2. Trin gwallau HTTP yn y cais gan ddefnyddio'r backend rhagosodedig

Sefyllfa arall yw ceisiadau sy'n gorffen Γ’ gwallau HTTP (404, 500, 502...) i raglen nad yw'n prosesu sefyllfaoedd o'r fath (ni chynhyrchir y tudalennau hardd cyfatebol). Gall hyn hefyd fod oherwydd awydd datblygwyr i wasanaethu'r un tudalennau gwall mewn cymwysiadau lluosog.

I weithredu'r achos hwn ar ochr y gweinydd mae angen:

  1. Dilynwch y cyfarwyddiadau uchod o'r paragraff am backend rhagosodedig;
  2. Ychwanegu allwedd i'r ffurfwedd nginx-ingress ConfigMap custom-http-errors, er enghraifft, gyda'r gwerth 404,503 (yn amlwg yn cyfateb i'r codau gwall a gwmpesir gan y rheol newydd).

Mae'r canlyniad disgwyliedig wedi'i gyflawni: pan fydd y rhaglen cleient yn rhedeg ac yn derbyn gwall gyda chod ymateb 404 neu 503, bydd y cais yn cael ei ailgyfeirio'n awtomatig i'r backend diofyn newydd ...

Fodd bynnag, wrth ddatblygu cais ar gyfer backend diofyn a gwallau-http-arfer, mae angen i chi ystyried nodwedd bwysig:

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

Y ffaith yw pan fydd cais yn cael ei ailgyfeirio, bydd y penawdau yn cynnwys gwybodaeth ddefnyddiol gyda'r cod ymateb blaenorol a gwybodaeth ychwanegol (mae eu rhestr gyflawn ar gael yma).

Mae hyn yn golygu bod yn rhaid i chi eich hun gofalu am y cod ymateb cywir. Dyma enghraifft o'r ddogfennaeth sut mae'n gweithio.

Mae gan wahanol gymwysiadau Γ΄l-daliadau diofyn gwahanol

Er mwyn sicrhau nad yw'r datrysiad yn fyd-eang ar gyfer y clwstwr cyfan, ond yn berthnasol i gymwysiadau penodol yn unig, yn gyntaf mae angen i chi wirio'r fersiwn Ingress. Os yw'n cyfateb 0.23 neu uwch, defnyddiwch yr anodiadau Ingress brodorol:

  1. Gallwn ddiystyru default-backend gyfer yr un Ingress's defnyddio anodiadau;
  2. Gallwn ddiystyru custom-http-errors gyfer yr un Ingress's defnyddio anodiadau.

O ganlyniad, bydd adnodd Ingress yn edrych rhywbeth fel hyn:

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

Yn yr achos hwn, bydd gwallau 404 a 502 yn cael eu hailgyfeirio i'r gwasanaeth tudalennau gwall gyda'r holl benawdau angenrheidiol.

Π’ nid oedd gan fersiynau blaenorol o Ingress y nodwedd hon (ymrwymiad tyngedfennol am 0.23). Ac os oes gennych 2 raglen hollol wahanol yn rhedeg yn eich clwstwr a'ch bod am nodi gwasanaeth Γ΄l-gefn rhagosodedig gwahanol a phrosesu gwahanol godau gwall ar gyfer pob un ohonynt, ar gyfer hyn bydd yn rhaid i chi ddefnyddio atebion, ac mae gennym ddau ohonynt.

Mynd i mewn < 0.23: dynesu at un

Mae'r opsiwn hwn yn symlach. Fel cymhwysiad sy'n gwasanaethu ei dudalennau, mae gennym HTML rheolaidd, nad yw'n gwybod sut i edrych ar y penawdau a dychwelyd y codau ymateb cywir. Mae cais o'r fath yn cael ei gyflwyno gydag Ingress o'r url /error-pages, ac yn y catalog ws fydd yr HTML a ddychwelwyd.

Darlun yn 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

Rhaid i'r gwasanaeth ar gyfer y defnydd hwn fod o'r math ClusterIP.

Ar yr un pryd, yn y rhaglen lle byddwn yn prosesu'r gwall, yn Ingress rydym yn ychwanegu pyt gweinydd neu ddarn cyfluniad gyda'r cynnwys canlynol:

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

Mynd i mewn < 0.23: ail ddull

Opsiwn ar gyfer cymhwysiad sy'n gallu prosesu penawdau... Ac yn gyffredinol mae hon yn ffordd fwy cywir, wedi'i benthyca o custom-http-errors. Bydd ei ddefnyddio Γ’ llaw (copΓ―o) yn caniatΓ‘u ichi beidio Γ’ newid gosodiadau byd-eang.

Mae'r camau fel a ganlyn. Rydym yn creu yr un defnydd gyda chymhwysiad sy'n gallu gwrando ar y penawdau angenrheidiol ac ymateb yn gywir. Ychwanegu pyt gweinydd i raglen Ingress gyda'r cynnwys canlynol:

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

Fel y gallwch weld, ar gyfer pob gwall yr ydym am ei brosesu, mae angen i ni wneud ein lleoliad ein hunain, lle bydd yr holl benawdau angenrheidiol yn cael eu mewnosod, fel yn yr un β€œbrodorol”. arfer-gwall-tudalennau. Fel hyn gallwn greu gwahanol dudalennau gwall personol hyd yn oed ar gyfer lleoliadau unigol a gweinyddwyr.

PS

Arall o gyfres awgrymiadau a thriciau K8s:

Darllenwch hefyd ar ein blog:

Ffynhonnell: hab.com

Ychwanegu sylw