á€áá±á¬ááºážáá«ážááœááºá áá»áœááºá¯ááºááẠáá¯áá¹ááá¯ááºáá±ážáá®ážááá·áºááŒá¯áá¯ááºáá¬ážáá±á¬ á¡ááŸá¬ážá
á¬áá»ááºááŸá¬áá»á¬ážááá¯ááŒáááŒááºážááá¯ááºáᬠNGINX Ingress áá¡ááºá¹áá«áááºááŸá
áºáá¯ááŸáá·áº áááºážááá¯á·ááœááºááŸááá±á¬ ááá·áºáááºáá»ááºáá»á¬ážááŸáá·áº áááºážááá¯á·áááºáááºážáá»ááºááœáẠáá¯ááºáá±á¬ááºáááá·áºáááºážáááºážáá»á¬ážááᯠááŒá±á¬ááŒááá¯áá«áááºá
1. áá¯á¶áá±áá±á¬ááºáá¶ááá¯ááŒá±á¬ááºážááŒááºážá
áá°áááºážá¡á¬ážááŒáá·áºá NGINX Ingress ááẠáááºááá¯ááºáá¬áá¯ááºáá±á¬ááºáá»ááºááᯠáá¯ááºáá±á¬ááºáá±ážááá·áº default backend ááá¯á¡áá¯á¶ážááŒá¯áááºá ááá¯ááá¯áááºááŸá¬ Ingress á¡áááºážá¡ááŒá áºáá»á¬ážááœááºááá¯ááºáá±á¬ host ááá¯áááºááŸááºááŒááºáž Ingress ááá¯áá±á¬ááºážááá¯áá±á¬á¡áá«á 404 áá¯á¶á·ááŒááºááŸá¯áá¯ááºááŸáá·áºá¡áá°á¡á±á¬ááºáá«á á¬áá»ááºááŸá¬ááá¯áá»áœááºá¯ááºááá¯á·áááºáá¶áááŸááááº-
ááá¯á·áá±á¬áºá áá»áœááºá¯ááºááá¯á·ááá±á¬ááºáááºáá»á¬ážááẠá
ᶠ404 á¡á
á¬áž áá±á¬áºááá¯ááááºááá¯ááá¯ááŸáá·áº á¡ááŒá¬ážáá¬áá¬á¡áááºááŒá±ááŸá¯áá»á¬ážááŒáá·áº áááºážááá¯á·áá
á¬áá»ááºááŸá¬ááá¯ááŒáááẠáá±á¬ááºážááá¯ááŸá¯ ááá¯áá»á¬ážáá¬áááºá áá«ááá¯áá¯ááºááá¯á· NGINX Ingress ááŸá¬ ááŸááááºá default-backend-service
. áá»áœááºá¯ááºááá¯á·ááẠáá°áá®áá±á¬á¡áááºá ááœá±ážáá»ááºááŸá¯ááá¯á· á¡ááŒááºážá¡áá¯á¶áá
áºáá¯á¡ááŒá
Ạáá±á¬áºáááºááá·áºááœááºážááŸá¯ááᯠáá±ážááá¯á·áá«áááºá namespace/servicename
. áááºáá±á¬ááºááŸá¯á port ááẠ80 ááŒá
áºááá·áºáááºá
áá®ááá¯áá¯ááºááá¯á·á ááá·áºáá»áŸá±á¬ááºááœáŸá¬áá²á· ááá·áºááá¯ááºááá¯áẠpod (ááŒáá·áºáá»ááºááŸá¯) áá²á· áááºáá±á¬ááºááŸá¯ááᯠáááºáá®ážááá¯á· ááá¯á¡ááºáá«ááẠ(
áá«á áá¯á¶á¥ááá¬áá±ážáá áºáá¯áá«á
~$ 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 áá»á¬ážá ááá¹áááŒá±á¬áá·áºáááºáž ááŒá áºááá¯ááºáááºá
á€ááá á¹á áááºááᯠáá¬áá¬áááºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠáá»áœááºá¯ááºááá¯á· ááá¯á¡ááºáááº-
- áá¯á¶áá±áá±á¬ááºáá¶á¡ááŒá±á¬ááºáž á¡ááá¯ááºá០á¡áááºáá±á¬áºááŒáá« ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠááá¯ááºáá¬áá«á
- 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 ááŸááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«-
- áá»áœááºá¯ááºááá¯á·ááẠáááºááá±ážááá¯ááºáááºá
default-backend
á¡ááœáẠáá áºáá¯áá»ááºážá á®ááᯠIngress áá²á·ááŸááºáá»ááºáá»á¬ážá¡áá¯á¶ážááŒá¯ááŒááºážá ; - áá»áœááºá¯ááºááá¯á·ááẠáááºááá±ážááá¯ááºáááºá
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 á ááááºáá¬ážááŸááºážáá»á¬ážááœáẠá€á¡ááºá¹áá«áááºááá«áááºáá«á (
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 áá»á¬ážá០áá»á±ážáá°áá¬ážáá±á¬ ááá¯ááá¯ááŸááºáááºáá±á¬áááºážáááºážááŒá áºáááºá áááºážááᯠááá¯ááºááá¯áẠ(áááá¹áá°áá°ážááŒááºáž) ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº ááá¹áá¬áá¯á¶ážááá¯ááºáᬠáááºáááºáá»á¬ážááᯠááŒá±á¬ááºážáá²ááŒááºážáááŒá¯ááá¯ááºáá«á
á¡ááá·áºáá»á¬ážááŸá¬ á¡á±á¬ááºáá«á¡ááá¯ááºážááŒá
áºáááºá áá«ááá¯á·áááºáá®ážáááºá
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 á ááááºážáá»á¯ááºááŸá¯á¡á±á¬ááºááŸá á¡á á¯á¡áá±ážááœáẠáá¯ááºáá±á¬ááºáá±áá±á¬ á¡áááºážá¡ááŒá áºáá»á¬ážááᯠááœáŸá²ááŒá±á¬ááºážááŒááºážá "; - «
node áá»á¬ážááœá²áá±ááŒááºážááŸáá·áº áááºá¡ááá®áá±ážááŸááºážáá±á«áºááŸá load áá»á¬ážá¡ááŒá±á¬ááºáž "; - «
dev ááá¯ááºáá»á¬ážááá¯á· áááºáá±á¬ááºááœáá·áº "; - «
ááŒá®ážáá¬ážáá±á¬áá±áá¬áá±á·á áºáá»á¬ážá¡ááœáẠbootstrap ááá¯á¡ááŸáááºááŒáŸáá·áºááŒááºážá "á
áá»áœááºá¯ááºááá¯á·áááá±á¬á·ááºááœááºáááºážáááºáá«
- «
Istio ááŒáá·áº microservices ááá¯á· ááŒááºááœá¬ážáááºá á¡ááá¯ááºáž 1 "; - «
[ááá¯ááºáá±á¬áº] Kubernetes ááœáẠááœááºáááºáá»áááºáááºááŒááºážáááºážááœáŸááºá á¡ááá¯ááºáž á "á
source: www.habr.com