เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจŸเจฟเจชเจธ เจ…เจคเฉ‡ เจŸเฉเจฐเจฟเจ•เจธ: NGINX เจ‡เจจเจ—เจฐเฉ‡เจธ เจตเจฟเฉฑเจš เจ•เจธเจŸเจฎ เจเจฐเจฐ เจชเฉ‡เจœ

เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจŸเจฟเจชเจธ เจ…เจคเฉ‡ เจŸเฉเจฐเจฟเจ•เจธ: NGINX เจ‡เจจเจ—เจฐเฉ‡เจธ เจตเจฟเฉฑเจš เจ•เจธเจŸเจฎ เจเจฐเจฐ เจชเฉ‡เจœ

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจคเจฐเฉเจŸเฉ€ เจชเฉฐเจจเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจจ เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค NGINX Ingress เจฆเฉ€เจ†เจ‚ เจฆเฉ‹ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚, เจจเจพเจฒ เจนเฉ€ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจš เจฎเฉŒเจœเฉ‚เจฆ เจธเฉ€เจฎเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจ†เจฒเฉ‡ เจฆเฉเจ†เจฒเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ‡ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฌเจพเจฐเฉ‡.

1. เจกเจฟเจซเฉŒเจฒเจŸ เจฌเฉˆเจ•เจเจ‚เจก เจฌเจฆเจฒเจฃเจพ

เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, NGINX Ingress เจกเจฟเจซเฉŒเจฒเจŸ เจฌเฉˆเจ•เจเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ…เจจเฉเจธเจพเจฐเฉ€ เจซเฉฐเจ•เจธเจผเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจ‡เจน เจนเฉˆ เจ•เจฟ เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจ‡เฉฐเจ—เจฐเฉˆเจธ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ‡เฉฑเจ• เจฎเฉ‡เจœเจผเจฌเจพเจจ เจจเฉ‚เฉฐ เจจเจฟเจธเจผเจšเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เฉฐเจ—เจฐเฉˆเจธ เจธเจฐเฉ‹เจคเจพเจ‚ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• 404 เจœเจตเจพเจฌ เจ•เฉ‹เจก เจฆเฉ‡ เจจเจพเจฒ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเจพ เจชเฉฐเจจเจพ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉˆ:

เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจŸเจฟเจชเจธ เจ…เจคเฉ‡ เจŸเฉเจฐเจฟเจ•เจธ: NGINX เจ‡เจจเจ—เจฐเฉ‡เจธ เจตเจฟเฉฑเจš เจ•เจธเจŸเจฎ เจเจฐเจฐ เจชเฉ‡เจœ

เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจ…เจ•เจธเจฐ เจธเจพเจกเฉ‡ เจ—เจพเจนเจ• เจธเจŸเฉˆเจ‚เจกเจฐเจก 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 เจธเฉฐเจฐเจšเจจเจพ 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹