เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชŸเซ€เชชเซเชธ เช…เชจเซ‡ เชฏเซเช•เซเชคเชฟเช“: NGINX เชชเซเชฐเชตเซ‡เชถเชฎเชพเช‚ เช•เชธเซเชŸเชฎ เชญเซ‚เชฒ เชชเซƒเชทเซเช เซ‹

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชŸเซ€เชชเซเชธ เช…เชจเซ‡ เชฏเซเช•เซเชคเชฟเช“: NGINX เชชเซเชฐเชตเซ‡เชถเชฎเชพเช‚ เช•เชธเซเชŸเชฎ เชญเซ‚เชฒ เชชเซƒเชทเซเช เซ‹

เช† เชฒเซ‡เช–เชฎเชพเช‚, เชนเซเช‚ NGINX เชชเซเชฐเชตเซ‡เชถเชจเซ€ เชฌเซ‡ เชตเชฟเชถเซ‡เชทเชคเชพเช“ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เชœเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เช•เชฐเซ‡เชฒ เชญเซ‚เชฒ เชชเซƒเชทเซเช เซ‹เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡, เชคเซ‡เชฎเชœ เชคเซ‡เชฎเชพเช‚ เชฐเชนเซ‡เชฒเซ€ เชฎเชฐเซเชฏเชพเชฆเชพเช“ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เช†เชธเชชเชพเชธ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชคเซ‹ เชตเชฟเชถเซ‡.

1. เชกเชฟเชซเซ‰เชฒเซเชŸ เชฌเซ‡เช•เชเชจเซเชก เชฌเชฆเชฒเชตเซเช‚

เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, NGINX Ingress เชกเชฟเชซเซ‹เชฒเซเชŸ เชฌเซ‡เช•เชเชจเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡ เช…เชจเซเชฐเซ‚เชช เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡. เช†เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เช‡เชจเซเช—เซเชฐเซ‡เชธ เชธเช‚เชธเชพเชงเชจเซ‹เชฎเชพเช‚ เชจ เชนเซ‹เชฏ เชคเซ‡เชตเชพ เชนเซ‹เชธเซเชŸเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€เชจเซ‡ เช‡เชจเซเช—เซเชฐเซ‡เชธเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡, เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเชจเซ‡ 404 เชชเซเชฐเชคเชฟเชญเชพเชต เช•เซ‹เชก เชธเชพเชฅเซ‡ เชจเซ€เชšเซ‡เชจเซเช‚ เชชเซƒเชทเซเช  เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡:

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชŸเซ€เชชเซเชธ เช…เชจเซ‡ เชฏเซเช•เซเชคเชฟเช“: NGINX เชชเซเชฐเชตเซ‡เชถเชฎเชพเช‚ เช•เชธเซเชŸเชฎ เชญเซ‚เชฒ เชชเซƒเชทเซเช เซ‹

เชœเซ‹ เช•เซ‡, เชตเชงเซเชจเซ‡ เชตเชงเซ เชตเช–เชค เช…เชฎเชพเชฐเชพ เช•เซเชฒเชพเชฏเชจเซเชŸเซเชธ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค 404 เชจเซ‡ เชฌเชฆเชฒเซ‡ เชคเซ‡เชฎเชจเซเช‚ เชชเซƒเชทเซเช  เช•เซ‹เชฐเซเชชเซ‹เชฐเซ‡เชŸ เชฒเซ‹เช—เซ‹ เช…เชจเซ‡ เช…เชจเซเชฏ เชธเซเชตเชฟเชงเชพเช“ เชธเชพเชฅเซ‡ เชฌเชคเชพเชตเชตเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เชธเชพเชฅเซ‡ เช†เชตเซ‡ เช›เซ‡. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, NGINX เช‡เชจเซเช—เซเชฐเซ‡เชธ เชชเชพเชธเซ‡ เช›เซ‡ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เช•เซเชทเชฎเชคเชพ เชซเชฐเซ€เชฅเซ€ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‹ 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 เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ ConfigMap เชฎเชพเชŸเซ‡ เช•เซ€ เช‰เชฎเซ‡เชฐเซ‹ 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 เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เชฒเช— เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชšเชพเชฒเซ€ เชฐเชนเซ€ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเซ‡ เชคเซ‡ เชฆเชฐเซ‡เช• เชฎเชพเชŸเซ‡ เชเช• เช…เชฒเช— เชกเชฟเชซเซ‹เชฒเซเชŸ-เชฌเซ‡เช•เชเชจเซเชก-เชธเชฐเซเชตเชฟเชธ เช…เชจเซ‡ เชตเชฟเชตเชฟเชง เชเชฐเชฐ เช•เซ‹เชกเซเชธเชจเซ€ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช—เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹, เชคเซ‹ เช† เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชตเชฐเซเช•เช…เชฐเชพเช‰เชจเซเชกเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡, เชœเซ‡เชฎเชพเช‚เชฅเซ€ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฌเซ‡ เช›เซ‡.

เชชเซเชฐเชตเซ‡เชถ <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

เช† เชœเชฎเชพเชตเชŸ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‡เชตเชพ ClusterIP เชชเซเชฐเช•เชพเชฐเชจเซ€ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช.

เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เชœเซเชฏเชพเช‚ เช…เชฎเซ‡ เชญเซ‚เชฒ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€เชถเซเช‚, เชชเซเชฐเชตเซ‡เชถเชฎเชพเช‚ เช…เชฎเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เชธเชพเชฅเซ‡ เชธเชฐเซเชตเชฐ-เชธเซเชจเชฟเชชเซ‡เชŸ เช…เชฅเชตเชพ เช—เซ‹เช เชตเชฃเซ€-เชธเซเชจเชฟเชชเซ‡เชŸ เช‰เชฎเซ‡เชฐเซ€เช เช›เซ€เช:

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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹