Malangizo & zidule za Kubernetes: masamba olakwika mu NGINX Ingress

Malangizo & zidule za Kubernetes: masamba olakwika mu NGINX Ingress

M'nkhaniyi, ndikufuna kunena za zinthu ziwiri za NGINX Ingress zokhudzana ndi kuwonetsa masamba olakwika aumwini, komanso zofooka zomwe zilipo ndi njira zogwirira ntchito mozungulira.

1. Kusintha kwapambuyo kumbuyo

Mwachikhazikitso, NGINX Ingress imagwiritsa ntchito backend yosasinthika, yomwe imagwira ntchito yofanana. Izi zikutanthauza kuti popempha Ingress kufotokoza wolandira alendo yemwe sali muzothandizira za Ingress, timalandira tsamba lotsatirali ndi nambala ya 404:

Malangizo & zidule za Kubernetes: masamba olakwika mu NGINX Ingress

Komabe, nthawi zambiri makasitomala athu amabwera ndi pempho loti awonetse tsamba lawo ndi logo yamakampani ndi zinthu zina m'malo mwa standard 404. Kuti muchite izi, NGINX Ingress ili ndi luso lomanga fotokozaninso default-backend-service. Timadutsa zolembazo ngati mkangano wosankha dzina lomwelo namespace/servicename. Doko la utumiki liyenera kukhala 80.

Kuti muchite izi, muyenera kupanga pod (kutumiza) ndi ntchito ndi pulogalamu yanu (mwachitsanzo kukhazikitsa mu YAML kuchokera ku ingress-nginx repository), yomwe idzaperekedwa m'malo mwa kubwerera kumbuyo.

Nachi chithunzi chaching'ono:

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

Chifukwa chake madambwe onse omwe sanapangidwe mwachindunji kudzera pa YAML nawo kind: Ingress, kugwera mu default-backend. Pamndandanda womwe uli pamwambapa, domain iyi idakhala sadsdasdas.

2. Kusamalira zolakwika za HTTP muzogwiritsira ntchito pogwiritsa ntchito njira yobwerera

Chinthu chinanso ndi zopempha zomwe zimathera mu zolakwika za HTTP (404, 500, 502 ...) ku pulogalamu yomwe sichitha zochitika zoterezi (masamba okongola omwe akugwirizana nawo sanapangidwe). Izi zithanso kukhala chifukwa cha chikhumbo cha opanga kuti agwiritse ntchito masamba olakwika omwewo pamapulogalamu angapo.

Kuti tigwiritse ntchito nkhaniyi kumbali ya seva tifunika:

  1. Tsatirani malangizo omwe ali pamwambawa kuchokera mundime yokhudzana ndi kusakhazikika kumbuyo;
  2. Onjezani kiyi ku nginx-ingress kasinthidwe ConfigMap custom-http-errors, mwachitsanzo, ndi mtengo wake 404,503 (mwachiwonekere zikugwirizana ndi zizindikiro zolakwika zomwe zaphimbidwa ndi lamulo latsopano).

Chotsatira chomwe chikuyembekezeka chakwaniritsidwa: pulogalamu yamakasitomala ikayamba ndikulandila cholakwika ndi nambala yoyankhira 404 kapena 503, pempholi lizitumizidwanso ku backend yatsopano ...

Komabe, mukamapanga pulogalamu ya backend yosasinthika ndi zolakwika-http-zolakwika, muyenera kuganizira mbali yofunika:

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

Chowonadi ndi chakuti pempho likatumizidwanso, mituyo imakhala ndi chidziwitso chothandiza ndi nambala yoyankhira yam'mbuyomu ndi zina zowonjezera (mndandanda wawo wathunthu ulipo. apa).

Izi zikutanthauza kuti inuyo muyenera samalira khodi yolondola yoyankhira. Nachi chitsanzo kuchokera pazolembedwa momwe zimagwirira ntchito.

Mapulogalamu osiyanasiyana ali ndi ma backends osiyanasiyana

Kuonetsetsa kuti yankho silili lapadziko lonse la gulu lonse, koma limagwira ntchito pazinthu zinazake, choyamba muyenera kuyang'ana Ingress version. Ngati zikugwirizana 0.23 kapena kuposa, gwiritsani ntchito zofotokozera za Ingress:

  1. Tikhoza kusintha default-backend chifukwa aliyense Ingress ndi pogwiritsa ntchito annotations;
  2. Tikhoza kusintha custom-http-errors chifukwa aliyense Ingress ndi pogwiritsa ntchito annotations.

Zotsatira zake, gwero la Ingress lidzawoneka motere:

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

Pachifukwa ichi, zolakwika 404 ndi 502 zidzatumizidwa ku ntchito yamasamba olakwika ndi mitu yonse yofunikira.

Π’ Matembenuzidwe am'mbuyomu a Ingress analibe izi (kudzipereka kwakukulu pa 0.23). Ndipo ngati muli ndi mapulogalamu awiri osiyana kwambiri omwe akuyenda mugulu lanu ndipo mukufuna kufotokozera ntchito yosiyana-yotsatira-backend-service ndi kukonza zolakwika zosiyanasiyana kwa aliyense wa iwo, chifukwa cha izi muyenera kugwiritsa ntchito ma workaround, omwe tili nawo awiri.

Ingress <0.23: yandikirani imodzi

Njira iyi ndi yosavuta. Monga ntchito yomwe imagwiritsa ntchito masamba ake, tili ndi HTML yokhazikika, yomwe sadziwa momwe mungayang'anire mitu ndikubweza ma code olondola oyankha. Ntchito yotereyi imatulutsidwa ndi Ingress kuchokera ku url /error-pages, ndi mu katalogu ws adzakhala HTML yobwezedwa.

Chithunzi mu 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

Ntchito zotumizira izi ziyenera kukhala zamtundu wa ClusterIP.

Nthawi yomweyo, mu pulogalamu yomwe tidzakonza cholakwikacho, mu Ingress timawonjezera seva-snippet kapena kasinthidwe-snippet ndi izi:

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: njira yachiwiri

Kusankha kwa pulogalamu yomwe imatha kukonza mitu... Ndipo kawirikawiri iyi ndi njira yolondola, yobwerekedwa kuchokera ku zolakwika-http-zolakwika. Kugwiritsa ntchito pamanja (kukopera) kukulolani kuti musasinthe makonda apadziko lonse lapansi.

Masitepe ndi awa. Timalenga kutumizidwa komweko ndi pulogalamu yomwe imatha kumvera mitu yofunikira ndikuyankha moyenera. Onjezani chidule cha seva ku pulogalamu ya Ingress ndi izi:

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

Monga mukuonera, pa cholakwa chilichonse chomwe tikufuna kukonza, tiyenera kupanga malo athu, kumene mitu yonse yofunikira idzalowetsedwa, monga "yachibadwidwe". masamba-zolakwika. Mwanjira iyi titha kupanga masamba osiyanasiyana olakwika ngakhale amalo amodzi ndi ma seva.

PS

Zina kuchokera pamndandanda waupangiri wa K8s:

Werenganinso pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga