Malebela le maqheka a Kubernetes: maqephe a phoso a tloaelo ho NGINX Ingress

Malebela le maqheka a Kubernetes: maqephe a phoso a tloaelo ho NGINX Ingress

Sehloohong sena, ke batla ho bua ka likarolo tse peli tsa NGINX Ingress tse amanang le ho bonts'a maqephe a phoso a motho ka mong, hammoho le mefokolo e teng ho bona le litsela tsa ho sebetsa ho pota-pota.

1. Ho fetola maemo a ka morao a kamehla

Ka ho feletseng, NGINX Ingress e sebelisa backend ea kamehla, e etsang mosebetsi o tšoanang. Sena se bolela hore ha re kopa Ingress e hlalosang moamoheli ea seng mehloling ea Ingress, re amohela leqephe le latelang ka khoutu ea karabo ea 404:

Malebela le maqheka a Kubernetes: maqephe a phoso a tloaelo ho NGINX Ingress

Leha ho le joalo, hangata bareki ba rona ba tla le kopo ea ho bonts'a leqephe la bona le logo ea khoebo le lisebelisoa tse ling ho fapana le 404 e tloaelehileng. Ho etsa sena, NGINX Ingress e na le bokgoni bo ahelletsoeng hlalosa bocha default-backend-service. Re fetisa sengoloa sa sebopeho joalo ka khang ho khetho ea lebitso le le leng namespace/servicename. Boema-kepe ba tšebeletso e lokela ho ba 80.

Ho etsa sena, o hloka ho iketsetsa pod (phepelo) le ts'ebeletso ka kopo ea hau (mohlala oa ts'ebetsong ho YAML ho tloha polokelong ea ingress-nginx), e tla fanoa sebakeng sa backend ea kamehla.

Mona ke papiso e nyane:

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

Kahoo libaka tsohle tse sa etsoang ka mokhoa o hlakileng ka YAML ka kind: Ingress, oela ho default-backend. Lethathamong le ka holimo, sebaka sena se ile sa fetoha sadsdasdas.

2. Ho sebetsana le liphoso tsa HTTP ts'ebelisong ho sebelisa mokhoa oa ho khutlisa oa kamehla

Boemo bo bong ke likopo tse qetellang ka liphoso tsa HTTP (404, 500, 502 ...) ho kopo e sa sebetsaneng le maemo a joalo (maqephe a matle a tšoanang ha a hlahisoe). Sena se kanna sa bakoa ke takatso ea baetsi ba ho sebeletsa maqephe a tšoanang a liphoso lits'ebetsong tse ngata.

Ho kenya ts'ebetsong nyeoe ena lehlakoreng la seva re hloka:

  1. Latela litaelo tse ka holimo ho tloha serapeng mabapi le backend ea kamehla;
  2. Kenya senotlolo ho nginx-ingress configuration ConfigMap custom-http-errors, mohlala, ka boleng 404,503 (ho hlakile hore e lumellana le likhoutu tsa liphoso tse koahetsoeng ke molao o mocha).

Sephetho se lebelletsoeng se fihletsoe: ha kopo ea moreki e ntse e sebetsa mme e fumana phoso ka khoutu ea karabelo ea 404 kapa 503, kopo e tla fetisetsoa ka bo eona ho backend e ncha ea kamehla ...

Leha ho le joalo, ha u nts'etsapele ts'ebeliso ea li-backend tsa kamehla le liphoso tsa tloaelo-http, o hloka ho ela hloko tšobotsi ea bohlokoa:

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

'Nete ke hore ha kopo e fetisetsoa, ​​​​lihlooho li tla ba le tlhahisoleseding e molemo ka khoutu e fetileng ea karabo le boitsebiso bo eketsehileng (lenane la bona le feletseng le teng. mona).

Sena se bolela hore uena ka bouena u tlameha hlokomela khoutu e nepahetseng ea karabo. Mohlala ke ona ho tsoa litokomaneng kamoo e sebetsang kateng.

Lisebelisoa tse fapaneng li na le li-backend tse fapaneng tsa kamehla

Ho etsa bonnete ba hore tharollo ha se ea lefats'e bakeng sa sehlopha sohle, empa e sebetsa feela lits'ebetsong tse itseng, o hloka ho qala ho hlahloba mofuta oa Ingress. Haeba e lumellana 0.23 kapa ho feta, sebelisa litlhaloso tsa tlhaho tsa Ingress:

  1. Re ka e fetisa default-backend etsoe ea e 'ngoe le e' ngoe Ingress's ho sebelisa litlhaloso;
  2. Re ka e fetisa custom-http-errors etsoe ea e 'ngoe le e' ngoe Ingress's ho sebelisa litlhaloso.

Ka lebaka leo, mohloli oa Ingress o tla shebahala tjena:

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

Tabeng ena, liphoso tsa 404 le 502 li tla fetisetsoa tšebeletsong ea maqephe a phoso ka lihlooho tsohle tse hlokahalang.

В Liphetolelo tse fetileng tsa Ingress li ne li se na tšobotsi ena (boitlamo bo botle ho 0.23). 'Me haeba u na le lits'ebetso tse 2 tse fapaneng ka ho feletseng tse sebetsang sehlopheng sa hau' me u batla ho hlalosa ts'ebeletso e fapaneng ea "backend-backend-service" le ho sebetsana le likhoutu tse fapaneng tsa liphoso bakeng sa e 'ngoe le e' ngoe ea tsona, bakeng sa sena u tla tlameha ho sebelisa li-workaround, tseo re nang le tse peli.

Ingress <0.23: atamela e le 'ngoe

Khetho ena e bonolo haholoanyane. E le kopo e sebeletsang maqephe a eona, re na le HTML e tloaelehileng, e sa tsebeng ho sheba lihlooho le ho khutlisetsa mekhoa e nepahetseng ea karabo. Kopo e joalo e hlahisoa ka Ingress ho tsoa ho url /error-pages, le lethathamong la libuka ws e tla ba HTML e khutlisitsoeng.

Setšoantšo ho 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

Ts'ebeletso ea phano ena e tlameha ho ba ea mofuta oa ClusterIP.

Ka nako e ts'oanang, ts'ebelisong moo re tla sebetsana le phoso, ho Ingress re eketsa snippet ea seva kapa snippet ea tlhophiso e nang le litaba tse latelang:

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: mokhoa oa bobeli

Khetho bakeng sa kopo e ka sebetsanang le lihlooho ... 'Me ka kakaretso ena ke tsela e nepahetseng haholoanyane, e alimiloeng ho tloha tloaelo-http-phoso. Ho e sebelisa ka letsoho (ho kopitsa) ho tla u lumella hore u se ke ua fetola maemo a lefats'e.

Mehato ke e latelang. Rea bopa thomello e tšoanang ka kopo e ka mamelang lihlooho tse hlokahalang le ho araba ka nepo. Kenya snippet ea seva ho sesebelisoa sa Ingress ka litaba tse latelang:

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

Joalokaha u ka bona, bakeng sa phoso e 'ngoe le e' ngoe eo re batlang ho e sebetsana, re hloka ho iketsetsa sebaka sa rona, moo lihlooho tsohle tse hlokahalang li tla kenngoa, joalo ka "letsoalloa". maqephe a phoso-ka tloaelo. Ka tsela ena re ka theha maqephe a fapaneng a liphoso a ikhethileng bakeng sa libaka le li-server.

PES

Tse ling ho tsoa letotong la malebela le maqheka a K8s:

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso