ืขืฆื•ืช ืื•ืŸ ื˜ืจื™ืงืก ืคื•ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก: ืžื ื”ื’ ื˜ืขื•ืช ื‘ืœืขื˜ืขืจ ืื™ืŸ NGINX Ingress

ืขืฆื•ืช ืื•ืŸ ื˜ืจื™ืงืก ืคื•ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก: ืžื ื”ื’ ื˜ืขื•ืช ื‘ืœืขื˜ืขืจ ืื™ืŸ NGINX Ingress

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืื™ืš ื•ื•ื™ืœืŸ ืฆื• ืจืขื“ืŸ ื•ื•ืขื’ืŸ ืฆื•ื•ื™ื™ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ NGINX Ingress ืฉื™ื™ึทื›ื•ืช ืฆื• ื•ื•ื™ื™ึทื–ื ื“ื™ืง ืคืขืจื–ืขื ืœื™ื›ืขืŸ ื˜ืขื•ืช ื‘ืœืขื˜ืขืจ, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื“ื™ ืœื™ืžื™ื˜ื™ื™ืฉืึทื ื– ื•ื•ืึธืก ืขืงืกื™ืกื˜ื™ืจืŸ ืื™ืŸ ื–ื™ื™ ืื•ืŸ ื•ื•ืขื’ืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ืึทืจื•ื ื–ื™ื™.

1. ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื‘ืึทืงืขื ื“

ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, NGINX Ingress ื ื™ืฆื˜ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื‘ืึทืงืขื ื“, ื•ื•ืึธืก ืคึผืขืจืคืึธืจืžื– ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ืคื•ื ืงืฆื™ืข. ื“ืึธืก ืžื™ื™ื ื˜ ืึทื– ื•ื•ืขืŸ ืžื™ืจ ื‘ืขื˜ืŸ ืึทืŸ Ingress ื•ื•ืึธืก ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืึท ื‘ืึทืœืขื‘ืึธืก ื•ื•ืึธืก ืื™ื– ื ื™ืฉื˜ ืื™ืŸ ื“ื™ Ingress ืจืขืกื•ืจืกืŸ, ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืœืึทื˜ ืžื™ื˜ ืึท 404 ืขื ื˜ืคืขืจ ืงืึธื“:

ืขืฆื•ืช ืื•ืŸ ื˜ืจื™ืงืก ืคื•ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก: ืžื ื”ื’ ื˜ืขื•ืช ื‘ืœืขื˜ืขืจ ืื™ืŸ NGINX Ingress

ืึธื‘ืขืจ, ืžืขืจ ืื•ืŸ ืžืขืจ ืึธืคื˜ ืื•ื ื“ื–ืขืจ ืงืœื™ื™ืึทื ืฅ ืงื•ืžืขืŸ ืžื™ื˜ ืึท ื‘ืงืฉื” ืฆื• ื•ื•ื™ื™ึทื–ืŸ ื–ื™ื™ืขืจ ื‘ืœืึทื˜ ืžื™ื˜ ืึท ืคึฟื™ืจืžืข ืœืึธื’ืึธ ืื•ืŸ ืื ื“ืขืจืข ืึทืžืขื ืึทื˜ื™ื– ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ื ืึธืจืžืึทืœ 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>

ืึทื–ื•ื™ ืึทืœืข ื“ืึธื•ืžื™ื™ื ื– ื•ื•ืึธืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ื‘ืคื™ืจื•ืฉ ื‘ืืฉืืคืŸ ื“ื•ืจืš ื™ืžืœ ืžื™ื˜ kind: Ingress, ืคืึทืœืŸ ืื™ืŸ ืคืขืœื™ืงื™ื™ึทื˜-ื‘ืึทืงืขื ื“. ืื™ืŸ ื“ืขืจ ืจืฉื™ืžื” ืื•ื™ื‘ืŸ, ื“ืขื ืคืขืœื“ ืื™ื– ื’ืขื•ื•ืืจืŸ sadsdasdas.

2. ื”ืึทื ื“ืœื™ื ื’ ื”ื˜ื˜ืคึผ ืขืจืจืึธืจืก ืื™ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื ื™ืฆืŸ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื‘ืึทืงืขื ื“

ืืŸ ืื ื“ืขืจ ืกื™ื˜ื•ืึทืฆื™ืข ืื™ื– ืจื™ืงื•ื•ืขืก ื•ื•ืึธืก ืขื ื“ื™ืงืŸ ืžื™ื˜ ื”ื˜ื˜ืคึผ ืขืจืจืึธืจืก (404, 500, 502 ...) ืฆื• ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ืึธืก ื˜ื•ื˜ ื ื™ืฉื˜ ืคึผืจืึธืฆืขืก ืึทื–ืึท ืกื™ื˜ื•ืึทื˜ื™ืึธื ืก (ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ืฉื™ื™ืŸ ื‘ืœืขื˜ืขืจ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“). ื“ืึธืก ืงืขืŸ ืื•ื™ืš ื–ื™ื™ืŸ ืจืขื›ื˜ ืฆื• ื“ืขืจ ืคืึทืจืœืึทื ื’ ืคื•ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืฆื• ื“ื™ื ืขืŸ ื“ื™ ื–ืขืœื‘ืข ื˜ืขื•ืช ื‘ืœืขื˜ืขืจ ืื™ืŸ ืงื™ื™ืคืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–.

ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ืขื ืคืึทืœ ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจ ื–ื™ื™ึทื˜ ืžื™ืจ ื“ืึทืจืคึฟืŸ:

  1. ื’ื™ื™ ื“ื™ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืื•ื™ื‘ืŸ ืคื•ืŸ ื“ื™ ืคึผืึทืจืึทื’ืจืึทืฃ ื•ื•ืขื’ืŸ ืคืขืœื™ืงื™ื™ึทื˜ ื‘ืึทืงืขื ื“;
  2. ืœื™ื™ื’ ืึท ืฉืœื™ืกืœ ืฆื• ื“ื™ nginx-ingress ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ConfigMap custom-http-errors, ืœืžืฉืœ, ืžื™ื˜ ื“ื™ ื•ื•ืขืจื˜ 404,503 (ื“ืึธืš ืงืึธืจืึทืกืคึผืึทื ื“ื– ืฆื• ื“ื™ ื˜ืขื•ืช ืงืึธื•ื“ื– ื•ื•ืึธืก ื–ืขื ืขืŸ ื‘ืื“ืขืงื˜ ื“ื•ืจืš ื“ื™ ื ื™ื™ึทืข ื”ืขืจืฉืŸ).

ื“ืขืจ ื“ืขืจื•ื•ืึทืจื˜ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ืึทื˜ืฉื™ื•ื•ื“: ื•ื•ืขืŸ ื“ืขืจ ืงืœื™ืขื ื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืคืœื™ืกื ื“ื™ืง ืื•ืŸ ื‘ืืงื•ืžืขืŸ ืึท ื˜ืขื•ืช ืžื™ื˜ ืึท ืขื ื˜ืคืขืจ ืงืึธื“ ืคื•ืŸ 404 ืึธื“ืขืจ 503, ื“ื™ ื‘ืขื˜ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืจื™ื“ืขืจืขืงื˜ื™ื“ ืฆื• ื“ื™ ื ื™ื™ึทืข ืคืขืœื™ืงื™ื™ึทื˜ ื‘ืึทืงืขื ื“ ...

ืึธื‘ืขืจ, ื•ื•ืขืŸ ืื™ืจ ืึทื ื˜ื•ื•ื™ืงืœืขืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึฟืึทืจ ืคืขืœื™ืงื™ื™ึทื˜ ื‘ืึทืงืขื ื“ ืื•ืŸ ืžื ื”ื’-ื”ื˜ื˜ืคึผ-ืขืจืจืึธืจืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื ืขืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ืึท ื•ื•ื™ื›ื˜ื™ืง ืฉื˜ืจื™ืš:

!!! 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 ืึธื“ืขืจ ื”ืขื›ืขืจ, ื ื•ืฆืŸ ื“ื™ ื’ืขื‘ื•ื™ืจืŸ ื™ื ื’ืจืขืกืก ืึทื ืึทื˜ื™ื™ืฉืึทื ื–:

  1. ืžื™ืจ ืงืขื ืขืŸ ืึธื•ื•ื•ืขืจืจื™ื™ื“ default-backend ืคืึทืจ ื™ืขื“ืขืจ ืื™ื ื’ืจืขืกืก ื ื™ืฆืŸ ืึทื ืึทื˜ื™ื™ืฉืึทื ื–;
  2. ืžื™ืจ ืงืขื ืขืŸ ืึธื•ื•ื•ืขืจืจื™ื™ื“ custom-http-errors ืคืึทืจ ื™ืขื“ืขืจ ืื™ื ื’ืจืขืกืก ื ื™ืฆืŸ ืึทื ืึทื˜ื™ื™ืฉืึทื ื–.

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ื“ื™ 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 ื’ืึธืจ ืคืึทืจืฉื™ื“ืขื ืข ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ื“ื™ื™ืŸ ืงื ื•ื™ืœ ืื•ืŸ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืึท ืึทื ื“ืขืจืฉ ืคืขืœื™ืงื™ื™ึทื˜-ื‘ืึทืงืขื ื“-ื“ื™ื ืกื˜ ืื•ืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื˜ืขื•ืช ืงืึธื•ื“ื– ืคึฟืึทืจ ื™ืขื“ืขืจ ืคื•ืŸ ื–ื™ื™, ืคึฟืึทืจ ื“ืขื ืื™ืจ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืฆื• ื ื•ืฆืŸ ื•ื•ืึธืจืงืึทืจืึธื•ื ื“ืก, ืคื•ืŸ ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ืฆื•ื•ื™ื™.

ื™ื ื’ืจืขืกืก <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, ืžื™ืจ ืœื™ื™ื’ืŸ ืึท ืกืขืจื•ื•ืขืจ ืกื ื™ืคึผืึทื˜ ืึธื“ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืกื ื™ืคึผืึทื˜ ืžื™ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ืื™ื ื”ืึทืœื˜:

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: ืจื’ืข ืฆื•ื’ืึทื ื’

ืืŸ ืืคืฆื™ืข ืคืืจ ืืŸ ืืคืœื™ืงืืฆื™ืข ื•ื•ืืก ืงืขืŸ ืคืจืืฆืขืกื™ืจืŸ ื›ืขื“ืขืจ... ืื•ืŸ ื‘ื›ืœืœ ืื™ื– ื“ืืก ื ืžืขืจ ืจื™ื›ื˜ื™ื’ืขืจ ื•ื•ืขื’, ื’ืขืœื™ื™ื ื˜ ืคื•ืŸ ืžื ื”ื’-ื”ื˜ื˜ืคึผ-ืขืจืจืขืจืก. ื ื™ืฆืŸ ืขืก ืžืึทื ื™ื•ืึทืœื™ (ืงืึธืคึผื™ื™ื ื’) ื•ื•ืขื˜ ืœืึธื–ืŸ ืื™ืจ ื ื™ืฉื˜ ืฆื• ื˜ื•ื™ืฉืŸ ื“ื™ ื’ืœืื‘ืืœืข ืกืขื˜ื˜ื™ื ื’ืก.

ื“ื™ ืกื˜ืขืคึผืก ื–ืขื ืขืŸ ื•ื•ื™ ื’ื™ื™ื˜. ืžื™ืจ ืžืึทื›ืŸ ื–ืขืœื‘ื™ืงืขืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžื™ื˜ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ืึธืก ืงืขื ืขืŸ ื”ืขืจืŸ ืฆื• ื“ื™ ื ื™ื™ื˜ื™ืง ื›ืขื“ืœื™ื™ื ื– ืื•ืŸ ืจื™ืกืคึผืึทื ื“ ืจื™ื›ื˜ื™ืง. ืœื™ื™ื’ ืึท ืกืขืจื•ื•ืขืจ ืกื ื™ืคึผืึทื˜ ืฆื• ื“ื™ 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;
      }

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, ืคึฟืึทืจ ื™ืขื“ืขืจ ื˜ืขื•ืช ื•ื•ืึธืก ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืคึผืจืึธืฆืขืก, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืžืึทื›ืŸ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืŸ ืึธืจื˜, ื•ื•ื• ืึทืœืข ื“ื™ ื ื™ื™ื˜ื™ืง ื›ืขื“ืขืจื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ื™ื ืกืขืจื˜ืึทื“, ื•ื•ื™ ืื™ืŸ ื“ื™ "ื’ืขื‘ื•ื™ืจืŸ". ืžื ื”ื’-ื˜ืขื•ืช-ื‘ืœืขื˜ืขืจ. ื“ืขื ื•ื•ืขื’ ืžื™ืจ ืงืขื ืขืŸ ืžืึทื›ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืคืขืจื–ืขื ืœื™ื›ืขืŸ ื˜ืขื•ืช ื‘ืœืขื˜ืขืจ ืืคื™ืœื• ืคึฟืึทืจ ื™ื—ื™ื“ ืœืึธื•ืงื™ื™ืฉืึทื ื– ืื•ืŸ ืกืขืจื•ื•ืขืจืก.

ืคึผืก

ืื ื“ืขืจืข ืคื•ืŸ โ€‹โ€‹ื“ื™ K8s ืขืฆื•ืช ืื•ืŸ ื˜ืจื™ืงืก ืกืขืจื™ืข:

ืœื™ื™ืขื ืขืŸ ืื•ื™ืš ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’