Kubernetes рд╕реБрдЭрд╛рд╡ рд░ рдЪрд╛рд▓рд╣рд░реВ: NGINX рдкреНрд░рд╡реЗрд╢рдорд╛ рдЕрдиреБрдХреВрд▓рди рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрдард╣рд░реВ

Kubernetes рд╕реБрдЭрд╛рд╡ рд░ рдЪрд╛рд▓рд╣рд░реВ: NGINX рдкреНрд░рд╡реЗрд╢рдорд╛ рдЕрдиреБрдХреВрд▓рди рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрдард╣рд░реВ

рдпрд╕ рд▓реЗрдЦрдорд╛, рдо рд╡реНрдпрдХреНрддрд┐рдЧрдд рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрдард╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд╕рдореНрдмрдиреНрдзрд┐рдд NGINX Ingress рдХреЛ рджреБрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ, рд╕рд╛рдереИ рддрд┐рдиреАрд╣рд░реВрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╕реАрдорд┐рддрддрд╛рд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╡рд░рд┐рдкрд░рд┐ рдХрд╛рдо рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛рд╣рд░реВ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред

1. рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдмреНрдпрд╛рдХрдЗрдиреНрдб рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджреИ

рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, NGINX Ingress рд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдмреНрдпрд╛рдХрдЗрдиреНрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рд╕рдореНрдмрдиреНрдзрд┐рдд рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫред рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рдЬрдм рдЗрдиреНрдЧреНрд░реЗрд╕ рд╕реНрд░реЛрддрд╣рд░реВрдорд╛ рдирднрдПрдХреЛ рд╣реЛрд╕реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреЗ рдЗрдиреНрдЧреНрд░реЗрд╕ рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд▓реЗ 404 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдбрдХреЛ рд╕рд╛рде рдирд┐рдореНрди рдкреГрд╖реНрда рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ:

Kubernetes рд╕реБрдЭрд╛рд╡ рд░ рдЪрд╛рд▓рд╣рд░реВ: NGINX рдкреНрд░рд╡реЗрд╢рдорд╛ рдЕрдиреБрдХреВрд▓рди рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрдард╣рд░реВ

рдпрджреНрдпрдкрд┐, рдЕрдзрд┐рдХ рд░ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣рд╛рдореНрд░рд╛ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВ рдорд╛рдирдХ 404 рдХреЛ рд╕рдЯреНрдЯрд╛ рдХрд░реНрдкреЛрд░реЗрдЯ рд▓реЛрдЧреЛ рд░ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВрдХреЛ рд╕рд╛рде рдЖрдлреНрдиреЛ рдкреГрд╖реНрда рджреЗрдЦрд╛рдЙрди рдЕрдиреБрд░реЛрдзрдХреЛ рд╕рд╛рде рдЖрдЙрдБрдЫрдиреНред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, NGINX Ingress рдЫ рдирд┐рд░реНрдорд┐рдд рдХреНрд╖рдорддрд╛ рдкреБрди: рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН default-backend-serviceред рд╣рд╛рдореА рд╕рдорд╛рди рдирд╛рдордХреЛ рд╡рд┐рдХрд▓реНрдкрдорд╛ рддрд░реНрдХрдХреЛ рд░реВрдкрдорд╛ рдврд╛рдБрдЪрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкрд╛рд╕ рдЧрд░реНрдЫреМрдВ namespace/servicenameред рд╕реЗрд╡рд╛рдХреЛ рдкреЛрд░реНрдЯ реореж рд╣реБрдиреБрдкрд░реНрдЫред

рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдЖрд╡реЗрджрди (рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ) рд░ рд╕реЗрд╡рд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫредYAML рдорд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ingress-nginx рднрдгреНрдбрд╛рд░рдмрд╛рдЯ), рдЬреБрди рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдмреНрдпрд╛рдХрдЗрдиреНрдбрдХреЛ рд╕рдЯреНрдЯрд╛ рджрд┐рдЗрдиреЗрдЫред

рдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рджреГрд╖реНрдЯрд╛рдиреНрдд рдЫ:

~$ 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 рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдкрдорд╛ рдХреБрдЮреНрдЬреА рдердкреНрдиреБрд╣реЛрд╕реН 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.

рддрдереНрдп рдпреЛ рд╣реЛ рдХрд┐ рдЬрдм рдЕрдиреБрд░реЛрдз рдкреБрди: рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЧрд░рд┐рдиреНрдЫ, рд╣реЗрдбрд░рд╣рд░реВрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рд░ рдердк рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд╕рд╛рде рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ (рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкреВрд░реНрдг рд╕реВрдЪреА рдЙрдкрд▓рдмреНрдз рдЫред рдпрд╣рд╛рдБ).

рдпрд╕рдХреЛ рдорддрд▓рдм рддрдкрд╛рдИ рдЖрдлреИрд▓реЗ рдЧрд░реНрдиреБрдкрд░реНрдЫ рд╕рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдбрдХреЛ рдЦреНрдпрд╛рд▓ рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реН. рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛред рдХрд╛рдЧрдЬрд╛рддрдмрд╛рдЯ рдпрд╕рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджрдЫред

рдмрд┐рднрд┐рдиреНрди рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд╣рд░реВрдорд╛ рдлрд░рдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдмреНрдпрд╛рдХрдЗрдиреНрдбрд╣рд░реВ рдЫрдиреН

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

рдкреНрд░рд╡реЗрд╢ <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

рдпреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕реЗрд╡рд╛ рдХреНрд▓рд╕реНрдЯрд░рдЖрдИрдкреА рдкреНрд░рдХрд╛рд░рдХреЛ рд╣реБрдиреБрдкрд░реНрдЫред

рдПрдХреИ рд╕рдордпрдорд╛, рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдЬрд╣рд╛рдБ рд╣рд╛рдореА рддреНрд░реБрдЯрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрдиреЗрдЫреМрдВ, 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: рджреЛрд╕реНрд░реЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рд╣реЗрдбрд░рд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рд╕рдХреНрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рдХрд▓реНрдк... рд░ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдпреЛ рдЕрдиреБрдХреВрд▓рди-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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди