Atụmatụ na aghụghọ Kubernetes: ibe njehie omenala na NGINX Ingress

Atụmatụ na aghụghọ Kubernetes: ibe njehie omenala na NGINX Ingress

N'isiokwu a, achọrọ m ikwu banyere atụmatụ abụọ nke NGINX Ingress metụtara igosipụta ibe njehie ahaziri iche, yana njedebe dị na ha na ụzọ isi rụọ ọrụ na gburugburu ha.

1. Ịgbanwe ndabere ndabere

Site na ndabara, NGINX Ingress na-eji ndabere ndabere ndabere, nke na-arụ ọrụ kwekọrọ. Nke a pụtara na mgbe ị na-arịọ Ingress na-akọwapụta onye ọbịa na-anọghị na akụrụngwa Ingress, anyị na-enweta ibe na-esonụ yana koodu nzaghachi 404:

Atụmatụ na aghụghọ Kubernetes: ibe njehie omenala na NGINX Ingress

Agbanyeghị, ọtụtụ mgbe ndị ahịa anyị na-abịa na-arịọ arịrịọ ka ha gosi ibe ha na akara ụlọ ọrụ yana ihe eji enyere ndụ aka karịa ọkọlọtọ 404. Iji mee nke a, NGINX Ingress nwere ike arụnyere kọwapụta default-backend-service. Anyị na-agafe ntinye usoro dị ka arụmụka na nhọrọ nke otu aha namespace/servicename. Ọdụ ụgbọ mmiri nke ọrụ kwesịrị ịdị 80.

Iji mee nke a, ịkwesịrị iji ngwa gị mepụta pọd (nkenye) na ọrụ gị.ihe atụ mmejuputa iwu na YAML site na ingress-nginx repository), nke a ga-enye kama ndabere ndabere.

Nke a bụ obere ihe atụ:

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

Yabụ ngalaba niile anaghị eme nke ọma site na YAML nwere kind: Ingress, daba na ndabere-ndabere. Na ndepụta dị n'elu, ngalaba a ghọrọ sadsdasdas.

2. Ijikwa njehie HTTP na ngwa ahụ site na iji ndabere ndabere

Ọnọdụ ọzọ bụ arịrịọ na-ejedebe na njehie HTTP (404, 500, 502 ...) na ngwa na-adịghị edozi ọnọdụ ndị dị otú ahụ (anaghị emepụta ibe ndị mara mma kwekọrọ). Nke a nwekwara ike ịbụ n'ihi ọchịchọ nke ndị mmepe ije ozi otu ibe njehie na ọtụtụ ngwa.

Iji mejuputa ikpe a n'akụkụ sava anyị chọrọ:

  1. Soro ntuziaka dị n'elu site na paragraf gbasara ndabere ndabere;
  2. Tinye igodo na nhazi nginx-ingress ConfigMap custom-http-errors, ọmụmaatụ, na uru 404,503 (O doro anya na ọ dabara na koodu njehie nke iwu ọhụrụ kpuchiri).

E nwetala nsonaazụ a tụrụ anya ya: mgbe ngwa ndị ahịa na-agba ọsọ wee nweta njehie nwere koodu nzaghachi nke 404 ma ọ bụ 503, a ga-atụgharị arịrịọ ahụ ozugbo na ndabere ndabere ọhụrụ.

Agbanyeghị, mgbe ị na-emepụta ngwa maka ndabara ndabere na njehie http-, ịkwesịrị iburu n'uche njirimara dị mkpa:

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

Nke bụ eziokwu bụ na mgbe a na-emegharị arịrịọ, ndị nkụnye eji isi mee ga-enwe ozi bara uru na koodu nzaghachi gara aga na ozi ndị ọzọ (ndepụta ha zuru ezu dị. ebe a).

Nke a pụtara na gị onwe gị aghaghị lekọta koodu nzaghachi ziri ezi. Lee otu ihe atụ site na akwụkwọ ka o si arụ ọrụ.

Ngwa dị iche iche nwere ndabere ndabere ndabere dị iche iche

Iji hụ na ngwọta abụghị nke zuru ụwa ọnụ maka ụyọkọ dum, mana ọ na-emetụta naanị ngwa ngwa, ị ga-ebu ụzọ lelee ụdị Ingress. Ọ bụrụ na ọ dabara 0.23 ma ọ bụ karịa, jiri nkọwa mbata Ingress:

  1. Anyị nwere ike ịkwụsị default-backend n'ihi na onye obula Ndị Ingress iji nkọwa;
  2. Anyị nwere ike ịkwụsị custom-http-errors n'ihi na onye obula Ndị Ingress iji nkọwa.

N'ihi ya, akụrụngwa Ingress ga-adị ka nke a:

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

N'okwu a, njehie 404 na 502 ga-ebugharị gaa na ọrụ ibe mperi yana nkụnye eji isi mee niile dị mkpa.

В Ụdị Ingress gara aga enweghị njirimara a (na-akwụ ụgwọ na 0.23). Ma ọ bụrụ na ị nwere 2 kpamkpam dị iche iche ngwa na-agba ọsọ na gị ụyọkọ na ị chọrọ ezipụta dị iche iche ndabere-backend-ọrụ na nhazi nke dị iche iche koodu njehie maka nke ọ bụla n'ime ha, n'ihi na nke a, ị ga-eji workarounds, nke anyị nwere abụọ.

Ntinye <0.23: bia otu

Nhọrọ a dị mfe karị. Dị ka ngwa na-eje ozi na ibe ya, anyị nwere HTML mgbe niile, nke na-amaghị otú e si ele nkụnye eji isi mee ma weghachite koodu nzaghachi ziri ezi. A na-ewepụta ngwa dị otú ahụ na Ingress sitere na url /error-pages, na na katalọgụ ws ga-abụ HTML eweghachitere.

Ihe atụ na 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

Ọrụ maka mbugharị a ga-abụrịrị nke ụdị ClusterIP.

N'otu oge ahụ, na ngwa ebe anyị ga-edozi njehie ahụ, na Ingress, anyị na-agbakwunye ihe nkesa-snippet ma ọ bụ nhazi-snippet nwere ọdịnaya ndị a:

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

Ntinye <0.23: ụzọ nke abụọ

Nhọrọ maka ngwa nke nwere ike hazie nkụnye eji isi mee... Na n'ozuzu nke a bụ ụzọ ziri ezi karịa, gbaziri site na njehie http-omenala. Iji aka ya na-eme ihe (mbipụta) ga-enye gị ohere ịghara ịgbanwe ntọala ụwa.

Nzọụkwụ ndị a bụ ndị a. Anyị na-eke otu ntinye na ngwa nwere ike ige ntị isi akụkọ dị mkpa wee zaghachi nke ọma. Tinye ihe nkesa-snippet na ngwa Ingress nwere ọdịnaya ndị a:

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

Dị ka ị na-ahụ, maka njehie ọ bụla anyị chọrọ ịhazi, anyị kwesịrị ịme ebe anyị onwe anyị, ebe a ga-etinye isi ihe niile dị mkpa, dịka na "nwa amaala". ibe-ehie ụzọ. N'ụzọ dị otú a, anyị nwere ike ịmepụta ibe njehie ahaziri iche dị iche iche ọbụna maka ebe ọ bụla na sava.

PS

Ndị ọzọ sitere na usoro ndụmọdụ na usoro aghụghọ K8:

Gụọkwa na blọọgụ anyị:

isi: www.habr.com

Tinye a comment