рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдпреБрдХреНрддрд┐рдпрд╛рдБ рдФрд░ рдпреБрдХреНрддрд┐рдпрд╛рдБ: рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдЗрдирдЧреНрд░реЗрд╕ рдореЗрдВ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдпреБрдХреНрддрд┐рдпрд╛рдБ рдФрд░ рдпреБрдХреНрддрд┐рдпрд╛рдБ: рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдЗрдирдЧреНрд░реЗрд╕ рдореЗрдВ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда

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

1. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреИрдХрдПрдВрдб рдмрджрд▓рдирд╛

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдЗрдирдЧреНрд░реЗрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рдРрд╕реЗ рд╣реЛрд╕реНрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП рдЗрдирдЧреНрд░реЗрд╕ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрдирдЧреНрд░реЗрд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ 404 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдпреБрдХреНрддрд┐рдпрд╛рдБ рдФрд░ рдпреБрдХреНрддрд┐рдпрд╛рдБ: рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдЗрдирдЧреНрд░реЗрд╕ рдореЗрдВ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда

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

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреЙрдб (рддреИрдирд╛рддреА) рдФрд░ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреА рд╣реЛрдЧреА (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 рдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐-рдкреГрд╖реНрда рд╕реЗрд╡рд╛ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

╨Т рдЗрдирдЧреНрд░реЗрд╕ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рдереА (0.23 рдкрд░ рдШрд╛рддрдХ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛). рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ 2 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рдмреИрдХрдПрдВрдб-рд╕реЗрд╡рд╛ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╣реИрдВред

рдкреНрд░рд╡реЗрд╢ <0.23: рдПрдХ рддрдХ рдкрд╣реБрдВрдЪреЗрдВ

рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕рд░рд▓ рд╣реИ. рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдЕрдкрдиреЗ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдпрдорд┐рдд HTML рд╣реИ, рдЬреЛ рд╣реЗрдбрд░ рдХреЛ рджреЗрдЦрдирд╛ рдФрд░ рд╕рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпреВрдЖрд░рдПрд▓ рд╕реЗ рдЗрдирдЧреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рд░реЛрд▓ рдЖрдЙрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ /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;
      }

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

рдкреБрдирд╢реНрдЪ

K8s рдЯрд┐рдкреНрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЕрдиреНрдп:

рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рднреА рдкрдврд╝реЗрдВ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ