Toro-hevitra sy fika Kubernetes: pejy diso mahazatra ao amin'ny NGINX Ingress

Toro-hevitra sy fika Kubernetes: pejy diso mahazatra ao amin'ny NGINX Ingress

Amin'ity lahatsoratra ity, te hiresaka momba ny endri-javatra roa an'ny NGINX Ingress mifandraika amin'ny fampisehoana pejy diso manokana aho, ary koa ny fetra misy ao aminy sy ny fomba fiasa manodidina azy ireo.

1. Fanovana ny backend default

Amin'ny alàlan'ny default, NGINX Ingress dia mampiasa ny backend default, izay manatanteraka ny fiasa mifanaraka amin'izany. Midika izany fa rehefa mangataka Ingress manondro mpampiantrano izay tsy ao amin'ny loharanon'ny Ingress dia mahazo ity pejy manaraka ity miaraka amin'ny kaody valiny 404 izahay:

Toro-hevitra sy fika Kubernetes: pejy diso mahazatra ao amin'ny NGINX Ingress

Na izany aza, mihamaro hatrany ny mpanjifanay tonga miaraka amin'ny fangatahana hanehoana ny pejiny miaraka amin'ny marika orinasa sy fitaovana hafa fa tsy ny 404 mahazatra. Mba hanaovana izany, NGINX Ingress dia manana naorina-in fahaiza-manao manitsy default-backend-service. Mandalo ny fidirana amin'ny endrika ho tohan-kevitra amin'ny safidy mitovy anarana namespace/servicename. Tokony ho 80 ny seranan-tsambon'ny serivisy.

Mba hanaovana izany dia mila mamorona pod ianao (fametrahana) sy serivisy miaraka amin'ny fampiharana anao (ohatra fampiharana amin'ny YAML avy amin'ny tahiry ingress-nginx), izay homena fa tsy ny backend default.

Ity misy fanoharana kely:

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

Ka ny sehatra rehetra izay tsy noforonina mazava amin'ny YAML miaraka amin'ny kind: Ingress, latsaka ao amin'ny default-backend. Ao amin'ny lisitra etsy ambony dia lasa ity sehatra ity sadsdasdas.

2. Fikarakarana ny hadisoana HTTP amin'ny fampiharana amin'ny fampiasana ny backend default

Ny toe-javatra iray hafa dia ny fangatahana mifarana amin'ny hadisoana HTTP (404, 500, 502...) amin'ny rindranasa iray izay tsy manodina ny toe-javatra toy izany (tsy miforona ireo pejy tsara tarehy mifanaraka amin'izany). Mety ho noho ny fanirian'ny mpamorona ihany koa ny hanolotra pejy diso mitovy amin'ny fampiharana maro.

Mba hampiharana ity tranga ity amin'ny lafiny server dia mila:

  1. Araho ny toromarika etsy ambony avy amin'ny andalana momba ny backend default;
  2. Manampia lakile amin'ny configuration nginx-ingress ConfigMap custom-http-errors, ohatra, miaraka amin'ny sandany 404,503 (miharihary fa mifanitsy amin'ireo kaody diso izay rakotry ny fitsipika vaovao).

Tratra ny vokatra andrasana: rehefa mandeha ny fampiharana mpanjifa ary mahazo lesoka miaraka amin'ny kaody valiny 404 na 503, ny fangatahana dia haverina ho azy any amin'ny backend default vaovao...

Na izany aza, rehefa mamolavola rindranasa ho an'ny backend default sy custom-http-errors ianao dia mila mandinika endri-javatra manan-danja iray:

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

Ny zava-misy dia rehefa avadika ny fangatahana, ny lohapejy dia ahitana fampahalalana mahasoa miaraka amin'ny kaody valiny teo aloha sy fampahalalana fanampiny (misy ny lisitra feno. eto).

Midika izany fa ianao mihitsy no tsy maintsy tandremo ny kaody valiny marina. Ity misy ohatra iray avy amin'ny antontan-taratasy ny fomba fiasa.

Ny fampiharana isan-karazany dia manana backends hafa

Mba hahazoana antoka fa tsy manerantany ho an'ny cluster manontolo ny vahaolana, fa mihatra amin'ny fampiharana manokana ihany, dia mila manamarina ny dikan-teny Ingress aloha ianao. Raha mifanaraka 0.23 na ambony, ampiasao ny fanamarihana Ingress teratany:

  1. Afaka manapaka isika default-backend ho an'ny ny tsirairay Ingress's mampiasa annotation;
  2. Afaka manapaka isika custom-http-errors ho an'ny ny tsirairay Ingress's mampiasa annotation.

Vokatr'izany, ny loharano Ingress dia hiseho toy izao:

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

Amin'ity tranga ity, ny fahadisoana 404 sy 502 dia halefa any amin'ny serivisy pejy diso miaraka amin'ireo lohateny ilaina rehetra.

В Ny dikan-teny teo aloha an'ny Ingress dia tsy nanana an'io endri-javatra io (Fateful commit amin'ny 0.23). Ary raha manana rindranasa 2 samy hafa tanteraka ianao ao amin'ny klustero ary te-hametraka serivisy default-backend sy fanodinana ny kaody fahadisoana samihafa ho an'ny tsirairay amin'izy ireo ianao, noho izany dia tsy maintsy mampiasa workarounds ianao, izay ananantsika roa.

Ingress <0.23: manatona ny iray

Ity safidy ity dia tsotra kokoa. Amin'ny maha-fampiharana manompo ny pejiny dia manana HTML mahazatra izahay, izay tsy mahafantatra ny fomba fijerena ny lohapejy sy mamerina ny kaody valiny marina. Ny fampiharana toy izany dia navoaka miaraka amin'ny Ingress avy amin'ny url /error-pages, ary ao amin'ny katalaogy ws dia ny HTML naverina.

Fanoharana amin'ny 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

Ny serivisy ho an'ity fametrahana ity dia tokony ho karazana ClusterIP.

Amin'izay fotoana izay ihany koa, ao amin'ny fampiharana izay handinihantsika ny hadisoana, ao amin'ny Ingress dia manampy sombin-server na snippet amin'ny configuration miaraka amin'ireto atiny manaraka ireto:

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: fomba faharoa

Safidy ho an'ny rindranasa afaka manodina lohapejy... Ary amin'ny ankapobeny dia fomba marina kokoa ity, nindramina tamin'ny custom-http-errors. Ny fampiasana azy amin'ny tanana (madika) dia ahafahanao tsy manova ny toe-javatra manerantany.

Toy izao manaraka izao ny dingana. Mamorona isika mitovy deployment miaraka amin'ny fampiharana afaka mihaino ny lohateny ilaina ary mamaly tsara. Ampio sombin-server amin'ny fampiharana Ingress miaraka amin'ireto atiny manaraka ireto:

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

Araka ny hitanao, ho an'ny fahadisoana tsirairay tiantsika hokarakaraina dia mila manao ny toerana misy antsika isika, izay hampidirana ny lohateny ilaina rehetra, toy ny ao amin'ny "teratany". custom-error-pages. Amin'izany fomba izany no ahafahantsika mamorona pejy diso manokana na dia ho an'ny toerana sy mpizara tsirairay aza.

Sal

Hafa avy amin'ny andiany toro-hevitra sy fika K8s:

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment