குபெர்னெட்டஸ் உதவிக்குறிப்புகள் & தந்திரங்கள்: NGINX இன்க்ரஸில் தனிப்பயன் பிழை பக்கங்கள்

குபெர்னெட்டஸ் உதவிக்குறிப்புகள் & தந்திரங்கள்: NGINX இன்க்ரஸில் தனிப்பயன் பிழை பக்கங்கள்

இந்தக் கட்டுரையில், தனிப்பயனாக்கப்பட்ட பிழைப் பக்கங்களைக் காண்பிப்பது தொடர்பான NGINX இன்க்ரஸின் இரண்டு அம்சங்களைப் பற்றியும், அவற்றில் இருக்கும் வரம்புகள் மற்றும் அவற்றைச் சுற்றி வேலை செய்வதற்கான வழிகள் பற்றியும் பேச விரும்புகிறேன்.

1. இயல்புநிலை பின்தளத்தை மாற்றுதல்

முன்னிருப்பாக, NGINX Ingress ஆனது இயல்புநிலை பின்தளத்தைப் பயன்படுத்துகிறது, இது தொடர்புடைய செயல்பாட்டைச் செய்கிறது. அதாவது, இன்க்ரெஸ் ஆதாரங்களில் இல்லாத ஹோஸ்ட்டைக் குறிப்பிடும் ஒரு நுழைவைக் கோரும்போது, ​​404 மறுமொழிக் குறியீட்டைக் கொண்ட பின்வரும் பக்கத்தைப் பெறுகிறோம்:

குபெர்னெட்டஸ் உதவிக்குறிப்புகள் & தந்திரங்கள்: NGINX இன்க்ரஸில் தனிப்பயன் பிழை பக்கங்கள்

எவ்வாறாயினும், நிலையான 404 க்கு பதிலாக கார்ப்பரேட் லோகோ மற்றும் பிற வசதிகளுடன் தங்கள் பக்கத்தைக் காண்பிக்கும் கோரிக்கையுடன் எங்கள் வாடிக்கையாளர்கள் அடிக்கடி வருகிறார்கள். இதைச் செய்ய, NGINX Ingress உள்ளது உள்ளமைக்கப்பட்ட திறன் மறுவரையுறை default-backend-service. வடிவமைப்பு உள்ளீட்டை அதே பெயரின் விருப்பத்திற்கு ஒரு வாதமாக அனுப்புகிறோம் namespace/servicename. சேவையின் போர்ட் 80 ஆக இருக்க வேண்டும்.

இதைச் செய்ய, உங்கள் விண்ணப்பத்துடன் உங்கள் சொந்த பாட் (வரிசைப்படுத்தல்) மற்றும் சேவையை உருவாக்க வேண்டும் (YAML இல் செயல்படுத்தல் உதாரணம் ingress-nginx களஞ்சியத்திலிருந்து), இது இயல்புநிலை பின்தளத்திற்கு பதிலாக வழங்கப்படும்.

இங்கே ஒரு சிறிய எடுத்துக்காட்டு:

~$ 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, இயல்புநிலை-பின்னணியில் விழும். மேலே உள்ள பட்டியலில், இந்த டொமைன் ஆனது sadsdasdas.

2. இயல்புநிலை பின்தளத்தைப் பயன்படுத்தி பயன்பாட்டில் HTTP பிழைகளைக் கையாளுதல்

மற்றொரு சூழ்நிலையானது HTTP பிழைகளில் (404, 500, 502...) முடிவடையும் கோரிக்கைகள், அத்தகைய சூழ்நிலைகளைச் செயல்படுத்தாத ஒரு பயன்பாட்டிற்கு (தொடர்புடைய அழகான பக்கங்கள் உருவாக்கப்படவில்லை). பல பயன்பாடுகளில் ஒரே பிழை பக்கங்களை வழங்க டெவலப்பர்களின் விருப்பமும் இதற்குக் காரணமாக இருக்கலாம்.

இந்த வழக்கை சர்வர் பக்கத்தில் செயல்படுத்த நமக்குத் தேவை:

  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.

உண்மை என்னவென்றால், ஒரு கோரிக்கை திசைதிருப்பப்பட்டால், தலைப்புகளில் முந்தைய பதில் குறியீடு மற்றும் கூடுதல் தகவல்களுடன் பயனுள்ள தகவல்கள் இருக்கும் (அவற்றின் முழுமையான பட்டியல் கிடைக்கிறது இங்கே).

இதன் பொருள் நீங்களே வேண்டும் சரியான பதில் குறியீட்டை கவனித்துக் கொள்ளுங்கள். இங்கே ஒரு உதாரணம் ஆவணத்தில் இருந்து அது எவ்வாறு செயல்படுகிறது.

வெவ்வேறு பயன்பாடுகள் வெவ்வேறு இயல்புநிலை பின்தளங்களைக் கொண்டுள்ளன

தீர்வு முழு கிளஸ்டருக்கும் உலகளாவியது அல்ல, ஆனால் குறிப்பிட்ட பயன்பாடுகளுக்கு மட்டுமே பொருந்தும் என்பதை உறுதிப்படுத்த, நீங்கள் முதலில் நுழைவு பதிப்பைச் சரிபார்க்க வேண்டும். அது பொருந்தினால் 0.23 அல்லது அதற்கு மேல், நேட்டிவ் இன்க்ரஸ் சிறுகுறிப்புகளைப் பயன்படுத்தவும்:

  1. நாம் மீறலாம் default-backend செய்ய ஒவ்வொருவரும் உட்புகுதல் இன் சிறுகுறிப்புகளைப் பயன்படுத்துதல்;
  2. நாம் மீறலாம் custom-http-errors செய்ய ஒவ்வொருவரும் உட்புகுதல் இன் சிறுகுறிப்புகளைப் பயன்படுத்துதல்.

இதன் விளைவாக, இன்க்ரெஸ் ஆதாரம் இப்படி இருக்கும்:

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 இன் முந்தைய பதிப்புகளில் இந்த அம்சம் இல்லை (விதி 0.23 இல்) உங்கள் கிளஸ்டரில் 2 முற்றிலும் வேறுபட்ட பயன்பாடுகள் இயங்கினால், அவை ஒவ்வொன்றிற்கும் வெவ்வேறு இயல்புநிலை-பின்தள-சேவை மற்றும் வெவ்வேறு பிழைக் குறியீடுகளின் செயலாக்கத்தைக் குறிப்பிட விரும்பினால், இதற்கு நீங்கள் தீர்வுகளைப் பயன்படுத்த வேண்டும், அவற்றில் இரண்டு எங்களிடம் உள்ளன.

நுழைவு <0.23: ஒன்றை அணுகவும்

இந்த விருப்பம் எளிமையானது. அதன் பக்கங்களுக்குச் சேவை செய்யும் பயன்பாடாக, எங்களிடம் வழக்கமான HTML உள்ளது, இது தலைப்புகளைப் பார்ப்பது மற்றும் சரியான பதில் குறியீடுகளை எவ்வாறு வழங்குவது என்பது தெரியாது. அத்தகைய பயன்பாடு url இலிருந்து உள்வாங்குதல் மூலம் வெளியிடப்பட்டது /error-pages, மற்றும் பட்டியலில் 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 வகையாக இருக்க வேண்டும்.

அதே நேரத்தில், நாங்கள் பிழையைச் செயலாக்கும் பயன்பாட்டில், உட்செலுத்தலில், பின்வரும் உள்ளடக்கத்துடன் ஒரு சர்வர்-துணுக்கை அல்லது உள்ளமைவு-துணுக்கைச் சேர்க்கிறோம்:

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

நுழைவு <0.23: இரண்டாவது அணுகுமுறை

தலைப்புகளைச் செயலாக்கக்கூடிய பயன்பாட்டிற்கான ஒரு விருப்பம்... பொதுவாக இது மிகவும் சரியான வழி, தனிப்பயன்-http-பிழைகளிலிருந்து கடன் வாங்கப்பட்டது. அதை கைமுறையாகப் பயன்படுத்துவது (நகல் செய்வது) உலகளாவிய அமைப்புகளை மாற்றாமல் இருக்க அனுமதிக்கும்.

படிகள் பின்வருமாறு. நாங்கள் உருவாக்குகிறோம் அதே வரிசைப்படுத்தல் தேவையான தலைப்புச் செய்திகளைக் கேட்டு சரியாகப் பதிலளிக்கக்கூடிய ஒரு பயன்பாட்டுடன். பின்வரும் உள்ளடக்கத்துடன் இன்க்ரெஸ் பயன்பாட்டில் சர்வர்-துணுக்கைச் சேர்க்கவும்:

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

நீங்கள் பார்க்கிறபடி, நாங்கள் செயலாக்க விரும்பும் ஒவ்வொரு பிழைக்கும், எங்கள் சொந்த இருப்பிடத்தை உருவாக்க வேண்டும், அங்கு தேவையான அனைத்து தலைப்புகளும் "சொந்த" ஒன்றைப் போலவே செருகப்படும். விருப்ப-பிழை-பக்கங்கள். இந்த வழியில் நாம் தனிப்பட்ட இருப்பிடங்கள் மற்றும் சேவையகங்களுக்கு கூட வெவ்வேறு தனிப்பயனாக்கப்பட்ட பிழை பக்கங்களை உருவாக்க முடியும்.

சோசலிஸ்ட் கட்சி

K8s டிப்ஸ் & ட்ரிக்ஸ் தொடரிலிருந்து மற்றவை:

எங்கள் வலைப்பதிவிலும் படிக்கவும்:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்