Leideanna & cleasanna Kubernetes: leathanaigh earráide saincheaptha in NGINX Ingress

Leideanna & cleasanna Kubernetes: leathanaigh earráide saincheaptha in NGINX Ingress

San Airteagal seo, ba mhaith liom labhairt faoi dhá ghné de NGINX Ingress a bhaineann le leathanaigh earráide pearsantaithe a thaispeáint, chomh maith leis na teorainneacha atá iontu agus bealaí chun oibriú timpeall orthu.

1. Athrú ar an inneall réamhshocraithe

De réir réamhshocraithe, úsáideann NGINX Ingress an t-inneall réamhshocraithe, a chomhlíonann an fheidhm chomhfhreagrach. Ciallaíonn sé seo, nuair a iarrann Ingress óstach nach bhfuil sna hacmhainní Ingress, go bhfaighimid an leathanach seo a leanas le cód freagartha 404:

Leideanna & cleasanna Kubernetes: leathanaigh earráide saincheaptha in NGINX Ingress

Mar sin féin, níos mó agus níos minice a thagann ár gcliaint le hiarratas chun a leathanach a thaispeáint le lógó corparáideach agus áiseanna eile in ionad an 404 caighdeánach. Chun seo a dhéanamh, tá NGINX Ingress cumas ionsuite ath-shainmhíniú default-backend-service. Gabhaimid an iontráil formáide mar argóint chuig an rogha den ainm céanna namespace/servicename. Ba cheart go mbeadh port na seirbhíse 80.

Chun seo a dhéanamh, ní mór duit do pod féin (imscaradh) agus seirbhís a chruthú le d'iarratas (cur i bhfeidhm shamplach in YAML ón stór ingress-nginx), a thabharfar in ionad an inneall réamhshocraithe.

Seo léiriú 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, gach fearann ​​nach bhfuil cruthaithe go sainráite trí YAML le kind: Ingress, titim isteach réamhshocraithe-backend. Sa liosta thuas, tháinig an fearann ​​seo sadsdasdas.

2. Déileáil le hearráidí HTTP san iarratas ag baint úsáide as an inneall réamhshocraithe

Staid eile is ea iarratais a chríochnaíonn le hearráidí HTTP (404, 500, 502...) ar fheidhmchlár nach bpróiseálann cásanna den sórt sin (ní ghintear na leathanaigh áille comhfhreagracha). D'fhéadfadh sé seo a bheith mar gheall ar mhian na bhforbróirí na leathanaigh earráide céanna a sheirbheáil in ilfheidhmchláir.

Chun an cás seo a chur i bhfeidhm ar thaobh an fhreastalaí ní mór dúinn:

  1. Lean na treoracha thuas ón alt faoi inneall réamhshocraithe;
  2. Cuir eochair leis an chumraíocht nginx-ingress ConfigMap custom-http-errors, mar shampla, leis an luach 404,503 (is léir go gcomhfhreagraíonn sé do na cóid earráide atá clúdaithe ag an riail nua).

Baineadh amach an toradh a bhfuiltear ag súil leis: nuair a bhíonn feidhmchlár an chliaint ag rith agus nuair a fhaigheann sé earráid le cód freagartha 404 nó 503, déanfar an t-iarratas a atreorú go huathoibríoch chuig an inneall réamhshocraithe nua...

Mar sin féin, agus feidhmchlár á fhorbairt le haghaidh inneall réamhshocraithe agus earráidí saincheaptha-http, ní mór duit gné thábhachtach a chur san áireamh:

!!! 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 é fírinne an scéil, nuair a atreoraítear iarratas, go mbeidh faisnéis úsáideach sna ceannteidil leis an gcód freagartha roimhe seo agus faisnéis bhreise (tá a liosta iomlán ar fáil anseo).

Ciallaíonn sé seo go gcaithfidh tú féin aire a thabhairt don chód freagartha ceart. Seo sampla ón doiciméadú conas a oibríonn sé.

Tá backends réamhshocraithe éagsúla ag feidhmchláir éagsúla

Chun a chinntiú nach bhfuil an réiteach domhanda don bhraisle iomlán, ach nach mbaineann sé ach le feidhmchláir shonracha, ní mór duit an leagan Ingress a sheiceáil ar dtús. Má oireann sé 0.23 nó níos airde, úsáid na nótaí dúchasacha Ingress:

  1. Is féidir linn a shárú default-backend le haghaidh gach Ingress ar ag baint úsáide as nótaí;
  2. Is féidir linn a shárú custom-http-errors le haghaidh gach Ingress ar ag baint úsáide as nótaí.

Mar thoradh air sin, beidh cuma mar seo ar acmhainn Ingress:

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 chás seo, déanfar earráidí 404 agus 502 a atreorú chuig an tseirbhís leathanaigh earráide leis na ceanntásca riachtanacha go léir.

В ní raibh an ghné seo ag leaganacha roimhe seo de Ingress (gealltanas cinniúnach ar 0.23). Agus má tá 2 fheidhmchlár go hiomlán difriúil agat ag rith i do bhraisle agus gur mhaith leat backend-seirbhís réamhshocraithe difriúil a shonrú agus cóid earráide éagsúla a phróiseáil le haghaidh gach ceann acu, beidh ort réitigh oibre a úsáid, agus tá dhá cheann acu sin againn.

Ingress < 0.23: cuir chuige a haon

Tá an rogha seo níos simplí. Mar fheidhmchlár a fhreastalaíonn ar a leathanaigh, tá HTML rialta againn, nach bhfuil a fhios conas breathnú ar na ceanntásca agus na cóid freagartha cearta a sheoladh ar ais. Déantar feidhmchlár den sórt sin a rolladh amach le Ingress ón url /error-pages, agus sa chatalóg ws beidh an HTML ar ais.

Léaráid in 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

Caithfidh an tseirbhís don imscaradh seo a bheith den chineál ClusterIP.

Ag an am céanna, san fheidhmchlár ina bpróiseálfaimid an earráid, cuirimid isteach in Ingress blúire freastalaí nó blúire cumraíochta leis an ábhar seo 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 dara cur chuige

Rogha d'fheidhmchlár atá in ann ceanntásca a phróiseáil... Agus go ginearálta is bealach níos ceart é seo, a fuarthas ar iasacht ó earráidí saincheaptha-http. Má úsáideann tú é de láimh (cóipeáil) ní bheidh tú in ann socruithe domhanda a athrú.

Is iad seo a leanas na céimeanna. Cruthaímid imscaradh céanna le feidhmchlár atá in ann éisteacht leis na ceannlínte riachtanacha agus freagairt i gceart. Cuir blúire freastalaí leis an bhfeidhmchlár Ingress leis an ábhar seo 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 fheiceann tú, le haghaidh gach earráid a theastaíonn uainn a phróiseáil, ní mór dúinn ár suíomh féin a dhéanamh, ina gcuirfear na ceannteidil riachtanacha go léir isteach, mar atá sa cheann “dúchais”. saincheaptha-earráid-leathanaigh. Ar an mbealach seo is féidir linn leathanaigh earráide pearsantaithe éagsúla a chruthú fiú le haghaidh láithreacha agus freastalaithe aonair.

PS

Eile ón tsraith leideanna & cleasanna K8s:

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment