Nā ʻōlelo aʻoaʻo a me nā hoʻopunipuni Kubernetes: nā ʻaoʻao hewa maʻamau ma NGINX Ingress

Nā ʻōlelo aʻoaʻo a me nā hoʻopunipuni Kubernetes: nā ʻaoʻao hewa maʻamau ma NGINX Ingress

Ma kēia ʻatikala, makemake wau e kamaʻilio e pili ana i ʻelua mau hiʻohiʻona o NGINX Ingress e pili ana i ka hōʻike ʻana i nā ʻaoʻao hewa pilikino, a me nā palena i loko o lākou a me nā ala e hana ai a puni lākou.

1. Ke hoʻololi nei i ka hope hope

Ma ka maʻamau, hoʻohana ʻo NGINX Ingress i ka backend paʻamau, e hana ana i ka hana like. ʻO ia ke ʻano o ka noi ʻana i kahi Ingress e kuhikuhi ana i kahi host ʻaʻole i loko o nā kumuwaiwai Ingress, loaʻa iā mākou ka ʻaoʻao aʻe me kahi code pane 404:

Nā ʻōlelo aʻoaʻo a me nā hoʻopunipuni Kubernetes: nā ʻaoʻao hewa maʻamau ma NGINX Ingress

Eia nō naʻe, ʻoi aku ka nui o kā mākou mea kūʻai aku e hele mai me kahi noi e hōʻike i kā lākou ʻaoʻao me kahi hōʻailona hui a me nā pono ʻē aʻe ma kahi o ka 404 maʻamau. No ka hana ʻana i kēia, loaʻa iā NGINX Ingress hiki ke kūkulu ʻia wehewehe hou default-backend-service. Hāʻawi mākou i ke komo ʻana ma ke ʻano he hoʻopaʻapaʻa i ke koho o ka inoa like namespace/servicename. He 80 ka awa o ka lawelawe.

No ka hana ʻana i kēia, pono ʻoe e hana i kāu pod (deployment) a me ka lawelawe me kāu noi (laʻana hoʻokō ma YAML mai ka waihona waihona ingress-nginx), e hāʻawi ʻia ma kahi o ka backend paʻamau.

Eia kahi kiʻi liʻiliʻi:

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

No laila nā kāʻei kapu a pau ʻaʻole i hana ʻia ma o YAML me kind: Ingress, hāʻule i ka default-backend. Ma ka papa inoa ma luna, ua lilo kēia kahua sadsdasdas.

2. Ka mālama ʻana i nā hewa HTTP i ka noi me ka hoʻohana ʻana i ka hope paʻamau

ʻO kahi kūlana ʻē aʻe nā noi e hoʻopau ana i nā hewa HTTP (404, 500, 502...) i kahi noi ʻaʻole e hoʻokō i kēlā mau kūlana (ʻaʻole i hana ʻia nā ʻaoʻao nani e pili ana). Ma muli paha o ka makemake o nā mea hoʻomohala e lawelawe i nā ʻaoʻao hewa like i nā noi he nui.

No ka hoʻokō ʻana i kēia hihia ma ka ʻaoʻao kikowaena pono mākou:

  1. E hahai i nā ʻōlelo aʻoaʻo ma luna mai ka paukū e pili ana i ka hope hope;
  2. Hoʻohui i kahi kī i ka nginx-ingress configuration ConfigMap custom-http-errors, no ka laʻana, me ka waiwai 404,503 (ʻike maopopo i nā code hewa i uhi ʻia e ke kānāwai hou).

Ua hoʻokō ʻia ka hopena i manaʻo ʻia: ke holo nei ka mea kūʻai aku a loaʻa kahi hewa me ka helu pane 404 a i ʻole 503, e hoʻihoʻi hou ʻia ka noi i ka backend paʻamau hou...

Eia nō naʻe, i ka hoʻomohala ʻana i kahi noi no ka backend paʻamau a me ka custom-http-hewa, pono ʻoe e noʻonoʻo i kahi hiʻohiʻona nui:

!!! 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 ka mea ʻoiaʻiʻo ke hoʻohuli hou ʻia kahi noi, e loaʻa i nā poʻomanaʻo nā ʻike kūpono me ka helu pane mua a me nā ʻike hou aku (loaʻa kā lākou papa inoa piha. maanei).

ʻO ia hoʻi, pono ʻoe iā ʻoe iho e mālama i ke code pane pololei. Eia kekahi hiʻohiʻona mai ka palapala pehea e hana ai.

Loaʻa i nā polokalamu ʻokoʻa nā ʻaoʻao hope ʻokoʻa

No ka hōʻoia ʻana ʻaʻole honua ka hopena no ka hui holoʻokoʻa, akā pili wale i nā noi kikoʻī, pono ʻoe e nānā i ka mana Ingress. Inā pili 0.23 a ʻoi aku paha, e hoʻohana i nā ʻōlelo hōʻike maoli Ingress:

  1. Hiki iā mākou ke hoʻopau default-backend no ka mea, pakahi ʻO Ingress me ka hoʻohana ʻana i nā hōʻike;
  2. Hiki iā mākou ke hoʻopau custom-http-errors no ka mea, pakahi ʻO Ingress me ka hoʻohana ʻana i nā hōʻike.

ʻO ka hopena, e like ke ʻano o ka waiwai Ingress e like me kēia:

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 kēia hihia, e hoʻihoʻi ʻia nā hewa 404 a me 502 i ka lawelawe ʻaoʻao hewa me nā poʻomanaʻo āpau.

В ʻAʻole i loaʻa kēia hiʻohiʻona i nā mana mua o Ingress (hana maikaʻi ma 0.23). A inā loaʻa iā ʻoe 2 mau noi like ʻole e holo ana i kāu hui a makemake ʻoe e kuhikuhi i kahi lawelawe default-backend-service a me ka hoʻoili ʻana i nā code hewa like ʻole no kēlā me kēia o lākou, no kēia mea pono ʻoe e hoʻohana i nā workarounds, ʻelua mākou.

Komo <0.23: hoʻokokoke i hoʻokahi

ʻOi aku ka maʻalahi o kēia koho. Ma ke ʻano he noi e lawelawe ana i kāna mau ʻaoʻao, loaʻa iā mākou ka HTML maʻamau, ʻaʻole ʻike i ka nānā ʻana i nā poʻo a hoʻihoʻi i nā code pane pololei. Hoʻopili ʻia kēlā palapala noi me Ingress mai ka url /error-pages, a ma ka papa helu ws ʻo ia ka HTML i hoʻihoʻi ʻia.

Hōʻike kiʻi ma 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

Pono ka lawelawe no kēia hoʻolaha ʻana ma ke ʻano ClusterIP.

I ka manawa like, i ka noi kahi e hoʻoponopono ai mākou i ka hewa, ma Ingress mākou e hoʻohui i kahi kikowaena-snippet a i ʻole hoʻonohonoho-snippet me kēia ʻike:

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

Komo <0.23: hoʻokokoke lua

ʻO kahi koho no kahi noi e hiki ke hoʻoponopono i nā poʻomanaʻo ... A ma ka laulā he ala pololei kēia, i ʻaiʻē ʻia mai nā custom-http-errors. ʻO ka hoʻohana ʻana iā ia me ka lima (kopi) e ʻae iā ʻoe ʻaʻole e hoʻololi i nā hoʻonohonoho honua.

Penei na anuu. Hana mākou hoʻolaha like me kahi noi hiki ke hoʻolohe i nā poʻomanaʻo pono a pane pololei. Hoʻohui i kahi kikowaena-snippet i ka noi Ingress me kēia ʻike:

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 like me kāu e ʻike ai, no kēlā me kēia hewa a mākou e makemake ai e hoʻoponopono, pono mākou e hana i ko mākou wahi ponoʻī, kahi e hoʻokomo ʻia ai nā poʻomanaʻo pono a pau, e like me ka "maoli". ʻaoʻao-hewa-maʻamau. Ma kēia ala hiki iā mākou ke hana i nā ʻaoʻao hewa pilikino like ʻole no nā wahi a me nā kikowaena.

PS

Nā mea ʻē aʻe mai nā ʻōlelo aʻoaʻo a me nā hoʻopunipuni K8s:

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka