Molaidhean is cleasan Kubernetes: duilleagan mearachd àbhaisteach ann an NGINX Ingress

Molaidhean is cleasan Kubernetes: duilleagan mearachd àbhaisteach ann an NGINX Ingress

San artaigil seo, tha mi airson bruidhinn mu dhà fheart de NGINX Ingress co-cheangailte ri bhith a’ taisbeanadh duilleagan mearachd pearsanaichte, a bharrachd air na crìochan a tha annta agus dòighean air obrachadh timcheall orra.

1. Ag atharrachadh an backend bunaiteach

Gu gnàthach, bidh NGINX Ingress a’ cleachdadh an backend bunaiteach, a choileanas an gnìomh co-fhreagarrach. Tha seo a’ ciallachadh nuair a dh’ iarras sinn Ingress a’ sònrachadh aoigh nach eil ann an goireasan Ingress, gum faigh sinn an duilleag a leanas le còd freagairt 404:

Molaidhean is cleasan Kubernetes: duilleagan mearachd àbhaisteach ann an NGINX Ingress

Ach, mar as trice bidh ar luchd-dèiligidh a’ tighinn le iarrtas airson an duilleag aca a nochdadh le suaicheantas corporra agus goireasan eile an àite an inbhe 404. Gus seo a dhèanamh, tha aig NGINX Ingress comas air a thogail a-steach ath-mhìneachadh default-backend-service. Bheir sinn seachad an inntrig cruth mar argamaid don roghainn den aon ainm namespace/servicename. Bu chòir port na seirbheis a bhith 80.

Gus seo a dhèanamh, feumaidh tu am pod agad fhèin (cleachdadh) agus seirbheis a chruthachadh leis an tagradh agad (eisimpleir de bhuileachadh ann an YAML bhon stòr ingress-nginx), a thèid a thoirt seachad an àite an backend bunaiteach.

Seo dealbh beag:

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

Mar sin tha a h-uile àrainn nach eil air a chruthachadh gu soilleir tro YAML le kind: Ingress, tuiteam a-steach gu default-backend. Anns an liosta gu h-àrd, thàinig an raon seo gu bhith sadsdasdas.

2. A’ làimhseachadh mhearachdan HTTP san tagradh a’ cleachdadh an backend bunaiteach

Is e suidheachadh eile iarrtasan a thig gu crìch ann am mearachdan HTTP (404, 500, 502 ...) gu tagradh nach bi a’ làimhseachadh an leithid de shuidheachaidhean (chan eil na duilleagan brèagha co-fhreagarrach air an gineadh). Is dòcha gu bheil seo cuideachd mar thoradh air miann luchd-leasachaidh na h-aon duilleagan mearachd a fhrithealadh ann an grunn thagraidhean.

Gus a’ chùis seo a chuir an gnìomh air taobh an fhrithealaiche feumaidh sinn:

  1. Lean an stiùireadh gu h-àrd bhon pharagraf mu backend bunaiteach;
  2. Cuir iuchair ris an rèiteachadh nginx-ingress ConfigMap custom-http-errors, mar eisimpleir, leis an luach 404,503 (gu follaiseach a’ freagairt ris na còdan mearachd a tha air an còmhdach leis an riaghailt ùr).

Chaidh an toradh ris a bheil dùil a choileanadh: nuair a bhios an tagradh teachdaiche a’ ruith agus a gheibh e mearachd le còd freagairt 404 no 503, thèid an t-iarrtas ath-stiùireadh gu fèin-ghluasadach chun backend bunaiteach ùr ...

Ach, nuair a bhios tu a’ leasachadh tagradh airson backend bunaiteach agus mearachdan gnàthaichte-http, feumaidh tu feart cudromach a thoirt fa-near:

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

Is e an fhìrinn, nuair a thèid iarrtas ath-stiùireadh, gum bi fiosrachadh feumail anns na cinn leis a’ chòd freagairt roimhe agus fiosrachadh a bharrachd (tha an liosta iomlan aca ri fhaighinn an seo).

Tha seo a’ ciallachadh gum feum thu fhèin thoir an aire don chòd freagairt ceart. Seo eisimpleir bho na sgrìobhainnean mar a tha e ag obair.

Tha cùl-taic bunaiteach eadar-dhealaichte aig diofar thagraidhean

Gus dèanamh cinnteach nach eil am fuasgladh cruinneil airson a’ bhuidheann gu lèir, ach nach eil e a’ buntainn ach ri tagraidhean sònraichte, feumaidh tu an toiseach sgrùdadh a dhèanamh air dreach Ingress. Ma tha e co-ionnan 0.23 no nas àirde, cleachd na notaichean dùthchasach Ingress:

  1. Faodaidh sinn a dhol thairis air default-backend airson gach fear Ingress's a’ cleachdadh notaichean;
  2. Faodaidh sinn a dhol thairis air custom-http-errors airson gach fear Ingress's a’ cleachdadh notaichean.

Mar thoradh air an sin, seallaidh goireas Ingress rudeigin mar seo:

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

Anns a ’chùis seo, thèid mearachdan 404 agus 502 ath-stiùireadh chun t-seirbheis duilleag-mearachd leis na cinn-cinn riatanach uile.

В cha robh am feart seo aig dreachan roimhe de Ingress (an ìre iomlaid de 0.23 Euro). Agus ma tha 2 thagradh gu tur eadar-dhealaichte agad a’ ruith sa bhuidheann agad agus gu bheil thu airson seirbheis cùl-taic bunaiteach eadar-dhealaichte a shònrachadh agus giullachd còdan mearachd eadar-dhealaichte airson gach fear dhiubh, airson seo feumaidh tu dòighean-obrach a chleachdadh, agus tha dhà dhiubh sin againn.

Ingress < 0.23: faisg air a h-aon

Tha an roghainn seo nas sìmplidh. Mar thagradh a tha a’ frithealadh a dhuilleagan, tha HTML cunbhalach againn, aig nach eil fios ciamar a choimheadas tu air na cinn-cinn agus na còdan freagairt ceart a thilleadh. Tha tagradh mar seo air a sgaoileadh a-mach le Ingress bhon url /error-pages, agus anns a’ chatalog ws bidh an HTML air a thilleadh.

Dealbh ann an 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

Feumaidh an t-seirbheis airson an cleachdadh seo a bhith den t-seòrsa ClusterIP.

Aig an aon àm, anns an tagradh far an làimhsich sinn a’ mhearachd, ann an Ingress cuiridh sinn criomag frithealaiche no criomag rèiteachaidh leis an t-susbaint a leanas:

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: an dàrna dòigh-obrach

Roghainn airson tagradh a dh'fhaodas cinn-cinn a làimhseachadh... Agus san fharsaingeachd 's e dòigh nas ceart a tha seo, air iasad bho mhearachdan gnàthaichte-http. Le bhith ga chleachdadh le làimh (lethbhreac) leigidh sin leat gun a bhith ag atharrachadh roghainnean cruinneil.

Tha na ceumannan mar a leanas. Bidh sinn a 'cruthachadh an aon cleachdadh le tagradh as urrainn èisteachd ris na cinn-naidheachd riatanach agus freagairt ceart. Cuir criomag frithealaiche ris an tagradh Ingress leis an t-susbaint a leanas:

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

Mar a chì thu, airson gach mearachd a tha sinn airson a phròiseasadh, feumaidh sinn ar n-àite fhèin a dhèanamh, far an tèid na cinn-cinn riatanach uile a chuir a-steach, mar anns an fhear “dùthchasach”. custom-mearachd-duilleagan. San dòigh seo is urrainn dhuinn diofar dhuilleagan mearachd pearsanaichte a chruthachadh eadhon airson àiteachan fa-leth agus frithealaichean.

PS

Eile bhon t-sreath molaidhean & cleasan K8s:

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann