በዚህ ጽሑፍ ውስጥ ስለ ሁለት የ NGINX Ingress ባህሪያት ለግል የተበጁ የስህተት ገጾችን ከማሳየት ጋር የተዛመዱ, እንዲሁም ስለ ውሱንነት እና በዙሪያቸው ስለሚገኙባቸው መንገዶች ማውራት እፈልጋለሁ.
1. ነባሪውን የጀርባውን ጀርባ ይለውጡ
በነባሪነት፣ NGINX Ingress ተጓዳኝ ተግባሩን የሚያከናውን ነባሪውን የኋላ ክፍል ይጠቀማል። ይህ ማለት በ Ingress መርጃዎች ውስጥ ከሌለው አስተናጋጅ ጋር መግቢያ ስንጠይቅ ይህን ገጽ 404 የምላሽ ኮድ እናገኛለን፡-
ሆኖም ደንበኞቻችን ከመደበኛ 404 ይልቅ የኩባንያ አርማ እና ሌሎች አገልግሎቶችን እንዲያሳዩ በተደጋጋሚ ጥያቄ አቅርበዋል። ለዚህም, NGINX Ingress አለው default-backend-service
. የቅርጸት መዝገቡን እንደ ክርክር ለተመሳሳይ ስም አማራጭ እናስተላልፋለን። namespace/servicename
. የአገልግሎት ወደብ 80 መሆን አለበት።
ይህንን ለማድረግ የራስዎን ፖድ (ማሰማራት) እና ከመተግበሪያዎ ጋር አገልግሎት መፍጠር ያስፈልግዎታል (
አንድ ትንሽ ምሳሌ እነሆ፡-
~$ 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. በመተግበሪያው ውስጥ ያሉ የኤችቲቲፒ ስህተቶችን በነባሪው ጀርባ ማስተናገድ
ሌላው ሁኔታ በኤችቲቲፒ ስህተቶች (404, 500, 502…) የሚጨርሱ ጥያቄዎች እንደዚህ ያሉ ሁኔታዎችን ወደማይይዝ መተግበሪያ (ተዛማጅ ቆንጆ ገጾች አልተፈጠሩም)። እንዲሁም በብዙ መተግበሪያዎች ውስጥ ተመሳሳይ የስህተት ገጾችን ለመመለስ በገንቢዎች ፍላጎት ምክንያት ሊከሰት ይችላል።
ይህንን ጉዳይ በአገልጋዩ በኩል ለመተግበር እኛ ያስፈልገናል፡-
- ስለ ነባሪው የጀርባ ሽፋን ከአንቀጹ ከላይ ያሉትን መመሪያዎች ይከተሉ;
- ቁልፉን ወደ ውቅረት አክል ConfigMap nginx-ingress
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 እና ከዚያ በላይ፣ ቤተኛ Ingress ማብራሪያዎችን ተጠቀም፡-
- እንደገና መወሰን እንችላለን
default-backend
ለ እያንዳንዳቸው ጋር መግባትማብራሪያ ; - እንደገና መወሰን እንችላለን
custom-http-errors
ለ እያንዳንዳቸው ጋር መግባትማብራሪያ .
በውጤቱም፣ የ 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 ስሪቶች ይህ ባህሪ አልነበራቸውም። (
መግቢያ <0.23: አንድ አቀራረብ
ይህ አማራጭ ቀላል ነው. ገጾቹን የሚያቀርብ መተግበሪያ እንደመሆናችን መጠን ራስጌዎችን እንዴት እንደሚመለከት እና ትክክለኛ የምላሽ ኮዶችን እንደሚመልስ የማያውቅ ግልጽ HTML አለን። እንዲህ ዓይነቱ መተግበሪያ ከ Ingress with 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
የዚህ ማሰማራት አገልግሎት የክላስተርአይፒ ዓይነት መሆን አለበት።
በተመሳሳይ ጊዜ ስህተቱን በምንይዝበት አፕሊኬሽን ውስጥ ኢንግረስ ውስጥ የአገልጋይ-ቅንጣቢ ወይም ውቅረት-ቅንጣን ከሚከተለው ይዘት ጋር እንጨምራለን፡
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;
}
እንደሚመለከቱት ፣ እኛ ልንሰራው የምንፈልገው እያንዳንዱ ስህተት ፣ እንደ “ቤተኛ” ሁሉም አስፈላጊ አርእስቶች የሚተኩበት የራሳችንን ቦታ መፍጠር አለብን ።
PS
ከK8s ተከታታይ ምክሮች እና ዘዴዎች ሌሎች፡-
- «
በ Helm 2 ቁጥጥር ስር ባለው ክላስተር ውስጥ የሚሰሩ ሀብቶችን ማስተላለፍ "; - «
ስለ አንጓዎች ድልድል እና በድር መተግበሪያ ላይ ስላሉት ጭነቶች "; - «
የዴቪ ጣቢያዎች መዳረሻ "; - «
ለትልቅ የውሂብ ጎታዎች የቡት ማሰሪያን ማፋጠን ».
በብሎጋችን ላይ ያንብቡ፡-
ምንጭ: hab.com