Π‘ΡŠΠ²Π΅Ρ‚ΠΈ ΠΈ Ρ‚Ρ€ΠΈΠΊΠΎΠ²Π΅ Π½Π° 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), ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС Π΄Π°Π΄Π΅Π½ вмСсто Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.

Π•Ρ‚ΠΎ ΠΌΠ°Π»ΠΊΠ° ΠΈΠ»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ:

~$ 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. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π° към конфигурацията ConfigMap 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.

Π€Π°ΠΊΡ‚ Π΅, Ρ‡Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ заявката бъдС прСнасочСна, Π·Π°Π³Π»Π°Π²ΠΊΠΈΡ‚Π΅ Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π° информация с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация (ΠΏΡŠΠ»Π½ΠΈΡΡ‚ ΠΈΠΌ списък Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ Ρ‚ΡƒΠΊ).

Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ трябва ΠΏΠΎΠ³Ρ€ΠΈΠΆΠ΅Ρ‚Π΅ сС Π·Π° правилния ΠΊΠΎΠ΄ Π·Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€. Π•Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ докумСнтацията ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ.

Π Π°Π·Π»ΠΈΡ‡Π½ΠΈ прилоТСния - Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π±Π΅ΠΊΠ΅Π½Π΄ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅

Π’Π°ΠΊΠ° Ρ‡Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ Π΅ Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ Π·Π° цСлия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, Π° сС отнася само Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ прилоТСния, ΠΏΡŠΡ€Π²ΠΎ трябва Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ вСрсията Π½Π° Ingress. Ако съвпада 0.23 ΠΈΠ»ΠΈ ΠΏΠΎ-висока, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ собствСнитС Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° Ingress:

  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 напълно Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ прилоТСния, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ във вашия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠΈ искатС Π΄Π° посочитС Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ услуги ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π·Π° всяко ΠΎΡ‚ тях, Ρ‰Π΅ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° Ρ‚ΠΎΠ²Π°, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅.

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 добавямС ΡΡŠΡ€Π²ΡŠΡ€Π΅Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ със слСдното ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅:

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: Π²Ρ‚ΠΎΡ€ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Ρ…Π΅Π΄ΡŠΡ€ΠΈ ... И ΠΊΠ°Ρ‚ΠΎ цяло Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎ-ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½, заимстван ΠΎΡ‚ custom-http-errors. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Ρ€ΡŠΡ‡Π½ΠΎ (ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅) Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Π½Π΅ промСнятС Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡ‚Π΅ настройки.

Π‘Ρ‚ΡŠΠΏΠΊΠΈΡ‚Π΅ са ΠΊΠ°ΠΊΡ‚ΠΎ слСдва. НиС създавамС ΡΡŠΡ‰ΠΎΡ‚ΠΎ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ»ΡƒΡˆΠ° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈΡ‚Π΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈ ΠΈ Π΄Π° отговаря ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. ДобавямС ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈ прилоТСния към 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-страници. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° създадСм Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ пСрсонализирани страници Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π΄ΠΎΡ€ΠΈ Π·Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ мСстополоТСния ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ.

PS

Π”Ρ€ΡƒΠ³ΠΈ ΠΎΡ‚ сСрията ΡΡŠΠ²Π΅Ρ‚ΠΈ ΠΈ Ρ‚Ρ€ΠΈΠΊΠΎΠ²Π΅ Π½Π° K8s:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€