Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΈΡΠΊΠ°ΠΌ Π΄Π° Π³ΠΎΠ²ΠΎΡΡ Π·Π° Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° NGINX Ingress, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π·Π° ΡΠ΅Ρ
Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠ½Π΅ΡΠΎ ΠΈΠΌ.
1. ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ NGINX Ingress ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΠΈΡΠΊΠ°ΠΌΠ΅ Ingress Ρ Ρ ΠΎΡΡ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ Π΅ Π² ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° Ingress, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΠΊΠΎΠ΄ Π·Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ 404:
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° Π²ΡΠ΅ ΠΏΠΎ-ΡΠ΅ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π½ΠΈ ΠΈΠ΄Π²Π°Ρ Ρ ΠΌΠΎΠ»Π±Π° Π΄Π° ΠΈΠΌ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΡΠΈ Ρ ΡΠΈΡΠΌΠ΅Π½ΠΎ Π»ΠΎΠ³ΠΎ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ 404. ΠΠ° ΡΠΎΠ²Π° NGINX Ingress ΠΈΠΌΠ° default-backend-service
. ΠΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ Π·Π°ΠΏΠΈΡΠ° Π½Π° ΡΠΎΡΠΌΠ°ΡΠ° ΠΊΠ°ΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π° ΠΎΠΏΡΠΈΡΡΠ° ΡΡΡ ΡΡΡΠΎΡΠΎ ΠΈΠΌΠ΅ namespace/servicename
. Π‘Π΅ΡΠ²ΠΈΠ·Π½ΠΈΡΡ ΠΏΠΎΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π΅ 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
, ΠΏΠΎΠΏΠ°Π΄Π°Ρ Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. Π ΡΠΏΠΈΡΡΠΊΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΠΎΠ·ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΡΡΠ°Π½Π° sadsdasdas
.
2. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° HTTP Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅
ΠΡΡΠ³Π° ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠ° Π·Π°ΡΠ²ΠΊΠΈ, Π·Π°Π²ΡΡΡΠ²Π°ΡΠΈ Ρ HTTP Π³ΡΠ΅ΡΠΊΠΈ (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.
Π€Π°ΠΊΡ Π΅, ΡΠ΅ ΠΊΠΎΠ³Π°ΡΠΎ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ΅Π½Π°, Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Ρ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (ΠΏΡΠ»Π½ΠΈΡΡ ΠΈΠΌ ΡΠΏΠΈΡΡΠΊ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½
Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° ΠΏΠΎΠ³ΡΠΈΠΆΠ΅ΡΠ΅ ΡΠ΅ Π·Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ ΠΊΠΎΠ΄ Π·Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ.
Π Π°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ - ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π±Π΅ΠΊΠ΅Π½Π΄ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅
Π’Π°ΠΊΠ° ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ Π΅ Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ Π·Π° ΡΠ΅Π»ΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ, Π° ΡΠ΅ ΠΎΡΠ½Π°ΡΡ ΡΠ°ΠΌΠΎ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Ingress. ΠΠΊΠΎ ΡΡΠ²ΠΏΠ°Π΄Π° 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 Π½ΡΠΌΠ°Ρ
Π° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ. (
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 Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΡΡΠ²ΡΡΠ΅Π½ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΡΡ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅:
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: Π²ΡΠΎΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄
ΠΠ°ΡΠΈΠ°Π½Ρ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Ρ Π΅Π΄ΡΡΠΈ ... Π ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ ΡΠΎΠ²Π° Π΅ ΠΏΠΎ-ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½ Π½Π°ΡΠΈΠ½, Π·Π°ΠΈΠΌΡΡΠ²Π°Π½ ΠΎΡ 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;
}
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π·Π° Π²ΡΡΠΊΠ° Π³ΡΠ΅ΡΠΊΠ°, ΠΊΠΎΡΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΠΌ, ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π½Π°ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΈ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ, ΠΊΠ°ΠΊΡΠΎ Π² "native"
PS
ΠΡΡΠ³ΠΈ ΠΎΡ ΡΠ΅ΡΠΈΡΡΠ° ΡΡΠ²Π΅ΡΠΈ ΠΈ ΡΡΠΈΠΊΠΎΠ²Π΅ Π½Π° K8s:
- Β«
ΠΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° Helm 2 Β»; - Β«
ΠΡΠ½ΠΎΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π²ΡΠ·Π»ΠΈΡΠ΅ ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡΡΠ° Π½Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Β»; - Β«
ΠΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ°ΠΉΡΠΎΠ²Π΅ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Β»; - Β«
Π£ΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° bootstrap Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ".
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- Β«
ΠΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΡΠΌ ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈΡΠ΅ Ρ Istio. Π§Π°ΡΡ 1 Β»; - Β«
[ΠΠ»ΡΡΡΡΠΈΡΠ°Π½ΠΎ] Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π² ΠΌΡΠ΅ΠΆΠ° Π½Π° Kubernetes. Π§Π°ΡΡ 3 ".
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com