
Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Ρ
ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ NGINX Ingress, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΡΡΠ°Π½ΠΈΡ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
Π² Π½ΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ
ΠΈ ΡΠΏΠΎΡΠΎΠ±Π°Ρ
ΠΈΡ
ΠΎΠ±ΠΎΠΉΡΠΈ.
1. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΡΠΊΠ΅Π½Π΄Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² NGINX Ingress ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ default backend, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΠΎΡΠ΅ IngressβΠ° Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ ΠΎΡΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅Ρ Π² Ingress-ΡΠ΅ΡΡΡΡΠ°Ρ , ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΊΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ° 404:
![]()
ΠΠ΄Π½Π°ΠΊΠΎ Π²ΡΠ΅ ΡΠ°ΡΠ΅ Π½Π°ΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ Ρ ΠΏΡΠΎΡΡΠ±ΠΎΠΉ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ 404 ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΡΠΈΡΠΌΠ΅Π½Π½ΡΠΌ Π»ΠΎΠ³ΠΎΡΠΈΠΏΠΎΠΌ ΠΈ ΠΏΡΠΎΡΠΈΠΌΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°ΠΌΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Ρ NGINX Ingress Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ default-backend-service. ΠΠ΄Π½ΠΎΠΈΠΌΡΠ½Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ ΡΠΎΡΠΌΠ°ΡΠ° namespace/servicename. ΠΠΎΡΡ Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ 80.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ pod (deployment) ΠΈ ΡΠ΅ΡΠ²ΠΈΡ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ( ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ingress-nginx), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΄Π°Π²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ 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-ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠΈΠ»Π°ΠΌΠΈ 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 ΡΠ°ΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π΅ Π±ΡΠ»ΠΎ (). Π Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 2 ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ°Π·Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ default-backend-service ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠ΄ΠΎΠ² ΠΎΡΠΈΠ±ΠΎΠΊ β Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ΄ΡΡΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ workaroundβΠ°ΠΌΠΈ, ΠΊΠΎΠΈΡ Ρ Π½Π°Ρ Π΄Π²Π°.
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. ΠΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΡΠ½ΡΡ (ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅) ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
Π¨Π°Π³ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΌΠ΅Π΅Ρ ΡΠ»ΡΡΠ°ΡΡ Π½ΡΠΆΠ½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ. ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² Ingress ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ server-snippet ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:
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, Π³Π΄Π΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ Π² Β«ΡΠΎΠ΄Π½ΠΎΠΌΒ» . Π’Π°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ locationβΠΎΠ² ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
P.S.
ΠΡΡΠ³ΠΎΠ΅ ΠΈΠ· ΡΠΈΠΊΠ»Π° K8s tips & tricks:
- «»;
- «»;
- «»;
- «».
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- «»;
- «».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com

