Kubernetes เดจเตเดฑเตเด™เตเด™เตเด•เดณเตเด‚ เดคเดจเตเดคเตเดฐเด™เตเด™เดณเตเด‚: NGINX เดชเตเดฐเดตเต‡เดถเดจเดคเตเดคเดฟเดฒเต† เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เดชเดฟเดถเด•เต เดชเต‡เดœเตเด•เตพ

Kubernetes เดจเตเดฑเตเด™เตเด™เตเด•เดณเตเด‚ เดคเดจเตเดคเตเดฐเด™เตเด™เดณเตเด‚: NGINX เดชเตเดฐเดตเต‡เดถเดจเดคเตเดคเดฟเดฒเต† เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เดชเดฟเดถเด•เต เดชเต‡เดœเตเด•เตพ

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดตเตเดฏเด•เตเดคเดฟเด—เดคเดฎเดพเด•เตเด•เดฟเดฏ เดชเดฟเดถเด•เต เดชเต‡เดœเตเด•เตพ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ NGINX เดชเตเดฐเดตเต‡เดถเดจเดคเตเดคเดฟเดจเตเดฑเต† เดฐเดฃเตเดŸเต เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด…เดตเดฏเดฟเตฝ เดจเดฟเดฒเดจเดฟเตฝเด•เตเด•เตเดจเตเดจ เดชเดฐเดฟเดฎเดฟเดคเดฟเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด…เดตเดฏเตโ€Œเด•เตเด•เต เดšเตเดฑเตเดฑเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดตเดดเดฟเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

1. เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฌเดพเด•เตเด•เต†เตปเดกเต เดฎเดพเดฑเตเดฑเตเดจเตเดจเต

เดกเดฟเดซเต‹เตพเดŸเตเดŸเดพเดฏเดฟ, เดŽเตปเดœเดฟเดŽเตปเดŽเด•เตเดธเต เด‡เตปเด—เตเดฐเต†เดธเตเดธเต เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฌเดพเด•เตเด•เต†เตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เด…เดจเตเดฌเดจเตเดง เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดฟเตผเดตเตเดตเดนเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚, เด‡เตปเด—เตเดฐเต†เดธเตเดธเต เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเดฟเตฝ เด‡เดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดนเต‹เดธเตเดฑเตเดฑเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด‡เตปเด—เตเดฐเต†เดธเตเดธเต เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, 404 เดชเตเดฐเดคเดฟเด•เดฐเดฃ เด•เต‹เดกเตเดณเตเดณ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเต‡เดœเต เดžเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเด‚:

Kubernetes เดจเตเดฑเตเด™เตเด™เตเด•เดณเตเด‚ เดคเดจเตเดคเตเดฐเด™เตเด™เดณเตเด‚: 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 เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด•เต€ เดšเต‡เตผเด•เตเด•เตเด• 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-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด‡เตปเด—เตเดฐเต†เดธเตเดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เตเดจเตเดจเดคเต /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;
      }

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดžเด™เตเด™เตพ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจ เด“เดฐเต‹ เดชเดฟเดถเด•เดฟเดจเตเด‚, "เดจเต‡เดฑเตเดฑเต€เดตเต" เดŽเดจเตเดจเดคเดฟเดฒเต†เดจเตเดจเดชเต‹เดฒเต† เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เดณเตเด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจ เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดฒเตŠเด•เตเด•เต‡เดทเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด•เดธเตเดฑเตเดฑเด‚-เดŽเดฑเตผ-เดชเต‡เดœเตเด•เตพ. เด‡เดคเตเดตเดดเดฟ เดตเตเดฏเด•เตเดคเดฟเด—เดค เดฒเตŠเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เตเด‚ เดธเต†เตผเดตเดฑเตเด•เตพเด•เตเด•เตเดฎเดพเดฏเดฟ เดชเต‹เดฒเตเด‚ เดจเดฎเตเด•เตเด•เต เดตเตเดฏเดคเตเดฏเดธเตเดค เดตเตเดฏเด•เตเดคเดฟเด—เดค เดชเดฟเดถเด•เต เดชเต‡เดœเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เดชเดฟ.เดŽเดธเต

K8s เดจเตเดฑเตเด™เตเด™เตเด•เดณเตเด‚ เดคเดจเตเดคเตเดฐเด™เตเด™เดณเตเด‚ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฎเดฑเตเดฑเตเดณเตเดณเดต:

เดžเด™เตเด™เดณเตเดŸเต† เดฌเตเดฒเต‹เด—เดฟเดฒเตเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด•:

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•