Kubernetes fautuaga & togafiti: itulau sese masani ile NGINX Ingress

Kubernetes fautuaga & togafiti: itulau sese masani ile NGINX Ingress

I lenei tusiga, ou te fia talanoa e uiga i ni vaega se lua o le NGINX Ingress e fesoʻotaʻi ma le faʻaalia o itulau sese faʻapitoa, faʻapea foʻi ma tapulaʻa o loʻo i ai ia i latou ma auala e galue ai.

1. Suia le fa'ailoga pito i tua

Ona o le faaletonu, o le NGINX Ingress e faʻaaogaina le faʻaogaina o tua, lea e faʻatino ai galuega tutusa. O lona uiga pe a talosagaina se Ingress e faʻamaonia ai se talimalo e le oi totonu o punaoa Ingress, matou te mauaina le itulau o loʻo i lalo ma le 404 tali tali:

Kubernetes fautuaga & togafiti: itulau sese masani ile NGINX Ingress

Ae ui i lea, o le tele ma le tele o taimi e o mai ai a matou tagata faʻatau ma se talosaga e faʻaali a latou itulau ma se logo faʻapitoa ma isi mea lelei nai lo le tulaga masani 404. Ina ia faia lenei mea, NGINX Ingress ua mafai ona fausia i totonu toe faauigaina default-backend-service. Matou te pasi le faʻailoga faʻapipiʻi e fai ma finauga i le filifiliga o le igoa tutusa namespace/servicename. O le taulaga o le tautua e tatau ona 80.

Ina ia faia lenei mea, e tatau ona e fatuina lau lava pod (deployment) ma le tautua ma lau talosaga (faʻataʻitaʻiga faʻatinoga i le YAML mai le fale teu oloa ingress-nginx), lea o le a tuʻuina atu nai lo le faʻaletonu tua.

O se fa'ata'ita'iga la'ititi lea:

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

O lea la, vaega uma e le o faʻaalia manino e ala ile YAML ma kind: Ingress, pauu i le default-backend. I le lisi o loʻo i luga, na avea lenei vaega sadsdasdas.

2. Taulimaina o mea sese HTTP i le talosaga e faʻaaoga ai le backend le faʻaogaina

O le isi tulaga o talosaga e faʻamutaina i HTTP sese (404, 500, 502...) i se talosaga e le faʻaogaina ia tulaga (o itulau matagofie e fetaui e le gaosia). E mafai foi ona mafua lenei mea ona o le manaʻo o tagata atiaʻe e tautua ia lava itulau sese i le tele o talosaga.

Ina ia faʻatinoina lenei mataupu i le itu o le server matou te manaʻomia:

  1. Mulimuli i fa'atonuga o lo'o i luga mai le parakalafa e uiga i le fa'aletonu i tua;
  2. Faʻaopoopo se ki i le nginx-ingress configuration ConfigMap custom-http-errors, mo se faʻataʻitaʻiga, ma le tau 404,503 (e manino lava e fetaui ma tulafono sese o loʻo ufiufi e le tulafono fou).

Ua ausia le faʻamoemoega: pe a faʻagasolo le talosaga a le kalani ma maua se mea sese ma se tali tali o le 404 poʻo le 503, o le a otometi lava ona toe faʻafeiloaʻi le talosaga i le faʻailoga fou fou...

Ae ui i lea, pe a atiaʻe se talosaga mo le faʻaogaina o tua ma aga masani-http-sese, e tatau ona e amanaia se vaega taua:

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

O le mea moni pe a toe faʻafeiloaʻi se talosaga, o ulutala o le a aofia ai faʻamatalaga aoga ma le code tali muamua ma faʻamatalaga faaopoopo (o loʻo avanoa la latou lisi atoa. iinei).

O lona uiga o oe lava e tatau tausia lelei le code tali sa'o. O se faataitaiga lenei mai fa'amaumauga pe fa'apefea ona galue.

O talosaga eseese e ese'ese i tua fa'aletonu

Ina ia mautinoa o le fofo e le o le lalolagi atoa mo le fuifui atoa, ae e faʻaaogaina naʻo faʻaoga faʻapitoa, e te manaʻomia muamua le siakiina o le Ingress version. Afai e fetaui 0.23 pe sili atu, fa'aaoga fa'amatalaga Ingress:

  1. E mafai ona tatou faatoilaloina default-backend mo taʻitasi Ingress's fa'aaogā fa'amatalaga;
  2. E mafai ona tatou faatoilaloina custom-http-errors mo taʻitasi Ingress's fa'aaogā fa'amatalaga.

O se taunuuga, o le punaoa Ingress o le a foliga pei o lenei:

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

I lenei tulaga, o mea sese 404 ma 502 o le a toe faʻafeiloaʻi i le mea sese-itulau auaunaga ma ulutala talafeagai uma.

В O lomiga muamua o Ingress e leʻi iai lenei uiga (fa'amauina fa'amaoni ile 0.23). Ma afai e iai sau 2 faʻaoga eseese o loʻo taʻavale i totonu o lau fuifui ma e te manaʻo e faʻamaonia se eseʻesega-backend-auʻaunaga ma le faʻagasologa o faʻailoga sese eseese mo i latou taʻitasi, ona o lenei mea e tatau ona e faʻaogaina galuega, lea e lua a matou.

Ingress <0.23: fa'alatalata tasi

O lenei filifiliga e sili atu ona faigofie. I le avea ai ma se talosaga e tautuaina ona itulau, e iai a matou HTML masani, e le iloa pe faʻafefea ona vaʻai i ulutala ma toe faʻafoʻi tulafono tali saʻo. O sea talosaga o loʻo taʻavale i fafo ma Ingress mai le url /error-pages, ma i le lisi ws o le a toe faafoi HTML.

Fa'ata'ita'iga ile 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

Ole 'au'aunaga mo lenei fa'ata'ita'iga e tatau ona i ai ile ituaiga ClusterIP.

I le taimi lava e tasi, i le talosaga lea o le a matou faʻaogaina ai le mea sese, i Ingress matou te faʻaopoopoina se server-snippet poʻo se faʻapipiʻi-snippet ma mea nei:

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: auala lona lua

O se filifiliga mo se talosaga e mafai ona faʻagasolo ulutala ... Ma i se tulaga lautele o se auala sili atu lea, nono mai aganuʻu-http-errors. O le fa'aaogaina ma le lima (kopi) o le a fa'atagaina oe e le suia tulaga fa'alelalolagi.

O laasaga nei. Tatou te fatuina fa'apipi'i tutusa faʻatasi ai ma se talosaga e mafai ona faʻalogo i ulutala manaʻomia ma tali saʻo. Fa'aopoopo se server-snippet i le talosaga Ingress ma mea nei:

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

E pei ona mafai ona e vaʻaia, mo mea sese taʻitasi tatou te manaʻo e faʻatautaia, e manaʻomia ona tatou faia o tatou lava nofoaga, lea o le a faʻapipiʻi uma ai ulutala manaʻomia, e pei o le "native" tasi. aga'i-itulau sese. O le auala lea e mafai ai ona tatou fatuina itulau sese faʻapitoa faʻapitoa e oʻo lava mo nofoaga taʻitasi ma sapalai.

SALA

O isi mai le K8s tips & tricks series:

Faitau foi i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga