Awọn imọran Kubernetes & ẹtan: awọn oju-iwe aṣiṣe aṣa ni NGINX Ingress

Awọn imọran Kubernetes & ẹtan: awọn oju-iwe aṣiṣe aṣa ni NGINX Ingress

Ninu àpilẹkọ yii, Mo fẹ lati sọrọ nipa awọn ẹya meji ti NGINX Ingress ti o ni ibatan si ifihan awọn oju-iwe aṣiṣe ti ara ẹni, bakannaa awọn idiwọn ti o wa ninu wọn ati awọn ọna lati ṣiṣẹ ni ayika wọn.

1. Yiyipada awọn aiyipada backend

Nipa aiyipada, NGINX Ingress nlo ẹhin aiyipada, eyiti o ṣe iṣẹ ti o baamu. Eyi tumọ si pe nigba ti o ba beere fun Ingress kan ti n ṣalaye agbalejo ti ko si ninu awọn orisun Ingress, a gba oju-iwe atẹle pẹlu koodu esi 404 kan:

Awọn imọran Kubernetes & ẹtan: awọn oju-iwe aṣiṣe aṣa ni NGINX Ingress

Bibẹẹkọ, siwaju ati siwaju sii nigbagbogbo awọn alabara wa pẹlu ibeere lati ṣafihan oju-iwe wọn pẹlu aami ile-iṣẹ kan ati awọn ohun elo miiran dipo boṣewa 404. Lati ṣe eyi, NGINX Ingress ni -itumọ ti ni agbara tunto default-backend-service. A ṣe titẹsi ọna kika bi ariyanjiyan si aṣayan ti orukọ kanna namespace/servicename. Ibudo iṣẹ yẹ ki o jẹ 80.

Lati ṣe eyi, o nilo lati ṣẹda adarọ-ese (imuṣiṣẹ) ati iṣẹ pẹlu ohun elo rẹ (imuse apẹẹrẹ ni YAML lati ibi ipamọ ingress-nginx), eyi ti yoo fun ni dipo afẹyinti aiyipada.

Eyi ni apejuwe kekere kan:

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

Nitorinaa gbogbo awọn ibugbe ti a ko ṣẹda ni gbangba nipasẹ YAML pẹlu kind: Ingress, subu sinu aiyipada-pada. Ninu atokọ ti o wa loke, agbegbe yii di sadsdasdas.

2. Mimu HTTP aṣiṣe ninu awọn ohun elo lilo awọn aiyipada backend

Ipo miiran jẹ awọn ibeere ti o pari ni awọn aṣiṣe HTTP (404, 500, 502...) si ohun elo ti ko ṣe ilana iru awọn ipo (awọn oju-iwe lẹwa ti o baamu ko ṣe ipilẹṣẹ). Eyi tun le jẹ nitori ifẹ ti awọn olupilẹṣẹ lati sin awọn oju-iwe aṣiṣe kanna ni awọn ohun elo lọpọlọpọ.

Lati ṣe ọran yii ni ẹgbẹ olupin a nilo:

  1. Tẹle awọn itọnisọna loke lati paragira nipa ẹhin aiyipada;
  2. Ṣafikun bọtini kan si atunto nginx-ingress ConfigMap custom-http-errors, fun apẹẹrẹ, pẹlu iye 404,503 (o han ni ibamu si awọn koodu aṣiṣe ti o ni aabo nipasẹ ofin titun).

Abajade ti a nireti ti ṣaṣeyọri: nigbati ohun elo alabara n ṣiṣẹ ati gba aṣiṣe pẹlu koodu idahun 404 tabi 503, ibeere naa yoo darí laifọwọyi si ẹhin aiyipada aiyipada tuntun…

Sibẹsibẹ, nigbati o ba n ṣe agbekalẹ ohun elo kan fun afẹyinti aiyipada ati awọn aṣiṣe http-aṣa, o nilo lati ṣe akiyesi ẹya pataki kan:

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

Otitọ ni pe nigba ti o ba ṣe atunṣe ibeere kan, awọn akọle yoo ni alaye ti o wulo pẹlu koodu esi iṣaaju ati alaye afikun (akojọ pipe wọn wa. nibi).

Eyi tumọ si pe iwọ funrararẹ gbọdọ ṣe abojuto koodu idahun ti o tọ. Eyi jẹ apẹẹrẹ. lati awọn iwe bi o ti ṣiṣẹ.

Awọn ohun elo oriṣiriṣi ni oriṣiriṣi awọn ẹhin aiyipada

Lati rii daju pe ojutu ko ni agbaye fun gbogbo iṣupọ, ṣugbọn kan si awọn ohun elo kan pato, o nilo akọkọ lati ṣayẹwo ẹya Ingress. Ti o ba baamu 0.23 tabi ju bẹẹ lọ, lo awọn asọye Ingress abinibi:

  1. A le bori default-backend fun ti kọọkan Ingress ká lilo annotations;
  2. A le bori custom-http-errors fun ti kọọkan Ingress ká lilo annotations.

Bi abajade, orisun Ingress yoo dabi nkan bi eyi:

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

Ni idi eyi, awọn aṣiṣe 404 ati 502 yoo darí si iṣẹ awọn oju-iwe aṣiṣe pẹlu gbogbo awọn akọle pataki.

В Awọn ẹya ti tẹlẹ ti Ingress ko ni ẹya yii (fateful ṣẹ ni 0.23). Ati pe ti o ba ni awọn ohun elo 2 ti o yatọ patapata ti o nṣiṣẹ ninu iṣupọ rẹ ati pe o fẹ lati pato iṣẹ-aṣiṣe-pada-pada ti o yatọ ati sisẹ awọn koodu aṣiṣe oriṣiriṣi fun ọkọọkan wọn, fun eyi iwọ yoo ni lati lo awọn adaṣe, eyiti a ni meji.

Ilọsi <0.23: sunmọ ọkan

Aṣayan yii rọrun. Gẹgẹbi ohun elo ti o nṣe iranṣẹ awọn oju-iwe rẹ, a ni HTML deede, eyiti ko mọ bi o ṣe le wo awọn akọle ati pada awọn koodu esi to pe. Iru ohun elo kan ti yiyi jade pẹlu Ingress lati url /error-pages, ati ninu awọn katalogi ws yoo jẹ HTML ti o pada.

Àpèjúwe nínú 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

Iṣẹ fun imuṣiṣẹ yii gbọdọ jẹ ti iru ClusterIP.

Ni akoko kanna, ninu ohun elo nibiti a yoo ṣe ilana aṣiṣe, ni Ingress a ṣafikun snippet olupin tabi iṣeto-snippet pẹlu akoonu atẹle:

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: ọna keji

Aṣayan fun ohun elo kan ti o le ṣe ilana awọn akọle ... Ati ni gbogbogbo eyi jẹ ọna ti o pe diẹ sii, yawo lati awọn aṣiṣe-http-aṣiṣe. Lilo pẹlu ọwọ (daakọ) yoo gba ọ laaye lati yi awọn eto agbaye pada.

Awọn igbesẹ jẹ bi atẹle. A ṣẹda kanna imuṣiṣẹ pẹlu ohun elo ti o le tẹtisi awọn akọle pataki ati dahun ni deede. Ṣafikun-snippet olupin kan si ohun elo Ingress pẹlu akoonu atẹle:

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

Bii o ti le rii, fun aṣiṣe kọọkan ti a fẹ ṣe ilana, a nilo lati ṣe ipo tiwa, nibiti gbogbo awọn akọle pataki yoo fi sii, bi ninu “abinibi” ọkan. aṣa-aṣiṣe-iwe. Ni ọna yii a le ṣẹda awọn oju-iwe aṣiṣe ti ara ẹni ti o yatọ paapaa fun awọn ipo kọọkan ati awọn olupin.

PS

Miiran lati awọn imọran ati ẹtan K8s jara:

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun