αž‚αž“αŸ’αž›αžΉαŸ‡ αž“αž·αž„αž›αŸ’αž”αž·αž… KubernetesαŸ– αž‘αŸ†αž–αŸαžšαž€αŸ†αž αž»αžŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„ NGINX Ingress

αž‚αž“αŸ’αž›αžΉαŸ‡ αž“αž·αž„αž›αŸ’αž”αž·αž… KubernetesαŸ– αž‘αŸ†αž–αŸαžšαž€αŸ†αž αž»αžŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„ NGINX Ingress

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž–αžΈαžšαžšαž”αžŸαŸ‹ NGINX Ingress αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž‘αŸ†αž–αŸαžšαž€αŸ†αž αž»αžŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“ αž€αŸαžŠαžΌαž…αž‡αžΆαžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αžœαžΆ αž“αž·αž„αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αž»αŸ†αžœαž·αž‰αž–αž½αž€αž‚αŸαŸ”

1. αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜

αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ NGINX Ingress αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž“αŸ…αž–αŸαž›αžŸαŸ’αž“αžΎαžŸαž»αŸ† Ingress αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž“αž’αžΆαž“ Ingress αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‘αŸ†αž–αŸαžšαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αŸαžαž€αžΌαžŠαž†αŸ’αž›αžΎαž™αžαž” 404αŸ–

αž‚αž“αŸ’αž›αžΉαŸ‡ αž“αž·αž„αž›αŸ’αž”αž·αž… KubernetesαŸ– αž‘αŸ†αž–αŸαžšαž€αŸ†αž αž»αžŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„ NGINX Ingress

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž’αžαž·αžαž·αž‡αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αž‘αžΎαž„αŸ—αž˜αž€αž‡αžΆαž˜αž½αž™αžŸαŸ†αžŽαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž‘αŸ†αž–αŸαžšαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŸαžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜ αž“αž·αž„αž‚αŸ’αžšαžΏαž„αž”αžšαž·αž€αŸ’αžαžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš 404 αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡ NGINX Ingress αž˜αžΆαž“ αžŸαž˜αžαŸ’αžαž—αžΆαž–αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ αž€αŸ†αžŽαžαŸ‹αž‘αžΎαž„αžœαž·αž‰ default-backend-service. αž™αžΎαž„αž”αž‰αŸ’αž‡αžΌαž“αž’αžΆαžαž»αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž‘αŸ…αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαžˆαŸ’αž˜αŸ„αŸ‡αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” namespace/servicename. αž…αŸ’αžšαž€αžšαž”αžŸαŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‚αž½αžšαžαŸ‚αž˜αžΆαž“ 80 αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαž pod αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ (αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™) αž“αž·αž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ (αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž§αž‘αžΆαž αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ YAML αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„ ingress-nginx) αžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™ 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 αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜

αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αž½αž™αž‘αŸ€αžαž‚αžΊαžŸαŸ†αžŽαžΎαžŠαŸ‚αž›αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž€αŸ†αž αž»αžŸ HTTP (404, 500, 502...) αž‘αŸ…αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αŸ‚αž”αž“αŸαŸ‡ (αž‘αŸ†αž–αŸαžšαžŠαŸαžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αž’αžΆαžαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αŸ)αŸ” αž“αŸαŸ‡αž€αŸαž’αžΆαž…αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž”αŸ†αžŽαž„αž”αŸ’αžšαžΆαžαŸ’αž“αžΆαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαžΎαž˜αŸ’αž”αžΈαž”αž˜αŸ’αžšαžΎαž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž€αŸ†αž αž»αžŸαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž€αžšαžŽαžΈαž“αŸαŸ‡αž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ–

  1. αž’αž“αž»αžœαžαŸ’αžαžαžΆαž˜αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžαžΆαž„αž›αžΎαž–αžΈαž€αžαžΆαžαžŽαŸ’αžŒαž’αŸ†αž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ”
  2. αž”αž“αŸ’αžαŸ‚αž˜αžŸαŸ„αž‘αŸ…αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ nginx-ingress ConfigMap custom-http-errorsαž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžαž˜αŸ’αž›αŸƒ 404,503 (αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αžŽαžΆαžŸαŸ‹β€‹αžαŸ’αžšαžΌαžœβ€‹αž‚αŸ’αž“αžΆβ€‹αž“αžΉαž„β€‹αž€αžΌαžŠβ€‹αž€αŸ†αž αž»αžŸβ€‹αžŠαŸ‚αž›β€‹αž‚αŸ’αžšαž”β€‹αžŠαžŽαŸ’αžαž”αŸ‹β€‹αžŠαŸ„αž™β€‹αž…αŸ’αž”αžΆαž”αŸ‹β€‹αžαŸ’αž˜αžΈ)αŸ”

αž›αž‘αŸ’αž’αž•αž›αžšαŸ†αž–αžΉαž„αž‘αž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αŸ– αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αžαž·αžαž·αž‡αž“αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ†αž αž»αžŸαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αŸαžαž€αžΌαžŠαž†αŸ’αž›αžΎαž™αžαž” 404 ឬ 503 αžŸαŸ†αžŽαžΎαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸ…αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžαŸ’αž˜αžΈ...

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž“αž·αž„αž€αŸ†αž αž»αžŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“ 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.

αž€αžΆαžšαž–αž·αžαž‚αžΊαžαžΆαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŸαŸ†αžŽαžΎαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αž αž”αž‹αž˜αž€αžαžΆαž“αžΉαž„αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αŸαžαž€αžΌαžŠαž†αŸ’αž›αžΎαž™αžαž”αž–αžΈαž˜αž»αž“ αž“αž·αž„αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ (αž”αž‰αŸ’αž‡αžΈαž–αŸαž‰αž›αŸαž‰αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž’αžΆαž…αžšαž€αž”αžΆαž“ αž“αŸ…αž‘αžΈαž“αŸαŸ‡).

αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αž›αž½αž“αž―αž„ αžαŸ‚αžšαž€αŸ’αžŸαžΆαž›αŸαžαž€αžΌαžŠαž†αŸ’αž›αžΎαž™αžαž”αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ”. αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™ αž–αžΈαž―αž€αžŸαžΆαžšαž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžαž»αžŸαŸ—αž‚αŸ’αž“αžΆ

αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαžαžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αž·αž“αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαž€αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αž„αŸ’αž€αŸ„αž˜αž‘αžΆαŸ†αž„αž˜αžΌαž› αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αžαŸ‚αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αŸ†αžŽαŸ‚ Ingress αž‡αžΆαžŠαŸ†αž”αžΌαž„αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” 0.23 αž¬αžαŸ’αž–αžŸαŸ‹αž‡αžΆαž„αž“αŸαŸ‡αŸ”αž”αŸ’αžšαžΎαž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹ Ingress αžŠαžΎαž˜αŸ–

  1. αž™αžΎαž„αž’αžΆαž…αž”αžŠαž·αžŸαŸαž’αž”αžΆαž“αŸ” default-backend αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ αž“αŸƒαž‚αŸ’αž“αžΆ αžšαž”αžŸαŸ‹ Ingress αžŠαŸ„αž™αž”αŸ’αžšαžΎαž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹;
  2. αž™αžΎαž„αž’αžΆαž…αž”αžŠαž·αžŸαŸαž’αž”αžΆαž“αŸ” 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 αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŸαŸαžœαžΆ default-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αŸ– αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž‘αžΈαž–αžΈαžš

αž‡αž˜αŸ’αžšαžΎαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž‹αž˜αž€αžαžΆ... αž αžΎαž™αž‡αžΆαž‘αžΌαž‘αŸ…αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαžŠαŸ‚αž›αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‡αžΆαž„ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ’αž…αžΈαž–αžΈ 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;
      }

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ†αž αž»αžŸαž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž‘αžΈαžαžΆαŸ†αž„αžšαž”αžŸαŸ‹αž™αžΎαž„ αžŠαŸ‚αž›αž”αž‹αž˜αž€αžαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž› αžŠαžΌαž…αž‡αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ "ដើម" αž˜αž½αž™αŸ” αž‘αŸ†αž–αŸαžšαž€αŸ†αž αž»αžŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“. αžœαž·αž’αžΈαž“αŸαŸ‡αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž‘αŸ†αž–αŸαžšαž€αŸ†αž αž»αžŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆ αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αžΈαžαžΆαŸ†αž„αž“αžΈαž˜αž½αž™αŸ— αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αŸαžŠαŸ„αž™αŸ”

PS

αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž–αžΈαžŸαŸŠαŸαžšαžΈαž‚αž“αŸ’αž›αžΉαŸ‡ αž“αž·αž„αž›αŸ’αž”αž·αž… K8sαŸ–

αžŸαžΌαž˜αž’αžΆαž“αž•αž„αžŠαŸ‚αžšαž“αŸ…αž›αžΎαž”αŸ’αž›αž€αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹