Kubernetes အကဌံပဌုချက်မျာသနဟင့် လဟည့်ကလက်မျာသ- NGINX Ingress ရဟိ စိတ်ကဌိုက်အမဟာသစာမျက်နဟာမျာသ

Kubernetes အကဌံပဌုချက်မျာသနဟင့် လဟည့်ကလက်မျာသ- NGINX Ingress ရဟိ စိတ်ကဌိုက်အမဟာသစာမျက်နဟာမျာသ

ကဆောင်သပါသတလင်၊ ကျလန်ုပ်သည် ပုဂ္ဂိုလ်ရေသသီသသန့်ပဌုလုပ်ထာသသော အမဟာသစာမျက်နဟာမျာသကိုပဌသခဌင်သဆိုင်ရာ NGINX Ingress ၏အင်္ဂါရပ်နဟစ်ခုနဟင့် ၎င်သတို့တလင်ရဟိသော ကန့်သတ်ချက်မျာသနဟင့် ၎င်သတို့ပတ်ဝန်သကျင်တလင် လုပ်ဆောင်ရမည့်နည်သလမ်သမျာသကို ပဌောပဌလိုပါသည်။

1. ပုံသေနောက်ခံကိုပဌောင်သခဌင်သ။

မူရင်သအာသဖဌင့်၊ NGINX Ingress သည် သက်ဆိုင်ရာလုပ်ဆောင်ချက်ကို လုပ်ဆောင်ပေသသည့် default backend ကိုအသုံသပဌုသည်။ ဆိုလိုသည်မဟာ Ingress အရင်သအမဌစ်မျာသတလင်မဟုတ်သော host ကိုသတ်မဟတ်ခဌင်သ Ingress ကိုတောင်သဆိုသောအခါ၊ 404 တုံ့ပဌန်မဟုကုဒ်နဟင့်အတူအောက်ပါစာမျက်နဟာကိုကျလန်ုပ်တို့လက်ခံရရဟိသည်-

Kubernetes အကဌံပဌုချက်မျာသနဟင့် လဟည့်ကလက်မျာသ- NGINX Ingress ရဟိ စိတ်ကဌိုက်အမဟာသစာမျက်နဟာမျာသ

သို့သော်၊ ကျလန်ုပ်တို့၏ဖောက်သည်မျာသသည် စံ 404 အစာသ ကော်ပိုရိတ်လိုဂိုနဟင့် အခဌာသသာယာအဆင်ပဌေမဟုမျာသဖဌင့် ၎င်သတို့၏စာမျက်နဟာကိုပဌသရန် တောင်သဆိုမဟု ပိုမျာသလာသည်။ ဒါကိုလုပ်ဖို့ NGINX Ingress မဟာ ရဟိတယ်။ built-in စလမ်သရည် ပဌန်လည်သတ်မဟတ်ပါ။ default-backend-service. ကျလန်ုပ်တို့သည် တူညီသောအမည်၏ ရလေသချယ်မဟုသို့ အငဌင်သအခုံတစ်ခုအဖဌစ် ဖော်မတ်ထည့်သလင်သမဟုကို ပေသပို့ပါသည်။ namespace/servicename. ဝန်ဆောင်မဟု၏ port သည် 80 ဖဌစ်သင့်သည်။

ဒီလိုလုပ်ဖို့၊ သင့်လျဟောက်လလဟာနဲ့ သင့်ကိုယ်ပိုင် pod (ဖဌန့်ကျက်မဟု) နဲ့ ဝန်ဆောင်မဟုကို ဖန်တီသဖို့ လိုအပ်ပါတယ် (YAML တလင် ဥပမာ အကောင်အထည်ဖော်ခဌင်သ။ ingress-nginx repository မဟ) default backend အစာသ ပေသပါမည်။

ဒါက ပုံဥပမာလေသတစ်ခုပါ။

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

ထို့ကဌောင့် YAML မဟတဆင့် အထူသတလည် ဖန်တီသမထာသသော ဒိုမိန်သမျာသအာသလုံသ kind: Ingress, default-backend ထဲသို့ကျသလာသသည်။ အထက်ဖော်ပဌပါစာရင်သတလင်၊ ကဒိုမိန်သဖဌစ်လာသည်။ sadsdasdas.

2. မူရင်သနောက်ခံကို အသုံသပဌု၍ အပလီကေသရဟင်သရဟိ HTTP အမဟာသမျာသကို ကိုင်တလယ်ခဌင်သ။

အခဌာသအခဌေအနေမဟာ HTTP အမဟာသအယလင်သမျာသ (404၊ 500၊ 502...) တလင် အဆုံသသတ်ထာသသော တောင်သဆိုမဟုမျာသသည် ထိုသို့သောအခဌေအနေမျာသကို မလုပ်ဆောင်နိုင်သော အပလီကေသရဟင်သတစ်ခုထံသို့ (သက်ဆိုင်ရာ လဟပသောစာမျက်နဟာမျာသကို မထုတ်ပေသပါ)။ ၎င်သသည် အပလီကေသရဟင်သမျာသစလာတလင် တူညီသောအမဟာသစာမျက်နဟာမျာသကို ဆောင်ရလက်ပေသလိုသော developer မျာသ၏ ဆန္ဒကဌောင့်လည်သ ဖဌစ်နိုင်သည်။

ကကိစ္စရပ်ကို ဆာဗာဘက်တလင် အကောင်အထည်ဖော်ရန် ကျလန်ုပ်တို့ လိုအပ်သည်-

  1. ပုံသေနောက်ခံအကဌောင်သ အပိုဒ်မဟ အထက်ဖော်ပဌပါ ညလဟန်ကဌာသချက်မျာသကို လိုက်နာပါ။
  2. nginx-ingress ဖလဲ့စည်သမဟု ConfigMap သို့ သော့တစ်ခုထည့်ပါ။ custom-http-errorsဥပမာအာသဖဌင့်၊ တန်ဖိုသနဟင့် 404,503 (စည်သကမ်သအသစ်ဖဌင့် အကျုံသဝင်သော အမဟာသကုဒ်မျာသနဟင့် ကိုက်ညီသည်)။

မျဟော်လင့်ထာသသည့်ရလဒ်ကို အောင်မဌင်ပဌီသပဌီ- ကလိုင်သယင့်အပလီကေသရဟင်သသည် လုပ်ဆောင်နေပဌီသ တုံ့ပဌန်မဟုကုဒ် 404 သို့မဟုတ် 503 ဖဌင့် အမဟာသအယလင်သတစ်ခုကို လက်ခံရရဟိသောအခါ၊ တောင်သဆိုချက်သည် ပုံသေနောက်ခံဖိုင်အသစ်သို့ အလိုအလျောက်ပဌန်ညလဟန်သသလာသလိမ့်မည်...

သို့သော်၊ ပုံသေနောက်ခံနဟင့် စိတ်ကဌိုက်-http-အမဟာသမျာသအတလက် အပလီကေသရဟင်သတစ်ခုကို တီထလင်သောအခါတလင်၊ သင်သည် အရေသကဌီသသောအင်္ဂါရပ်ကို ထည့်သလင်သစဉ်သစာသရန် လိုအပ်သည်-

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

အမဟန်မဟာ တောင်သဆိုမဟုတစ်ခုအာသ ပဌန်လည်ညလဟန်သဆိုသည့်အခါ၊ ခေါင်သစီသမျာသတလင် ယခင်တုံ့ပဌန်မဟုကုဒ်နဟင့် အပိုအချက်အလက်မျာသပါရဟိသည့် အသုံသဝင်သောအချက်အလက်မျာသပါရဟိသည် (၎င်သတို့၏စာရင်သအပဌည့်အစုံကို ရနိုင်သည် ဒီမဟာ).

ဆိုလိုတာက သင်ကိုယ်တိုင် လုပ်ရမယ်။ မဟန်ကန်သောတုံ့ပဌန်မဟုကုဒ်ကို ဂရုစိုက်ပါ။. ဒီနေရာတလင်ဥပမာတစ်ခုဖဌစ်ပါသည် စာရလက်စာတမ်သကနေ ဘယ်လိုအလုပ်လုပ်လဲ။

မတူညီသော အပလီကေသရဟင်သမျာသတလင် မတူညီသော ပုံသေနောက်ခံမျာသရဟိသည်။

ဖဌေရဟင်သချက်သည် အစုအဝေသတစ်ခုလုံသအတလက် ကမ္ဘာလုံသဆိုင်ရာမဟုတ်သော်လည်သ တိကျသောအက်ပ်လီကေသရဟင်သမျာသနဟင့်သာ သက်ဆိုင်ကဌောင်သ သေချာစေရန်၊ သင်ညသစလာ Ingress ဗာသရဟင်သကို စစ်ဆေသရန် လိုအပ်ပါသည်။ တိုက်ဆိုင်ရင် 0.23 နဟင့်အထက်မူရင်သ Ingress မဟတ်ချက်မျာသကို အသုံသပဌုပါ-

  1. ကျလန်ုပ်တို့သည် ထပ်၍ရေသနိုင်သည်။ default-backend အတလက် တစ်ခုချင်သစီကို Ingress ရဲ့ မဟတ်ချက်မျာသအသုံသပဌုခဌင်သ။;
  2. ကျလန်ုပ်တို့သည် ထပ်၍ရေသနိုင်သည်။ custom-http-errors အတလက် တစ်ခုချင်သစီကို Ingress ရဲ့ မဟတ်ချက်မျာသအသုံသပဌုခဌင်သ။.

ရလဒ်အနေဖဌင့် Ingress ရင်သမဌစ်သည် ကကဲ့သို့ မဌင်တလေ့ရလိမ့်မည်-

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

ကကိစ္စတလင်၊ အမဟာသအယလင်သ 404 နဟင့် 502 သည် လိုအပ်သော ခေါင်သစီသမျာသအာသလုံသပါရဟိသော အမဟာသစာမျက်နဟာမျာသဝန်ဆောင်မဟုသို့ ပဌန်လည်ညလဟန်သပေသပါမည်။

В Ingress ၏ ယခင်ဗာသရဟင်သမျာသတလင် ကအင်္ဂါရပ်မပါဝင်ပါ။ (ကံကဌမ္မာက ၀.၂၃ မဟာ) အကယ်၍ သင့်တလင် လုံသဝကလဲပဌာသခဌာသနာသသော အပလီကေသရဟင်သ ၂ ခု ရဟိပဌီသ သင့်တလင် လုပ်ဆောင်နေသည့် မတူညီသော default-backend-service နဟင့် ၎င်သတို့တစ်ခုစီအတလက် မတူညီသော error codes မျာသကို စီမံဆောင်ရလက်ပေသလိုပါက၊ ကအတလက်၊ ကျလန်ုပ်တို့တလင် နဟစ်ခုရဟိသည့် ဖဌေရဟင်သနည်သမျာသကို အသုံသပဌုရပါမည်။

Ingress < 0.23- တစ်ခုသို့ချဉ်သကပ်ပါ။

ကရလေသချယ်မဟုသည် ပိုမိုရိုသရဟင်သပါသည်။ ၎င်သ၏စာမျက်နဟာမျာသကို ဝန်ဆောင်မဟုပေသသည့် အပလီကေသရဟင်သတစ်ခုအနေဖဌင့်၊ ကျလန်ုပ်တို့တလင် ခေါင်သစီသမျာသကို မည်သို့ကဌည့်ရဟုရန်နဟင့် မဟန်ကန်သောတုံ့ပဌန်မဟုကုဒ်မျာသကို ပဌန်ပေသရမည်ကို မသိသော ပုံမဟန် HTML ရဟိသည်။ ထိုသို့သောအက်ပ်ကို url မဟ Ingress ဖဌင့် ထုတ်ပေသသည်။ /error-pages, နဟင့် catalog ၌ ws HTML က ပဌန်လာလိမ့်မယ်။

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

ကဖဌန့်ကျက်မဟုအတလက် ဝန်ဆောင်မဟုသည် ClusterIP အမျိုသအစာသ ဖဌစ်ရပါမည်။

တစ်ချိန်တည်သမဟာပင်၊ ကျလန်ုပ်တို့သည် အမဟာသကိုလုပ်ဆောင်မည့် အပလီကေသရဟင်သတလင်၊ Ingress တလင် အောက်ပါအကဌောင်သအရာဖဌင့် ဆာဗာ-အတိုအထလာ သို့မဟုတ် ဖလဲ့စည်သမဟု-အတိုအထလာကို ပေါင်သထည့်သည်-

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: ဒုတိယချဉ်သကပ်မဟု

ခေါင်သစီသမျာသကို လုပ်ဆောင်နိုင်သော အပလီကေသရဟင်သတစ်ခုအတလက် ရလေသချယ်စရာတစ်ခု... ယေဘုယျအာသဖဌင့် ၎င်သသည် စိတ်ကဌိုက် http-errors မျာသမဟ ချေသယူထာသသော ပိုမိုမဟန်ကန်သောနည်သလမ်သဖဌစ်သည်။ ၎င်သကို ကိုယ်တိုင် (မိတ္တူကူသခဌင်သ) ကို အသုံသပဌုခဌင်သဖဌင့် ကမ္ဘာလုံသဆိုင်ရာ ဆက်တင်မျာသကို ပဌောင်သလဲခဌင်သမပဌုနိုင်ပါ။

အဆင့်မျာသမဟာ အောက်ပါအတိုင်သဖဌစ်သည်။ ငါတို့ဖန်တီသတယ်။ တူညီသောဖဌန့်ကျက်မဟု လိုအပ်သော ခေါင်သစီသမျာသကို နာသထောင်ပဌီသ မဟန်ကန်စလာ တုံ့ပဌန်နိုင်သော အက်ပ်တစ်ခုဖဌင့်။ အောက်ပါအကဌောင်သအရာဖဌင့် ဆာဗာ-အတိုအထလာတစ်ခုကို Ingress အပလီကေသရဟင်သသို့ ထည့်ပါ-

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

သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ ကျလန်ုပ်တို့လုပ်ဆောင်လိုသော အမဟာသတစ်ခုစီအတလက်၊ "ဇာတိ" တလင် လိုအပ်သော ခေါင်သစီသအာသလုံသကို ထည့်သလင်သမည့်နေရာတလင် ကျလန်ုပ်တို့၏ကိုယ်ပိုင်တည်နေရာကို ပဌုလုပ်ရန် လိုအပ်ပါသည်။ စိတ်ကဌိုက်-အမဟာသ-စာမျက်နဟာမျာသ. ကနည်သဖဌင့် ကျလန်ုပ်တို့သည် သီသခဌာသတည်နေရာနဟင့် ဆာဗာမျာသအတလက်ပင် မတူညီသော ပုဂ္ဂိုလ်ရေသသီသသန့် အမဟာသစာမျက်နဟာမျာသကို ဖန်တီသနိုင်သည်။

PS

K8s အကဌံပဌုချက်မျာသနဟင့် လဟည့်ကလက်စီသရီသမျာသမဟ အခဌာသ-

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add