Kubernetes рдЯрд┐рдкрд╛ рдЖрдгрд┐ рдпреБрдХреНрддреНрдпрд╛: NGINX рдкреНрд░рд╡реЗрд╢ рдордзреАрд▓ рд╕рд╛рдиреБрдХреВрд▓ рддреНрд░реБрдЯреА рдкреГрд╖реНрдареЗ

Kubernetes рдЯрд┐рдкрд╛ рдЖрдгрд┐ рдпреБрдХреНрддреНрдпрд╛: NGINX рдкреНрд░рд╡реЗрд╢ рдордзреАрд▓ рд╕рд╛рдиреБрдХреВрд▓ рддреНрд░реБрдЯреА рдкреГрд╖реНрдареЗ

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдорд▓рд╛ рд╡реИрдпрдХреНрддрд┐рдХреГрдд рддреНрд░реБрдЯреА рдкреГрд╖реНрдареЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕ рдЗрдВрдЧреНрд░реЗрд╕рдЪреНрдпрд╛ рджреЛрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдмрджреНрджрд▓, рддрд╕реЗрдЪ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдорд░реНрдпрд╛рджрд╛ рдЖрдгрд┐ рддреНрдпрд╛рднреЛрд╡рддреА рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдВрдмрджреНрджрд▓ рдмреЛрд▓рд╛рдпрдЪреЗ рдЖрд╣реЗ.

1. рдбреАрдлреЙрд▓реНрдЯ рдмреЕрдХрдПрдВрдб рдмрджрд▓рдгреЗ

рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, NGINX Ingress рдбреАрдлреЙрд▓реНрдЯ рдмреЕрдХрдПрдВрдб рд╡рд╛рдкрд░рддреЗ, рдЬреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЬреЗрд╡реНрд╣рд╛ рдЗрдВрдЧреНрд░реЗрд╕ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдирд╕рд▓реЗрд▓реЗ рд╣реЛрд╕реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдЗрдВрдЧреНрд░реЗрд╕рдЪреА рд╡рд┐рдирдВрддреА рдХрд░рддрд╛рдирд╛, рдЖрдореНрд╣рд╛рд▓рд╛ 404 рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдбрд╕рд╣ рдЦрд╛рд▓реАрд▓ рдкреГрд╖реНрда рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ:

Kubernetes рдЯрд┐рдкрд╛ рдЖрдгрд┐ рдпреБрдХреНрддреНрдпрд╛: NGINX рдкреНрд░рд╡реЗрд╢ рдордзреАрд▓ рд╕рд╛рдиреБрдХреВрд▓ рддреНрд░реБрдЯреА рдкреГрд╖реНрдареЗ

рддрдерд╛рдкрд┐, рдЕрдзрд┐рдХрд╛рдзрд┐рдХ рд╡реЗрд│рд╛ рдЖрдордЪреЗ рдХреНрд▓рд╛рдпрдВрдЯ рддреНрдпрд╛рдВрдЪреЗ рдкреГрд╖реНрда рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд▓реЛрдЧреЛрд╕рд╣ рдЖрдгрд┐ рдорд╛рдирдХ 404 рдРрд╡рдЬреА рдЗрддрд░ рд╕реБрд╡рд┐рдзрд╛рдВрд╕рд╣ рджрд╛рдЦрд╡рдгреНрдпрд╛рдЪреА рд╡рд┐рдирдВрддреА рдШреЗрдКрди рдпреЗрддрд╛рдд. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, NGINX Ingress рдЖрд╣реЗ рдЕрдВрдЧрднреВрдд рдХреНрд╖рдорддрд╛ рдкреБрдиреНрд╣рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рд╛ default-backend-service. рдЖрдореНрд╣реА рддреНрдпрд╛рдЪ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рдкрд░реНрдпрд╛рдпрд╛рд╕рд╛рдареА рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдореНрд╣рдгреВрди рдлреЙрд░рдореЕрдЯ рдПрдВрдЯреНрд░реА рдкрд╛рд╕ рдХрд░рддреЛ namespace/servicename. рд╕реЗрд╡реЗрдЪреЗ рдкреЛрд░реНрдЯ 80 рдЕрд╕рд╛рд╡реЗ.

рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдкреЙрдб (рдЙрдкрдпреЛрдЬрди) рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕рд╣ рд╕реЗрд╡рд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (YAML рдордзреНрдпреЗ рдЙрджрд╛рд╣рд░рдг рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА ingress-nginx repository рдордзреВрди), рдЬреЗ рдбреАрдлреЙрд▓реНрдЯ рдмреЕрдХрдПрдВрдб рдРрд╡рдЬреА рджрд┐рд▓реЗ рдЬрд╛рдИрд▓.

рдпреЗрдереЗ рдПрдХ рд▓рд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ:

~$ 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...) рд╕рдВрдкрд▓реЗрд▓реНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рдЬреНрдпрд╛ рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдд рдирд╛рд╣реАрдд (рд╕рдВрдмрдВрдзрд┐рдд рд╕реБрдВрджрд░ рдкреГрд╖реНрдареЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реА рдирд╛рд╣реАрдд). рд╣реЗ рдПрдХрд╛рдзрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдордзреНрдпреЗ рд╕рдорд╛рди рддреНрд░реБрдЯреА рдкреГрд╖реНрдареЗ рд╕рд░реНрд╡реНрд╣ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдЪреНрдпрд╛ рдЗрдЪреНрдЫреЗрдореБрд│реЗ рджреЗрдЦреАрд▓ рдЕрд╕реВ рд╢рдХрддреЗ.

рд╕рд░реНрд╡реНрд╣рд░ рд╕рд╛рдЗрдбрд╡рд░ рд╣реЗ рдкреНрд░рдХрд░рдг рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

  1. рдбреАрдлреЙрд▓реНрдЯ рдмреЕрдХрдПрдВрдбрдмрджреНрджрд▓ рдкрд░рд┐рдЪреНрдЫреЗрджрд╛рддреАрд▓ рд╡рд░реАрд▓ рд╕реВрдЪрдирд╛рдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рд╛;
  2. nginx-ingress рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди ConfigMap рдордзреНрдпреЗ рдПрдХ рдХреА рдЬреЛрдбрд╛ custom-http-errors, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдореВрд▓реНрдпрд╛рд╕рд╣ 404,503 (рдирд╡реАрди рдирд┐рдпрдорд╛рдВрджреНрд╡рд╛рд░реЗ рдХрд╡реНрд╣рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рддреНрд░реБрдЯреА рдХреЛрдбрд╢реА рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ).

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓рд╛ рдЖрд╣реЗ: рдЬреЗрд╡реНрд╣рд╛ рдХреНрд▓рд╛рдпрдВрдЯ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд╛рд▓реВ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдб 404 рдХрд┐рдВрд╡рд╛ 503 рд╕рд╣ рддреНрд░реБрдЯреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрд▓, рддреЗрд╡реНрд╣рд╛ рд╡рд┐рдирдВрддреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдирд╡реАрди рдбреАрдлреЙрд▓реНрдЯ рдмреЕрдХрдПрдВрдбрд╡рд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓...

рддрдерд╛рдкрд┐, рдбреАрдлреЙрд▓реНрдЯ рдмреЕрдХрдПрдВрдб рдЖрдгрд┐ рд╕рд╛рдиреБрдХреВрд▓-рдПрдЪрдЯреАрдЯреАрдкреА-рдПрд░рд░реНрд╕рд╕рд╛рдареА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛рдирд╛, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

!!! 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 рдХрд┐рдВрд╡рд╛ рдЙрдЪреНрдЪ, рдиреЗрдЯрд┐рд╡реНрд╣ рдЗрдВрдЧреНрд░реЗрд╕ рднрд╛рд╖реНрдпреЗ рд╡рд╛рдкрд░рд╛:

  1. рдЖрдореНрд╣реА рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░реВ рд╢рдХрддреЛ default-backend рддреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡реЗрд╢рд╛рдЪрд╛ рднрд╛рд╖реНрдп рд╡рд╛рдкрд░реВрди;
  2. рдЖрдореНрд╣реА рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░реВ рд╢рдХрддреЛ custom-http-errors рддреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡реЗрд╢рд╛рдЪрд╛ рднрд╛рд╖реНрдп рд╡рд╛рдкрд░реВрди.

рдкрд░рд┐рдгрд╛рдореА, рдкреНрд░рд╡реЗрд╢ рд╕рдВрд╕рд╛рдзрди рдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕реЗрд▓:

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 рд╡рд╛рдЬрддрд╛ рднрд╛рдЧреНрдпрд╡рд╛рди рдХрдорд┐рдЯ). рдЖрдгрд┐ рдЬрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рддреБрдордЪреНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ 2 рдкреВрд░реНрдгрдкрдгреЗ рднрд┐рдиреНрди рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдЪрд╛рд▓реВ рдЕрд╕рддреАрд▓ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рднрд┐рдиреНрди рдбреАрдлреЙрд▓реНрдЯ-рдмреЕрдХрдПрдВрдб-рд╕реЗрд╡рд╛ рдЖрдгрд┐ рднрд┐рдиреНрди рддреНрд░реБрдЯреА рдХреЛрдбрдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛рдпрдЪреА рдЕрд╕реЗрд▓, рддрд░ рддреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдбреНрд╕ рд╡рд╛рдкрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓, рдЬреНрдпрд╛рдкреИрдХреА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрди рдЖрд╣реЗрдд.

рдкреНрд░рд╡реЗрд╢ <0.23: рдПрдХрд╛рдХрдбреЗ рдЬрд╛

рд╣рд╛ рдкрд░реНрдпрд╛рдп рд╕реЛрдкрд╛ рдЖрд╣реЗ. рддреНрдпрд╛рдЪреНрдпрд╛ рдкреГрд╖реНрдард╛рдВрдирд╛ рд╕реЗрд╡рд╛ рджреЗрдгрд╛рд░рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореНрд╣рдгреВрди, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдирд┐рдпрдорд┐рдд HTML рдЖрд╣реЗ, рдЬреНрдпрд╛рд▓рд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд╕реЗ рдкрд╣рд╛рд╡реЗ рдЖрдгрд┐ рдпреЛрдЧреНрдп рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдб рдХрд╕реЗ рдкрд░рдд рдХрд░рд╛рд╡реЗ рд╣реЗ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА. рдЕрд╕рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ url рд╡рд░реВрди Ingress рд╕рд╣ рдЖрдгрд▓рд╛ рдЬрд╛рддреЛ /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 рдЯрд┐рдкрд╛ рдЖрдгрд┐ рдпреБрдХреНрддреНрдпрд╛ рдорд╛рд▓рд┐рдХреЗрддреАрд▓ рдЗрддрд░:

рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛