เบ„เบณเปเบ™เบฐเบ™เบณ เปเบฅเบฐเป€เบ„เบฑเบ”เบฅเบฑเบš Kubernetes: เปœเป‰เบฒเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡เปƒเบ™ NGINX Ingress

เบ„เบณเปเบ™เบฐเบ™เบณ เปเบฅเบฐเป€เบ„เบฑเบ”เบฅเบฑเบš Kubernetes: เปœเป‰เบฒเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡เปƒเบ™ NGINX Ingress

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบญเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡ NGINX Ingress เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบซเบ™เป‰เบฒเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบžเบงเบเบกเบฑเบ™เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบญเป‰เบญเบกเบ‚เป‰เบฒเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

1. เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ backend เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™

เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, NGINX Ingress เปƒเบŠเป‰ backend เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป€เบกเบทเปˆเบญเบฎเป‰เบญเบ‡เบ‚เป Ingress เบฅเบฐเบšเบธเป‚เบฎเบ”เบ—เบตเปˆเบšเปเปˆเบขเบนเปˆเปƒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Ingress, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบซเบ™เป‰เบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เบ•เบญเบšเป‚เบ•เป‰ 404:

เบ„เบณเปเบ™เบฐเบ™เบณ เปเบฅเบฐเป€เบ„เบฑเบ”เบฅเบฑเบš Kubernetes: เปœเป‰เบฒเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡เปƒเบ™ NGINX Ingress

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เป€เบฅเบทเป‰เบญเบเป†เบฅเบนเบเบ„เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบ”เป‰เบงเบเป‚เบฅเป‚เบเป‰เบ‚เบญเบ‡เบšเปเบฅเบดเบชเบฑเบ”เปเบฅเบฐเบชเบดเปˆเบ‡เบญเปเบฒเบ™เบงเบเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบญเบทเปˆเบ™เป†เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ 404. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, NGINX Ingress เบกเบต เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบ•เบปเบง เบ™เบดเบเบฒเบกเปƒเปเปˆ default-backend-service. เบžเบงเบเป€เบฎเบปเบฒเบœเปˆเบฒเบ™เบฅเบฒเบเบเบฒเบ™เบฎเบนเบšเปเบšเบšเป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบเบฑเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡เบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™ namespace/servicename. เบžเบญเบ”เบ‚เบญเบ‡เบšเปเบฅเบดเบเบฒเบ™เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™ 80.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡ pod เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡ (เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰) เปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ YAML เบˆเบฒเบ ingress-nginx repository), เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบกเบญเบšเปƒเบซเป‰เปเบ—เบ™ backend เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เป‰เบญเบเป†:

~$ 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, เบ•เบปเบเบขเบนเปˆเปƒเบ™ default-backend. เปƒเบ™เบฅเบฒเบเบŠเบทเปˆเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เป‚เบ”เป€เบกเบ™เบ™เบตเป‰เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™ sadsdasdas.

2. เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” HTTP เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ backend เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™

เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบญเบทเปˆเบ™เปเบกเปˆเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบชเบดเป‰เบ™เบชเบธเบ”เปƒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” HTTP (404, 500, 502 ... ) เบเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบšเปเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง (เบซเบ™เป‰เบฒเบ—เบตเปˆเบชเบงเบเบ‡เบฒเบกเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™). เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบเป‰เบญเบ™เบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเบซเบ™เบฒเบ‚เบญเบ‡เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเบˆเบฐเบฎเบฑเบšเปƒเบŠเป‰เบซเบ™เป‰เบฒเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ”เบฝเบงเบเบฑเบ™เปƒเบ™เบซเบผเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เปƒเบ™เบ”เป‰เบฒเบ™เป€เบŠเบตเบŸเป€เบงเบตเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™:

  1. เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบˆเบฒเบเบงเบฑเบเบเปˆเบฝเบงเบเบฑเบš backend เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™;
  2. เป€เบžเบตเปˆเบกเบเบฐเปเบˆเปƒเบชเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ nginx-ingress ConfigMap custom-http-errors, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฑเบšเบกเบนเบ™เบ„เปˆเบฒ 404,503 (เปเบ™เปˆเบ™เบญเบ™เบเบปเบ‡เบเบฑเบ™เบเบฑเบšเบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบ–เบทเบเบ„เบธเป‰เบกเบ„เบญเบ‡เป‚เบ”เบเบเบปเบ”เบฅเบฐเบšเบฝเบšเปƒเบซเบกเปˆ).

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเป„เบ”เป‰: เป€เบกเบทเปˆเบญเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบเปเบฒเบฅเบฑเบ‡เปเบฅเปˆเบ™เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ‚เบญเบ‡ 404 เบซเบผเบท 503, เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบˆเบฐเบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒ backend เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบซเบกเปˆเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” ...

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบš backend เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐ custom-http-errors, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™:

!!! 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.

เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบงเปˆเบฒเป€เบกเบทเปˆเบญเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡, headers เบˆเบฐเบกเบตเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฑเบšเบฅเบฐเบซเบฑเบ”เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป€เบ•เบฑเบกเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบกเบตเบขเบนเปˆ. เบ—เบตเปˆเบ™เบตเป‰).

เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡เบ•เป‰เบญเบ‡ เป€เบšเบดเปˆเบ‡เปเบเบ‡เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ เบˆเบฒเบเป€เบญเบเบฐเบชเบฒเบ™เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ.

เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบกเบต backends เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™

เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเปเปˆเปเบกเปˆเบ™เบ—เบปเปˆเบงเป‚เบฅเบเบชเปเบฒเบฅเบฑเบšเบเบธเปˆเบกเบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบ•เปˆเปƒเบŠเป‰เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเบฐเป€เบžเบฒเบฐ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบงเบ”เป€เบšเบดเปˆเบ‡เบชเบฐเบšเบฑเบš Ingress. เบ–เป‰เบฒเบกเบฑเบ™เบเบปเบ‡เบเบฑเบ™ 0.23 เบซเบผเบทเบชเบนเบ‡เบเบงเปˆเบฒ, เปƒเบŠเป‰เบ„เปเบฒเบšเบฑเบ™เบเบฒเบ Ingress เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡:

  1. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ” override default-backend เบเบฒเบ™ เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ Ingress เบ‚เบญเบ‡ เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ„เปเบฒโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹;
  2. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ” override custom-http-errors เบเบฒเบ™ เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ Ingress เบ‚เบญเบ‡ เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ„เปเบฒโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Ingress เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

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 เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”เบ—เบตเปˆเปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบเบธเปˆเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ - backend-service เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบฅเบฐเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบžเบงเบเบกเบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบญเบ‡เบญเบฑเบ™.

Ingress < 0.23: เป€เบ‚เบปเป‰เบฒเบซเบฒเปœเบถเปˆเบ‡

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ™เบตเป‰เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบเบงเปˆเบฒ. เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบต HTML เบ›เบปเบเบเบฐเบ•เบด, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เป€เบšเบดเปˆเบ‡เบซเบปเบงเบ‚เปเป‰เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบฅเบฐเบซเบฑเบ”เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ–เบทเบเบกเป‰เบงเบ™เบญเบญเบเบ”เป‰เบงเบ Ingress เบˆเบฒเบ url /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.

เปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เปƒเบ™ Ingress เบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบก server-snippet เบซเบผเบท configuration-snippet เบ—เบตเปˆเบกเบตเป€เบ™เบทเป‰เบญเบซเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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;
      }

Ingress < 0.23: เบงเบดเบ—เบตเบ—เบตเบชเบญเบ‡

เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ›เบฐโ€‹เบกเบงเบ™โ€‹เบœเบปเบ™ headers ... เปเบฅเบฐโ€‹เป‚เบ”เบโ€‹เบ—เบปเปˆเบงโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบ—เบตเปˆโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹เบซเบผเบฒเบโ€‹, เบขเบทเบกโ€‹เบˆเบฒเบ custom-http-errorsโ€‹. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ (เบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบ) เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบปเปˆเบงเป‚เบฅเบ.

เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ”เบฝเบงโ€‹เบเบฑเบ™โ€‹ เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบŸเบฑเบ‡เบซเบปเบงเบ‚เปเป‰เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปเบฅเบฐเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เป€เบžเบตเปˆเบก server-snippet เปƒเบชเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Ingress เบ—เบตเปˆเบกเบตเป€เบ™เบทเป‰เบญเบซเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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;
      }

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡, เบšเปˆเบญเบ™เบ—เบตเปˆเบชเปˆเบงเบ™เบซเบปเบงเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเปƒเบชเปˆ, เบ„เบทเบเบฑเบš "native" เบซเบ™เบถเปˆเบ‡. custom-error-pages. เบงเบดเบ—เบตเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

PS

เบญเบทเปˆเบ™เป†เบˆเบฒเบเบŠเบธเบ”เป€เบ„เบฑเบ”เบฅเบฑเบš เปเบฅเบฐเป€เบ„เบฑเบ”เบฅเบฑเบšเบ‚เบญเบ‡ K8s:

เบญเปˆเบฒเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™