Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Ρ
ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ NGINX Ingress, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΡΡΠ°Π½ΠΈΡ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
Π² Π½ΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ
ΠΈ ΡΠΏΠΎΡΠΎΠ±Π°Ρ
ΠΈΡ
ΠΎΠ±ΠΎΠΉΡΠΈ.
1. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΡΠΊΠ΅Π½Π΄Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² NGINX Ingress ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ default backend, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΠΎΡΠ΅ Ingress’Π° Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ ΠΎΡΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅Ρ Π² Ingress-ΡΠ΅ΡΡΡΡΠ°Ρ , ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΊΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ° 404:
ΠΠ΄Π½Π°ΠΊΠΎ Π²ΡΠ΅ ΡΠ°ΡΠ΅ Π½Π°ΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ Ρ ΠΏΡΠΎΡΡΠ±ΠΎΠΉ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ 404 ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΡΠΈΡΠΌΠ΅Π½Π½ΡΠΌ Π»ΠΎΠ³ΠΎΡΠΈΠΏΠΎΠΌ ΠΈ ΠΏΡΠΎΡΠΈΠΌΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°ΠΌΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Ρ NGINX Ingress Π΅ΡΡΡ default-backend-service
. ΠΠ΄Π½ΠΎΠΈΠΌΡΠ½Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ ΡΠΎΡΠΌΠ°ΡΠ° namespace/servicename
. ΠΠΎΡΡ Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ 80.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ pod (deployment) ΠΈ ΡΠ΅ΡΠ²ΠΈΡ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ (
ΠΠΎΡ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ:
~$ 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-ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠΈΠ»Π°ΠΌΠΈ default backend
ΠΡΡΠ³Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ β Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΠ΅ΡΡ HTTP-ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ (404, 500, 502β¦) Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ (Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΡΠ°ΡΠΈΠ²ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ). ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ·Π²Π°Π½ΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎΡΠ΄Π°Π²Π°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ΅ΠΉΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
- ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π²ΡΡΠ΅ ΠΈΠ· ΠΏΡΠ½ΠΊΡΠ° ΠΏΡΠΎ default backend;
- Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ConfigMap nginx-ingress Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»ΡΡ
custom-http-errors
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ404,503
(ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ΄Π°ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ).
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ: ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ° 404 ΠΈΠ»ΠΈ 503 Π·Π°ΠΏΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π² Π½ΠΎΠ²ΡΠΉ default backendβ¦
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ default backend ΠΈ custom-http-errors Π½ΡΠΆΠ½ΠΎ ΡΡΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ:
!!! 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.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ
Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ° ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ (ΠΏΠΎΠ»Π½ΡΠΉ ΠΈΡ
ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ΅Π½
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΡΠ°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΡΠ²Π΅ΡΠ°.
Π Π°Π·Π½ΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ β ΡΠ°Π·Π½ΡΠΉ 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 Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Ρ Π² ΡΠ΅ΡΠ²ΠΈΡ error-pages ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π½ΡΠΆΠ½ΡΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ.
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
Ingress ΡΠ°ΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π΅ Π±ΡΠ»ΠΎ (
Ingress < 0.23: ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠ΅ΡΠ²ΡΠΉ
ΠΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠ΄Π°Π΅Ρ ΡΠ²ΠΎΠΈ ΡΡΡΠ°Π½ΠΈΡΡ, Ρ Π½Π°Ρ ΠΎΠ±ΡΡΠ½ΡΠΉ HTML, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠΌΠ΅Π΅Ρ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΡΠ΄Π°Π²Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅ ΠΊΠΎΠ΄Ρ ΠΎΡΠ²Π΅ΡΠ°. Π’Π°ΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΊΠ°ΡΡΠ²Π°Π΅ΡΡΡ Ρ Ingress’ΠΎΠΌ Ρ 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.
ΠΡΠΈ ΡΡΠΎΠΌ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π³Π΄Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ, Π² Ingress’Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ server-snippet ΠΈΠ»ΠΈ configuration-snippet ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:
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: ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π²ΡΠΎΡΠΎΠΉ
ΠΠ°ΡΠΈΠ°Π½Ρ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈβ¦ ΠΠ° ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΏΡΡΡ, Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ· custom-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;
}
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ, Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΠΉ location, Π³Π΄Π΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ Π² Β«ΡΠΎΠ΄Π½ΠΎΠΌΒ»
P.S.
ΠΡΡΠ³ΠΎΠ΅ ΠΈΠ· ΡΠΈΠΊΠ»Π° K8s tips & tricks:
- Β«
ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Helm 2 Β»; - Β«
Π Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ·Π»ΠΎΠ² ΠΈ ΠΎ Π½Π°Π³ΡΡΠ·ΠΊΠ°Ρ Π½Π° Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Β»; - Β«
ΠΠΎΡΡΡΠΏ ΠΊ dev-ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ°ΠΌ Β»; - Β«
Π£ΡΠΊΠΎΡΡΠ΅ΠΌ bootstrap Π±ΠΎΠ»ΡΡΠΈΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ Β».
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«
ΠΠ°Π·Π°Π΄ ΠΊ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Istio. Π§Π°ΡΡΡ 1 Β»; - Β«
[ΠΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅] Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ ΡΠ΅ΡΠΈ Π² Kubernetes. Π§Π°ΡΡΡ 3 Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com